Comments (11)
Re-opening this as it's one of the caveats I want to address before 1.0.0. ie dry-system could benefit from this and possibly many more gems.
from dry-configurable.
One use case I have for this is a setting whose default value should be set to the value of a different setting:
class A extend Dry::Configurable
setting :foo, 5
setting :bar, self.config.foo
end
This causes a crash right now.
from dry-configurable.
Have you checked https://dry-rb.org/gems/dry-configurable/testing/ ?
from dry-configurable.
I hadn't, and the funny thing is that it was a PR of mine which introduced it :D
However, it doesn't change anything for this scenario:
class A
extend Dry::Configurable
setting :a
end
A.config
require 'dry/configurable/test_interface'
A.enable_test_interface
A.reset_config
class A
setting :b
end
# => Dry::Configurable::AlreadyDefinedConfig (Cannot add setting +b+, A is already configured)
from dry-configurable.
Hm, we could fix it by resetting the @config_defined
variable. Allowing adding settings dynamically though possible (as far as I can see) is 1) a breaking change 2) somewhat more involved, I wouldn't do it without a solid reason, it never was an issue beyond tests (again, AFAIK).
from dry-configurable.
somewhat more involved, I wouldn't do it without a solid reason
Yeah, I also felt uneasy with that. Finally, I have found a better way which doesn't need to reopen classes. So, at least for now, I'm going to close it.
Thank your for your help.
from dry-configurable.
@solnic a caveat you could encounter with this is that settings won't be added to subclasses when they haven been loaded before the new setting is added:
class A
extend Dry::Configurable
end
class B < A
end
A.setting :a
A.settings # => #<Set: {:a}>
B.settings # => #<Set: {}>
class C < A
end
C.settings # => #<Set: {:a}>
from dry-configurable.
I fixed it for real in #77
from dry-configurable.
oops, that's a different use case, re-opening 🙄
from dry-configurable.
This was fixed in 0.11.0
from dry-configurable.
@dorner your usecase works now too with 0.11.0
from dry-configurable.
Related Issues (20)
- `finalize!` should freeze config recursively
- Leave setting values as `Undefined` rather than coercing to `nil` for un-set settings HOT 2
- Add `Settings#replace` to support wholesale replacement of settings in a configurable object
- Understanding the thread safety claim - random sum every program invocation HOT 1
- 0.13.0 release checklist HOT 10
- default values cannot be lazy evaluated
- Unexpected Dry::Schema::MissingMessageError HOT 1
- Add Zeitwerk autoloader HOT 1
- `v0.16.0` of dry-configurable breaks `require "dry-validation"` HOT 2
- 0.16.0 breaks Sinatra config_file HOT 9
- 0.16.0 breaking change to how settings with a `constructor` behave HOT 2
- 0.16.0 breaks Zeitwerk integration for other gems HOT 1
- Autoloading with zeitwerk results in uninitialized constant Dry::Core::ClassAttributes::IDENTITY HOT 1
- 0.15.0 broke `config.update` with constuctor requiring nested value HOT 1
- As an aside, I've also discovered similar failures if I do the same thing to the `pluralize_spec`: HOT 1
- Changelog for v1.0.2 not in main branch HOT 2
- Raise more meaningful exception when included more than once
- Config#update does not return self HOT 1
- Does not work from within a trap context HOT 5
- Values are being memoized between config instances HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dry-configurable.