[LazyBlock] Allows using complex expressions with configuration #1931
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR is motivated by a bug I've introduced on our system.
The problem, when you are trying to waterfall a configuration, is that
LazyValue
doesn't play nicely inside an expression so this codeIs evaluated when the class is load as: configuration[:attribute] => LazyValue || 'default_value' => LazyValue
Which means that even when you mount the API with
attribute: nil
the value will equalnil
rather than'default_value'
as a developer might expect.To mitigate this, I've introduced a lazy block, so you are able to put that expression within a
mounted
block which will only be evaluated when the API is mounted, and furthermore, will prevent methods using the response of the expression to running before the API is mounted