Comments (6)
I think we're gonna add this feature. We had a couple legit cases in dry-(system|web) land where having configurable objects would be useful.
from dry-configurable.
But we can add an instance behaviour (PoC, fastest rough example):
module Dry
module Configurable
def self.included(base)
# NOTE: ugly, but only for a PoC-example
base.class_eval do
def initialize
@_config_mutex = ::Mutex.new
@_settings = ::Concurrent::Array.new
@_reader_attributes = ::Concurrent::Array.new
end
end
end
end
end
end
and then:
class Config
include Dry::Configurable
end
config = Config.new
config.setting :a, reader: true do
setting :b, 'kek'
end
puts config.a.b # => "kek"
config.configure do |c|
c.a.b = 'pek'
end
puts config.a.b # => "pek"
Sure, need to refactor a lot, but it really possible ;) WDYT?
from dry-configurable.
@ilnurnasyrov this library should only be used as a class-level DSL, AFAIK there is no documentation that says it should work when included, it could be updated to raise an exception when included, although I'm not sure it's worth doing that.
from dry-configurable.
@ilnurnasyrov you can simply define a proxy object with a dynamic module instantiation - and u will get a simple instance implementation without monkey patching :)
from dry-configurable.
@ergosploit do you have a use-case for instance-level configuration? It isn't supported intentionally because every time I've come across a use for it I've later realised that there was a better solution to the issues I had.
from dry-configurable.
Oh! thank you, i just needed to configure instances because i wanted to use two connections to third party api. I ended up using dry-initializer.
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.