Releases: dry-rb/dry-configurable
v1.2.0
v1.1.0
Fixed
- Allow nested settings to default to
Undefined
(fixes #158 via #161) (@emptyflask)
v1.0.1
v1.0.0
v0.16.1
v0.16.0
Added
-
Support for custom config classes via
config_class:
option (#136 by @solnic)extend Dry::Configurable(config_class: MyConfig)
Your config class should inherit from
Dry::Configurable::Config
. -
Return
Dry::Core::Constants::Undefined
(instead of nil) as the value for non-configured settings via adefault_undefined: true
option (#141 by @timriley)extend Dry::Configurable(default_undefined: true)
You must opt into this feature via the
default_undefined: true
option. Non-configured setting values are stillnil
by default.
Fixed
Changed
-
Improve memory usage by separating setting definitions from config values (#138 by @timriley)
Your usage of dry-configurable may be impacted if you have been accessing objects from
_settings
or the internals ofDry::Configurable::Config
._settings
now returnsDry::Configurable::Setting
instances, which contain only the details from the setting's definition. Setting values remain inDry::Configurable::Config
.
v0.15.0
Changed
-
The
finalize!
method (as class or instance method, depending on whether you extend or includeDry::Configurable
respectively) now accepts a booleanfreeze_values:
argument, which if true, will recursively freeze all config values in addition to theconfig
itself. (#105 by @ojab)class MyConfigurable include Dry::Configurable setting :db, default: "postgre" end my_obj = MyConfigurable.new my_obj.finalize!(freeze_values: true) my_obj.config.db << "sql" # Will raise FrozenError
-
Dry::Configurable::Config#update
will set hashes as values for non-nested settings (#131 by @ojab)class MyConfigurable extend Dry::Configurable setting :sslcert, constructor: ->(v) { v&.values_at(:pem, :pass)&.join } end MyConfigurable.config.update(sslcert: {pem: "cert", pass: "qwerty"}) MyConfigurable.config.sslcert # => "certqwerty"
-
Dry::Configurable::Config#update
will accept any values implicitly convertible to hash via#to_hash
(#133 by @timriley)
v0.14.0
Changed
- Settings defined after an access to
config
will still be made available on thatconfig
. (#130 by @timriley) - Cloneable settings are cloned immediately upon assignment. (#130 by @timriley)
- Changes to config values in parent classes after subclasses have already been created will not be propogated to those subclasses. Subclasses created after config values have been changed in the parent will receive those config values. (#130 by @timriley)
v0.13.0
Added
-
Added flags to determine whether to warn on the API usage deprecated in this release (see "Changed" section below). Set these to
false
to suppress the warnings. (#124 by @timriley)Dry::Configurable.warn_on_setting_constructor_block false Dry::Configurable.warn_on_setting_positional_default false
Fixed
- Fixed
ArgumentError
for classes includingDry::Configurable
whoseinitializer
has required kwargs. (#113 by @timriley)
Changed
-
Deprecated the setting constructor provided as a block. Provide it via the
constructor:
keyword argument instead. (#111 by @waiting-for-dev & @timriley)setting :path, constructor: -> path { Pathname(path) }
-
Deprecated the setting default provided as the second positional argument. Provide it via the
default:
keyword argument instead. (#112 and #121 by @waiting-for-dev & @timriley)setting :path, default: "some/default/path"
-
[BREAKING] Removed implicit
to_hash
conversion fromConfig
. (#114 by @timriley)
v0.12.1
Added
- Settings may be specified with a
cloneable
option, e.g.
setting :component_dirs, Configuration::ComponentDirs.new, cloneable: true
This change makes it possible to provide “rich” config values that carry their own
configuration interface.
In the above example, ComponentDirs
could provide its own API for adding component
dirs and configuring aspects of their behavior at the same time. By being passed to
the setting along with cloneable: true
, dry-configurable will ensure the setting's
values are cloned along with the setting at all the appropriate times.
A custom cloneable setting value should provide its own #initialize_copy
(used by
Object#dup
) with the appropriate logic. (@timriley in #102)