7.9 KiB
0.12.1 2021-02-15
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)
Fixed
- Only
#initialize
instance method is prepended, leaving the rest of the instance methods to be included as normal again. This allows classes includingDry::Configurable
to override instance methods with their own methods as required (@adam12 in #103)
0.12.0 2020-12-26
Fixed
- Setting values provided by defaults and/or pre-processor blocks are no longer accidentally memoized across instances of classes including Dry::Configurable (#99) (@timriley & @esparta)
Changed
- Instance behavior is now prepended, so that if you have your own
initialize
, callingsuper
is no longer required (see #98 for more details) (@zabolotnov87) - Switched to equalizer from dry-core (@solnic)
0.11.6 2020-06-22
Changed
- A meaningful error is raised when the extension is included more than once (issue #89 fixed via #94) (@landongrindheim)
- Evaluate setting input immediately when input is provided. This allows for earlier feedback from constructors designed to raise errors on invalid input (#95) (@timriley)
0.11.5 2020-03-23
Fixed
- When settings are copied or cloned, unevaluated values will no longer be copied. This prevents unintended crashes when settings have constructors expecting a certain type of value, but that value is yet to be provided (Fixed via #87) (@timriley)
Changed
- A meaningful error is raised when the extension is included more than once (issue #89 fixed via #94) (@landongrindheim)
0.11.4 2020-03-16
Fixed
Config#update
returnsself
again (issue #60 fixed via #92) (@solnic)
Changed
Setting#inspect
no longer uses its value - this could cause crashes when inspecting settings that are yet to have a value applied (e.g. when they have a constructor that expects a value to be present) (@timriley)
0.11.3 2020-02-22
Fixed
- Retrieving settings by a string name works again (issue #82) (@waiting-for-dev)
0.11.2 2020-02-20
Fixed
- Warning about redefined
Setting#value
is gone (@solnic)
0.11.1 2020-02-18
Fixed
- You can use
:settings
as a config key again (issue #80) (@solnic) - Setting value is lazy-evaluated now, which fixes some cases where a constructor could crash with a
nil
value (@solnic)
0.11.0 2020-02-15
Complete rewrite of the library while keeping the public API intact. See #78 for a detailed overview.
Changed
- Accessing config in a parent class no longer prevents you from adding more settings in a child class (@solnic)
- (internal) New low-level Setting and Config API (@solnic)
- (internal)
config
objects use method_missing now (@solnic)
0.10.0 2020-01-31
YANKED because the change also broke inheritance for classes that used configured
before other classes inherited from them.
Changed
- Inheriting settings no longer defines the config object. This change fixed a use case where parent class that already used its config would prevent a child class from adding new settings (@solnic)
0.9.0 2019-11-06
Fixed
- Support for reserved names in settings. Some Kernel methods (
public_send
andclass
specifically) are not available if you use access settings via method call. Same for methods of theConfig
class. You can still access them with[]
and[]=
. Ruby keywords are fully supported. Invalid names containing special symbols (including!
and?
) are rejected. Note that these changes don't affect thereader
option, if you define a setting named:class
and passreader: true
... well ... (flash-gordon) - Settings can be redefined in subclasses without a warning about overriding exsting methods (flash-gordon)
- Fix warnings about using keyword arguments in 2.7 (koic)
0.8.3 2019-05-29
Fixed
Configurable#dup
andConfigurable#clone
make a copy of instance-level config so that it doesn't get mutated/shared across instances (flash-gordon)
0.8.2 2019-02-25
Fixed
- Test interface support for modules (Neznauy)
0.8.1 2019-02-06
Fixed
.configure
doesn't require a block, this makes the behavior consistent with the previous versions (flash-gordon)
0.8.0 2019-02-05
Added
-
Support for instance-level configuration landed. For usage,
include
the module instead of extending (flash-gordon)class App include Dry::Configurable setting :database end production = App.new production.config.database = ENV['DATABASE_URL'] production.finalize! development = App.new development.config.database = 'jdbc:sqlite:memory' development.finalize!
-
Config values can be set from a hash with
.update
. Nested settings are supported (flash-gordon)class App extend Dry::Configurable setting :db do setting :host setting :port end config.update(YAML.load(File.read("config.yml"))) end
Fixed
- A number of bugs related to inheriting settings from parent class were fixed. Ideally, new behavior will be 💯 predictable but if you observe any anomaly, please report (flash-gordon)
Changed
- [BREAKING] Minimal supported Ruby version is set to 2.3 (flash-gordon)
0.7.0 2017-04-25
Added
- Introduce
Configurable.finalize!
which freezes config and its dependencies (qcam)
Fixed
- Allow for boolean false as default setting value (yuszuv)
- Convert nested configs to nested hashes with
Config#to_h
(saverio-kantox) - Disallow modification on frozen config (qcam)