Implement conditional dependencies and subdependency mapping/passthrough #25
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.
Why
This is a PR for the long-awaited features: conditional dependencies and subdependency mapping/passthrough. In short, computed fields can now accept subdeps.
conditional dependencies
Load
fooonly whenuse_foois specified.subdependency mapping
Load
foowith subdeps specified infoospec.subdependency passthrough
Delegate subdeps as-is.
What
To support conditional dependencies, the following changes are made to the interpretation of subdeps:
To maintain compatibility and intuition, the normalization process is also changed:
:fooor[:foo]will be normalized into{ foo: [true] }(previously{ foo: [] }).{ foo: [] }will be normalized into{ foo: [true] }(previously{ foo: [] }).The values
nil,false,trueare filtered out in the following cases:define_loaderordefine_primary_loader).-> (subdeps) { subdeps.normalized ... }. Note that thesubdepsparameter itself keeps these values as-is.