forked from dry-rb/dry-configurable
-
Notifications
You must be signed in to change notification settings - Fork 0
/
changelog.yml
302 lines (277 loc) · 11.8 KB
/
changelog.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
---
- version: 1.0.1
date: 2022-11-16
changed:
- |-
Renamed `@config` and `@_settings` internal instance variables to `@__config__` and `@__settings__` in order to avoid clashes with user-defined instance variables (#159 by @timriley)
- version: 1.0.0
date: 2022-11-04
changed:
- "Dependency on `dry-core` was updated to ~> 1.0 (@solnic)"
- version: 0.16.1
date: 2022-10-13
changed:
- |-
Restored performance of config value reads (direct reader methods as well as aggregate methods like `#values` and `#to_h`) to pre-0.16.0 levels (#149 by @timriley)
- version: 0.16.0
summary:
date: 2022-10-08
fixed:
- 'Remove exec bit from version.rb (#139 by @Fryguy)'
added:
- |-
Support for custom config classes via `config_class:` option (#136 by @solnic)
```ruby
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 a `default_undefined: true` option (#141 by @timriley)
```ruby
extend Dry::Configurable(default_undefined: true)
```
You must opt into this feature via the `default_undefined: true` option. Non-configured setting values are still `nil` by default.
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 of `Dry::Configurable::Config`. `_settings` now returns `Dry::Configurable::Setting` instances, which contain only the details from the setting's definition. Setting _values_ remain in `Dry::Configurable::Config`.
- |-
Use Zeitwerk to speed up load time (#135 by @solnic)
- version: 0.15.0
summary:
date: '2022-04-21'
changed:
- |-
The `finalize!` method (as class or instance method, depending on whether you extend or include `Dry::Configurable` respectively) now accepts a boolean `freeze_values:` argument, which if true, will recursively freeze all config values in addition to the `config` itself. (#105 by @ojab)
```ruby
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)
```ruby
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)"
- version: 0.14.0
summary:
date: '2022-01-14'
changed:
- Settings defined after an access to `config` will still be made available on that
`config`. (#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)
- version: 0.13.0
summary:
date: '2021-09-12'
fixed:
- Fixed `ArgumentError` for classes including `Dry::Configurable` whose `initializer`
has required kwargs. (#113 by @timriley)
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)
```ruby
Dry::Configurable.warn_on_setting_constructor_block false
Dry::Configurable.warn_on_setting_positional_default false
```
changed:
- |-
Deprecated the setting constructor provided as a block. Provide it via the `constructor:` keyword argument instead. (#111 by @waiting-for-dev & @timriley)
```ruby
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)
```ruby
setting :path, default: "some/default/path"
```
- "[BREAKING] Removed implicit `to_hash` conversion from `Config`. (#114 by @timriley)"
- version: 0.12.1
summary:
date: '2021-02-15'
fixed:
- |-
Only `#initialize` instance method is prepended, leaving the rest of the instance
methods to be included as normal again. This allows classes including
`Dry::Configurable` to override instance methods with their own methods as required
(@adam12 in #103)
added:
- |-
Settings may be specified with a `cloneable` option, e.g.
```ruby
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)
- version: 0.12.0
summary:
date: '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)
added:
changed:
- 'Instance behavior is now prepended, so that if you have your own `initialize`,
calling `super` is no longer required (see #98 for more details) (@zabolotnov87)'
- Switched to equalizer from dry-core (@solnic)
- version: 0.11.6
summary:
date: '2020-06-22'
fixed:
added:
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)
- version: 0.11.5
summary:
date: '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)'
added:
changed:
- 'A meaningful error is raised when the extension is included more than once (issue
#89 fixed via #94) (@landongrindheim)'
- version: 0.11.4
summary:
date: '2020-03-16'
fixed:
- "`Config#update` returns `self` 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)"
- version: 0.11.3
summary:
date: '2020-02-22'
fixed:
- 'Retrieving settings by a string name works again (issue #82) (@waiting-for-dev)'
added:
changed:
- version: 0.11.2
summary:
date: '2020-02-20'
fixed:
- Warning about redefined `Setting#value` is gone (@solnic)
- version: 0.11.1
summary:
date: '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)
added:
changed:
- version: 0.11.0
date: '2020-02-15'
summary: '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)"
- version: 0.10.0
summary: YANKED because the change also broke inheritance for classes that used
`configured` before other classes inherited from them.
date: '2020-01-31'
fixed:
added:
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)
- version: 0.9.0
date: '2019-11-06'
fixed:
- 'Support for reserved names in settings. Some Kernel methods (`public_send` and
`class` specifically) are not available if you use access settings via method
call. Same for methods of the `Config` 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
the `reader` option, if you define a setting named `:class` and pass `reader:
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)
- version: 0.8.3
date: '2019-05-29'
fixed:
- "`Configurable#dup` and `Configurable#clone` make a copy of instance-level config
so that it doesn't get mutated/shared across instances (flash-gordon)"
- version: 0.8.2
date: '2019-02-25'
fixed:
- Test interface support for modules ([Neznauy](https://github.com/Neznauy))
- version: 0.8.1
date: '2019-02-06'
fixed:
- "`.configure` doesn't require a block, this makes the behavior consistent with
the previous versions ([flash-gordon](https://github.com/flash-gordon))"
- version: 0.8.0
date: '2019-02-05'
fixed:
- 'A number of bugs related to inheriting settings from parent class were fixed.
Ideally, new behavior will be :100: predictable but if you observe any anomaly,
please report ([flash-gordon](https://github.com/flash-gordon))'
added:
- |-
Support for instance-level configuration landed. For usage, `include` the module instead of extending ([flash-gordon](https://github.com/flash-gordon))
```ruby
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](https://github.com/flash-gordon))
```ruby
class App
extend Dry::Configurable
setting :db do
setting :host
setting :port
end
config.update(YAML.load(File.read("config.yml")))
end
```
changed:
- "[BREAKING] Minimal supported Ruby version is set to 2.3 ([flash-gordon](https://github.com/flash-gordon))"
- version: 0.7.0
date: '2017-04-25'
added:
- Introduce `Configurable.finalize!` which freezes config and its dependencies ([qcam](https://github.com/qcam))
fixed:
- Allow for boolean false as default setting value ([yuszuv](https://github.com/yuszuv))
- Convert nested configs to nested hashes with `Config#to_h` ([saverio-kantox](https://github.com/saverio-kantox))
- Disallow modification on frozen config ([qcam](https://github.com/qcam))