dry-initializer 3.0.1 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +259 -242
  3. data/LICENSE +20 -0
  4. data/README.md +18 -78
  5. data/dry-initializer.gemspec +34 -19
  6. data/lib/dry/initializer/builders/attribute.rb +84 -69
  7. data/lib/dry/initializer/builders/initializer.rb +56 -58
  8. data/lib/dry/initializer/builders/reader.rb +55 -47
  9. data/lib/dry/initializer/builders/signature.rb +29 -23
  10. data/lib/dry/initializer/builders.rb +9 -5
  11. data/lib/dry/initializer/config.rb +162 -158
  12. data/lib/dry/initializer/definition.rb +58 -54
  13. data/lib/dry/initializer/dispatchers/build_nested_type.rb +54 -40
  14. data/lib/dry/initializer/dispatchers/check_type.rb +45 -39
  15. data/lib/dry/initializer/dispatchers/prepare_default.rb +32 -25
  16. data/lib/dry/initializer/dispatchers/prepare_ivar.rb +13 -6
  17. data/lib/dry/initializer/dispatchers/prepare_optional.rb +14 -7
  18. data/lib/dry/initializer/dispatchers/prepare_reader.rb +29 -22
  19. data/lib/dry/initializer/dispatchers/prepare_source.rb +12 -5
  20. data/lib/dry/initializer/dispatchers/prepare_target.rb +44 -37
  21. data/lib/dry/initializer/dispatchers/unwrap_type.rb +21 -10
  22. data/lib/dry/initializer/dispatchers/wrap_type.rb +25 -17
  23. data/lib/dry/initializer/dispatchers.rb +48 -43
  24. data/lib/dry/initializer/dsl.rb +42 -34
  25. data/lib/dry/initializer/errors.rb +22 -0
  26. data/lib/dry/initializer/mixin/local.rb +19 -13
  27. data/lib/dry/initializer/mixin/root.rb +12 -6
  28. data/lib/dry/initializer/mixin.rb +17 -12
  29. data/lib/dry/initializer/struct.rb +34 -30
  30. data/lib/dry/initializer/undefined.rb +7 -1
  31. data/lib/dry/initializer/version.rb +7 -0
  32. data/lib/dry/initializer.rb +3 -0
  33. data/lib/dry-initializer.rb +2 -0
  34. data/lib/tasks/benchmark.rake +2 -0
  35. data/lib/tasks/profile.rake +4 -0
  36. metadata +27 -106
  37. data/.codeclimate.yml +0 -23
  38. data/.gitignore +0 -10
  39. data/.rspec +0 -4
  40. data/.rubocop.yml +0 -51
  41. data/.travis.yml +0 -28
  42. data/Gemfile +0 -29
  43. data/Guardfile +0 -5
  44. data/LICENSE.txt +0 -21
  45. data/Rakefile +0 -8
  46. data/benchmarks/compare_several_defaults.rb +0 -82
  47. data/benchmarks/plain_options.rb +0 -63
  48. data/benchmarks/plain_params.rb +0 -84
  49. data/benchmarks/with_coercion.rb +0 -71
  50. data/benchmarks/with_defaults.rb +0 -66
  51. data/benchmarks/with_defaults_and_coercion.rb +0 -59
  52. data/spec/attributes_spec.rb +0 -38
  53. data/spec/coercion_of_nil_spec.rb +0 -25
  54. data/spec/custom_dispatchers_spec.rb +0 -35
  55. data/spec/custom_initializer_spec.rb +0 -30
  56. data/spec/default_values_spec.rb +0 -83
  57. data/spec/definition_spec.rb +0 -111
  58. data/spec/invalid_default_spec.rb +0 -13
  59. data/spec/list_type_spec.rb +0 -32
  60. data/spec/missed_default_spec.rb +0 -14
  61. data/spec/nested_type_spec.rb +0 -44
  62. data/spec/optional_spec.rb +0 -71
  63. data/spec/options_tolerance_spec.rb +0 -11
  64. data/spec/public_attributes_utility_spec.rb +0 -22
  65. data/spec/reader_spec.rb +0 -87
  66. data/spec/repetitive_definitions_spec.rb +0 -69
  67. data/spec/several_assignments_spec.rb +0 -41
  68. data/spec/spec_helper.rb +0 -22
  69. data/spec/subclassing_spec.rb +0 -49
  70. data/spec/type_argument_spec.rb +0 -35
  71. data/spec/type_constraint_spec.rb +0 -78
  72. data/spec/value_coercion_via_dry_types_spec.rb +0 -29
data/CHANGELOG.md CHANGED
@@ -1,11 +1,47 @@
1
- # Change Log
1
+ <!--- DO NOT EDIT THIS FILE - IT'S AUTOMATICALLY GENERATED VIA DEVTOOLS --->
2
2
 
3
- All notable changes to this project will be documented in this file.
3
+ ## 3.1.0 2022-01-16
4
4
 
5
- The format is based on [Keep a Changelog](http://keepachangelog.com/)
6
- and this project adheres to [Semantic Versioning](http://semver.org/).
7
5
 
8
- ## [3.0.1] [2019-04-15]
6
+ ### Changed
7
+
8
+ - Improved error messages on type mismatch (@swerling)
9
+ - [BREAKING] Minimal supported Ruby version is 2.7 (@flash-gordon)
10
+
11
+ [Compare v3.0.4...v3.1.0](https://github.com/dry-rb/dry-initializer/compare/v3.0.4...v3.1.0)
12
+
13
+ ## 3.0.4 2020-09-29
14
+
15
+
16
+ ### Fixed
17
+
18
+ - Arity check for lambdas used for coercion (@flash-gordon)
19
+
20
+
21
+ [Compare v3.0.3...v3.0.4](https://github.com/dry-rb/dry-initializer/compare/v3.0.3...v3.0.4)
22
+
23
+ ## 3.0.3 2020-01-08
24
+
25
+
26
+ ### Fixed
27
+
28
+ - Constrained member arrays work correctly now (see #33) (@bjeanes + @solnic)
29
+
30
+
31
+ [Compare v3.0.2...v3.0.3](https://github.com/dry-rb/dry-initializer/compare/v3.0.2...v3.0.3)
32
+
33
+ ## 3.0.2 2019-11-07
34
+
35
+
36
+ ### Fixed
37
+
38
+ - Warnings about keyword arguments (flash-gordon)
39
+
40
+
41
+ [Compare v3.0.1...v3.0.2](https://github.com/dry-rb/dry-initializer/compare/v3.0.1...v3.0.2)
42
+
43
+ ## 3.0.1 2019-04-15
44
+
9
45
 
10
46
  ### Fixed
11
47
 
@@ -39,7 +75,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
39
75
  This restriction is necessary because we constantize option/param names
40
76
  when defining nested structs.
41
77
 
42
- ## [3.0.0] [2019-04-14]
78
+
79
+ [Compare v3.0.0...v3.0.1](https://github.com/dry-rb/dry-initializer/compare/v3.0.0...v3.0.1)
80
+
81
+ ## 3.0.0 2019-04-14
82
+
43
83
 
44
84
  ### Added
45
85
 
@@ -55,7 +95,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
55
95
  test = Test.new(42)
56
96
  test.foo # => ["42"]
57
97
  ```
58
-
59
98
  - It works with several layers of nesting (nepalez)
60
99
 
61
100
  ```ruby
@@ -68,7 +107,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
68
107
  test = Test.new(42)
69
108
  test.foo # => [["42"]]
70
109
  ```
71
-
72
110
  - Support of nested types/coercers (nepalez)
73
111
 
74
112
  ```ruby
@@ -83,7 +121,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
83
121
  test = Test.new(bar: { "baz" => 42 })
84
122
  test.foo.bar.baz # => "42"
85
123
  ```
86
-
87
124
  - Wrapped/nested combinations are supported as well (nepalez)
88
125
 
89
126
  ```ruby
@@ -96,8 +133,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
96
133
  test = Test.new(bar: 42)
97
134
  test.foo.first.bar # => "42"
98
135
  ```
99
-
100
- ## [2.7.0] Unreleazed
136
+ - ## [2.7.0] Unreleazed
101
137
 
102
138
  ### Fixed
103
139
 
@@ -109,10 +145,13 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
109
145
  The version [2.6.0] has been yanked on rubygems, so the master
110
146
  was rolled back to the previous state until the reason for
111
147
  the incompatibility become clear (bjeanes, nepalez)
148
+ - ## [2.6.0] [2018-09-09] (YANKED)
149
+
112
150
 
113
- ## [2.6.0] [2018-09-09] (YANKED)
151
+ [Compare v2.5.0...v3.0.0](https://github.com/dry-rb/dry-initializer/compare/v2.5.0...v3.0.0)
152
+
153
+ ## 2.5.0 2018-08-17
114
154
 
115
- ## [2.5.0] [2018-08-17]
116
155
 
117
156
  ### Fixed
118
157
 
@@ -122,9 +161,14 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
122
161
  the coercion should be applied to any value, including `nil`, because
123
162
  we cannot distinct "undefined" `nil` from the "assigned" `nil` value.
124
163
 
125
- ## [2.4.0] [2018-02-01]
164
+
165
+ [Compare v2.4.0...v2.5.0](https://github.com/dry-rb/dry-initializer/compare/v2.4.0...v2.5.0)
166
+
167
+ ## 2.4.0 2018-02-01
168
+
126
169
 
127
170
  ### Added
171
+
128
172
  - Dispatchers for adding syntax sugar to `param` and `options` (nepalez)
129
173
 
130
174
  ```ruby
@@ -138,9 +182,14 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
138
182
  end
139
183
  ```
140
184
 
141
- ## [2.3.0] [2017-09-19]
185
+
186
+ [Compare v2.3.0...v2.4.0](https://github.com/dry-rb/dry-initializer/compare/v2.3.0...v2.4.0)
187
+
188
+ ## 2.3.0 2017-09-19
189
+
142
190
 
143
191
  ### Added
192
+
144
193
  - Type coercer can take second argument for the initialized instance (nepalez)
145
194
  This allows to wrap assigned value to the object that refers back
146
195
  to the initializer instance. More verbose example:
@@ -148,7 +197,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
148
197
  ```ruby
149
198
  class Location < String
150
199
  attr_reader :parameter # refers back to its parameter
151
-
200
+
152
201
  def initialize(name, parameter)
153
202
  super(name)
154
203
  @parameter = parameter
@@ -167,11 +216,15 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
167
216
  offset.location.parameter == offset # true
168
217
  ```
169
218
 
170
- ## [2.2.0] [2017-09-13]
219
+
220
+ [Compare v2.2.0...v2.3.0](https://github.com/dry-rb/dry-initializer/compare/v2.2.0...v2.3.0)
221
+
222
+ ## 2.2.0 2017-09-13
223
+
171
224
 
172
225
  ### Added
173
- - Option `:desc` for option/param to add a description (nepalez)
174
226
 
227
+ - Option `:desc` for option/param to add a description (nepalez)
175
228
  - Methods `Definition#inch` and `Config#inch` to inspect definitions (nepalez)
176
229
 
177
230
  ```ruby
@@ -189,9 +242,14 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
189
242
  # @return [User]
190
243
  ```
191
244
 
192
- ## [2.1.0] [2017-09-11]
245
+
246
+ [Compare v2.1.0...v2.2.0](https://github.com/dry-rb/dry-initializer/compare/v2.1.0...v2.2.0)
247
+
248
+ ## 2.1.0 2017-09-11
249
+
193
250
 
194
251
  ### Added
252
+
195
253
  - Method `#options` to param/option definition (nepalez)
196
254
 
197
255
  ```ruby
@@ -213,28 +271,18 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
213
271
  This method can be helpful for replicating params/options
214
272
  in another class without inheritance.
215
273
 
216
- ## [2.0.0] [2017-08-28]
217
274
 
218
- The gem has been rewritten under the hood keeping its documented
219
- interface about the same (see "Deleted" section below for the only
220
- backward-incompatible change).
275
+ [Compare v2.0.0...v2.1.0](https://github.com/dry-rb/dry-initializer/compare/v2.0.0...v2.1.0)
221
276
 
222
- The main achievement of this version is fixing an edge case where
223
- change in params/options of superclass wasn't reflected in its
224
- previously declared subclasses.
277
+ ## 2.0.0 2017-08-28
225
278
 
226
- Thanks to @solnic for the idea of class-level container,
227
279
  and to @gzigzigzeo for persuading me to do this refactoring.
228
280
 
229
- ### Deleted
230
- - Undocumented variable `@__option__` which was the main reason for refactoring
231
- (gzigzigzeo, nepalez).
232
-
233
281
  ### Added
282
+
234
283
  - Class method `.dry_initializer` -- a container for `.params` and `.options`
235
284
  `.definitions` along with the `.null` setting (either `nil` or `UNDEFINED`)
236
285
  used for unassigned values (nepalez)
237
-
238
286
  - `.dry_initializer.attributes` method takes an instance of the same class
239
287
  and returns the hash of assigned options. This provide the same
240
288
  functionality as previously used instance variable `@__options__` (nepalez)
@@ -253,7 +301,6 @@ and to @gzigzigzeo for persuading me to do this refactoring.
253
301
 
254
302
  Both methods `.dry_initializer` and `#__dry_initializer_config__` refer
255
303
  to the same object.
256
-
257
304
  - `.dry_initializer.public_attributes`. This method works differently:
258
305
  it looks through (possibly reloaded) readers instead of variables
259
306
  (gzigzigzeo, nepalez)
@@ -265,6 +312,7 @@ and to @gzigzigzeo for persuading me to do this refactoring.
265
312
  You can use the same trick as above mutatis mutandis.
266
313
 
267
314
  ### Fixed
315
+
268
316
  - Definition order dependency bug (nepalez)
269
317
 
270
318
  I've found out that if you provided a subclass and then changed params
@@ -276,7 +324,6 @@ and to @gzigzigzeo for persuading me to do this refactoring.
276
324
  of the tree, and reloads their defintitions.
277
325
 
278
326
  Being done in load time, the rebuilt makes no effect on runtime performance.
279
-
280
327
  - Possible misbehavior when you define param and option with the same name (nepalez)
281
328
 
282
329
  Doing this will provide `option :name` only, not both:
@@ -285,7 +332,6 @@ and to @gzigzigzeo for persuading me to do this refactoring.
285
332
  param :name
286
333
  option :name
287
334
  ```
288
-
289
335
  - Attempt to redefine param/option of superclass with option/param in
290
336
  its subclass will cause an exception because it would break
291
337
  Liskov substitute principle with unexpected behaviour (nepalez)
@@ -302,7 +348,6 @@ and to @gzigzigzeo for persuading me to do this refactoring.
302
348
  option :name
303
349
  end
304
350
  ```
305
-
306
351
  - When you reloading previously defined param of superclass, the gem
307
352
  will check all its descendands for whether all required positional params
308
353
  goes before optional ones (nepalez)
@@ -327,6 +372,7 @@ and to @gzigzigzeo for persuading me to do this refactoring.
327
372
  ```
328
373
 
329
374
  ### Changed
375
+
330
376
  - Under the hood I've separated param/option settings declaration (a container
331
377
  with param/option settings) from code builders for initializer and readers
332
378
  (nepalez)
@@ -359,7 +405,6 @@ and to @gzigzigzeo for persuading me to do this refactoring.
359
405
 
360
406
  You can check null value via `.dry_initializer.null` which is different
361
407
  for `Dry::Initializer` and `Dry::Initializer[undefined: false]` modules.
362
-
363
408
  - Optimized the code for `__initializer__`-s (the method where all magics occurs)
364
409
  (nepalez)
365
410
 
@@ -410,33 +455,40 @@ and to @gzigzigzeo for persuading me to do this refactoring.
410
455
  virtus: 180272.6 i/s - 15.99x slower
411
456
  ```
412
457
 
413
- ## [1.4.1] [2017-04-05]
458
+ [Compare v1.4.1...v2.0.0](https://github.com/dry-rb/dry-initializer/compare/v1.4.1...v2.0.0)
459
+
460
+ ## 1.4.1 2017-04-05
461
+
414
462
 
415
463
  ### Fixed
464
+
416
465
  - Warning about redefined `#initialize` in case the method reloaded in a klass
417
466
  that extends the module (nepalez, sergey-chechaev)
418
467
 
419
468
  ### Changed
469
+
420
470
  - Rename `Dry::Initializer::DSL` -> `Dry::Initializer::ClassDSL` (nepalez)
421
471
  - Add `Dry::Initializer::InstanceDSL` (nepalez)
422
472
 
423
- ### Deprecated
424
- - `Dry::Initializer::Mixin`. In latest version this was an alias for
425
- `Dry::Initializer` that kept for backward compatibility for early versions of the gem.
473
+ [Compare v1.4.0...v1.4.1](https://github.com/dry-rb/dry-initializer/compare/v1.4.0...v1.4.1)
426
474
 
427
- This story will come to the end in `v2.1.0`.
475
+ ## 1.4.0 2017-03-08
428
476
 
429
- ## [1.4.0] [2017-03-08]
430
477
 
431
- ### Changed (backward-incompatible)
478
+ ### Changed
479
+
432
480
  - The `@__options__` hash now collects all assigned attributes,
433
481
  collected via `#option` (as before), and `#param` (nepalez)
434
482
 
435
- ## [1.3.0] [2017-03-05]
483
+ [Compare v1.3.0...v1.4.0](https://github.com/dry-rb/dry-initializer/compare/v1.3.0...v1.4.0)
484
+
485
+ ## 1.3.0 2017-03-05
486
+
436
487
 
437
488
  ### Added
489
+
438
490
  - No-undefined configuration of the initializer (nepalez, flash-gordon)
439
-
491
+
440
492
  You can either extend or include module `Dry::Initializer` with additional option
441
493
  `[undefined: false]`. This time `nil` will be assigned instead of
442
494
  `Dry::Initializer::UNDEFINED`. Readers becomes faster because there is no need
@@ -457,31 +509,55 @@ and to @gzigzigzeo for persuading me to do this refactoring.
457
509
  Bar.new.instance_variable_get(:@qux) # => nil
458
510
 
459
511
  ### Changed
512
+
460
513
  - Fixed method definitions for performance at the load time (nepalez, flash-gordon)
461
514
 
462
- ## [1.2.0] [2017-03-05]
515
+ [Compare v1.2.0...v1.3.0](https://github.com/dry-rb/dry-initializer/compare/v1.2.0...v1.3.0)
516
+
517
+ ## 1.2.0 2017-03-05
518
+
463
519
 
464
520
  ### Fixed
521
+
465
522
  - The `@__options__` variable collects renamed options after default values and coercions were applied (nepalez)
466
523
 
467
- ## [1.1.3] [2017-03-01]
524
+
525
+ [Compare v1.1.3...v1.2.0](https://github.com/dry-rb/dry-initializer/compare/v1.1.3...v1.2.0)
526
+
527
+ ## 1.1.3 2017-03-01
528
+
468
529
 
469
530
  ### Added
531
+
470
532
  - Support for lambdas as default values (nepalez, gzigzigzeo)
471
533
 
472
- ## [1.1.2] [2017-02-06]
534
+
535
+ [Compare v1.1.2...v1.1.3](https://github.com/dry-rb/dry-initializer/compare/v1.1.2...v1.1.3)
536
+
537
+ ## 1.1.2 2017-02-06
538
+
473
539
 
474
540
  ### Changed
541
+
475
542
  - Remove previously defined methods before redefining them (flash-gordon)
476
543
 
477
- ## [1.1.1] [2017-02-04]
544
+ [Compare v1.1.1...v1.1.2](https://github.com/dry-rb/dry-initializer/compare/v1.1.1...v1.1.2)
545
+
546
+ ## 1.1.1 2017-02-04
547
+
478
548
 
479
549
  ### Fixed
550
+
480
551
  - `@__options__` collects defined options only (nepalez)
481
552
 
482
- ## [1.1.0] [2017-01-28]
553
+
554
+ [Compare v1.1.0...v1.1.1](https://github.com/dry-rb/dry-initializer/compare/v1.1.0...v1.1.1)
555
+
556
+ ## 1.1.0 2017-01-28
557
+
483
558
 
484
559
  ### Added
560
+
485
561
  - enhancement via `Dry::Initializer::Attribute.dispatchers` registry (nepalez)
486
562
 
487
563
  ```ruby
@@ -500,18 +576,17 @@ and to @gzigzigzeo for persuading me to do this refactoring.
500
576
  ```
501
577
 
502
578
  ### Changed
503
- - optimize assignments for performance (nepalez)
504
579
 
505
- ## [1.0.0] [2017-01-22]
580
+ - optimize assignments for performance (nepalez)
506
581
 
507
- In this version the code has been rewritten for simplicity
582
+ [Compare v1.0.0...v1.1.0](https://github.com/dry-rb/dry-initializer/compare/v1.0.0...v1.1.0)
508
583
 
509
- ### Changed
510
- - [BREAKING] when `param` or `option` was not defined, the corresponding **variable** is set to `Dry::Initializer::UNDEFINED`, but the **reader** (when defined) will return `nil` (nepalez)
584
+ ## 1.0.0 2017-01-22
511
585
 
512
- - `Dry::Initializer` and `Dry::Initializer::Mixin` became aliases (nepalez)
586
+ In this version the code has been rewritten for simplicity
513
587
 
514
588
  ### Added
589
+
515
590
  - support for reloading `param` and `option` definitions (nepalez)
516
591
 
517
592
  class User
@@ -528,7 +603,6 @@ In this version the code has been rewritten for simplicity
528
603
 
529
604
  # order of the param not changed
530
605
  Admin.new.name # => "Merlin"
531
-
532
606
  - support for assignment of attributes via several options (nepalez)
533
607
 
534
608
  class User
@@ -541,244 +615,241 @@ In this version the code has been rewritten for simplicity
541
615
  User.new(phone: '1234567890').phone # => '1234567890'
542
616
  User.new(number: '1234567890').phone # => '1234567890'
543
617
 
544
- ## [0.11.0] [2017-01-02]
618
+ ### Changed
545
619
 
546
- ### Added
547
- - Support of reloading `#initializer` with `super` (nepalez)
620
+ - [BREAKING] when `param` or `option` was not defined, the corresponding **variable** is set to `Dry::Initializer::UNDEFINED`, but the **reader** (when defined) will return `nil` (nepalez)
621
+ - `Dry::Initializer` and `Dry::Initializer::Mixin` became aliases (nepalez)
548
622
 
549
- ### Internal
550
- - Refactor the way [#initializer] method is (re)defined (nepalez)
551
-
552
- When you extend class with `Dry::Initializer::Mixin`, the initializer is
553
- defined not "inside" the class per se, but inside the included module. The
554
- reference to that module is stored as class-level `__initializer_mixin__`.
623
+ [Compare v0.11.0...v1.0.0](https://github.com/dry-rb/dry-initializer/compare/v0.11.0...v1.0.0)
555
624
 
556
- Mixin method [#initialize] calls another private method [#__initialize__].
557
- It is this method to be reloaded every time you envoke a helper
558
- `option` or `product`.
625
+ ## 0.11.0 2017-01-02
559
626
 
560
- When new subclass is inherited, new mixin is added to chain of accessors,
561
- but this time it does reload `__initialize__` only, not the `initialize`.
562
- That is how you can safely reload initializer using `super`, but at the same
563
- time use the whole power of dry-initializer DSL both in parent class and its
564
- subclasses.
565
627
 
566
- The whole stack of accessors looks like the following:
567
- - Parent class mixin: `initialize` --> `__initialize__`
568
- ^
569
- - Parent class: `initialize`
570
- - Subclass mixin: ^ `__initialize__`
571
- - Subclass: `initialize`
628
+ ### Added
629
+
630
+ - Support of reloading `#initializer` with `super` (nepalez)
631
+
572
632
 
573
- See specification `spec/custom_initializer_spec.rb` to see how this works.
633
+ [Compare v0.10.2...v0.11.0](https://github.com/dry-rb/dry-initializer/compare/v0.10.2...v0.11.0)
634
+
635
+ ## 0.10.2 2016-12-31
574
636
 
575
- ## [0.10.2] [2016-12-31]
576
637
 
577
638
  ### Added
639
+
578
640
  - Support of Ruby 2.4 (flas-gordon)
579
641
 
580
- ### Internal
581
- - Code clearance for ROM integration (flash-gordon)
582
642
 
583
- ## [0.10.1] [2016-12-27]
643
+ [Compare v0.10.1...v0.10.2](https://github.com/dry-rb/dry-initializer/compare/v0.10.1...v0.10.2)
644
+
645
+ ## 0.10.1 2016-12-27
646
+
584
647
 
585
648
  ### Fixed
649
+
586
650
  - Wrong arity when there were no options and the last param had a default (nolith)
587
651
 
588
- ## [0.10.0] [2016-11-20]
589
652
 
590
- ### Deleted (BREAKING CHANGE!)
591
- - Deprecated method DSL#using (nepalez)
653
+ [Compare v0.10.0...v0.10.1](https://github.com/dry-rb/dry-initializer/compare/v0.10.0...v0.10.1)
654
+
655
+ ## 0.10.0 2016-11-20
656
+
592
657
 
593
- ## [0.9.3] [2016-11-20]
594
658
 
595
- ### Deprecated
596
- - After discussion in [PR #17]: https://github.com/dry-rb/dry-initializer/pull/17)
597
- (many thanks to @sahal2080 and @hrom512 for starting that issue and PR),
598
- the method `using` is deprecated and will be removed from v0.10.0 (nepalez)
659
+ [Compare v0.9.3...v0.10.0](https://github.com/dry-rb/dry-initializer/compare/v0.9.3...v0.10.0)
660
+
661
+ ## 0.9.3 2016-11-20
662
+
599
663
 
600
664
  ### Fixed
665
+
601
666
  - Support of weird option names (nepalez)
602
667
 
603
668
  ```ruby
604
669
  option :"First name", as: :first_name
605
670
  ```
606
671
 
607
- ## [0.9.2] [2016-11-10]
672
+
673
+ [Compare v0.9.2...v0.9.3](https://github.com/dry-rb/dry-initializer/compare/v0.9.2...v0.9.3)
674
+
675
+ ## 0.9.2 2016-11-10
676
+
608
677
 
609
678
  ### Fixed
679
+
610
680
  - Validation of attributes (params and options) (nepalez)
611
681
 
612
- ## [0.9.1] [2016-11-06]
682
+
683
+ [Compare v0.9.1...v0.9.2](https://github.com/dry-rb/dry-initializer/compare/v0.9.1...v0.9.2)
684
+
685
+ ## 0.9.1 2016-11-06
686
+
613
687
 
614
688
  ### Added
689
+
615
690
  - Support for renaming an option during initialization (nepalez)
616
691
 
617
692
  option :name, as: :username # to take :name option and create :username attribute
618
693
 
619
- ## [0.9.0] [2016-11-06]
694
+
695
+ [Compare v0.9.0...v0.9.1](https://github.com/dry-rb/dry-initializer/compare/v0.9.0...v0.9.1)
696
+
697
+ ## 0.9.0 2016-11-06
698
+
620
699
 
621
700
  ### Added
701
+
622
702
  - The method `#initialize` is defined when a class extended the module (nepalez)
623
703
 
624
704
  In previous versions the method was defined only by `param` and `option` calls.
625
705
 
626
- ### Breaking Changes
627
- - The initializer accepts any option (but skips unknown) from the very beginning (nepalez)
628
706
 
629
- ### Deleted
630
- - Deprecated methods `tolerant_to_unknown_options` and `intolerant_to_unknown_options` (nepalez)
707
+ [Compare v0.8.1...v0.9.0](https://github.com/dry-rb/dry-initializer/compare/v0.8.1...v0.9.0)
631
708
 
632
- ### Internal
633
- - Refactor scope (`using`) to support methods renaming and aliasing (nepalez)
709
+ ## 0.8.1 2016-11-05
634
710
 
635
- ## [0.8.1] [2016-11-05]
636
711
 
637
712
  ### Added
713
+
638
714
  - Support for `dry-struct`ish syntax for constraints (type as a second parameter) (nepalez)
639
715
 
640
716
  option :name, Dry::Types['strict.string']
641
717
 
642
- ## [0.8.0] [2016-11-05]
643
718
 
644
- In this version we switched from key arguments to ** to support special keys:
719
+ [Compare v0.8.0...v0.8.1](https://github.com/dry-rb/dry-initializer/compare/v0.8.0...v0.8.1)
645
720
 
646
- option :end
647
- option :begin
721
+ ## 0.8.0 2016-11-05
648
722
 
649
- In previous versions this was translated to
650
-
651
- def initialize(end:, begin:)
652
- @end = end # BOOM! SyntaxError!
653
- @begin = begin # Potential BOOM (unreached)
654
- end
655
-
656
- Now the assignment is imlemented like this:
657
-
658
- def initialize(**__options__)
659
- @end = __options__.fetch(:end)
660
- @begin = __options__.fetch(:begin)
661
- end
662
-
663
- As a side effect of the change the initializer becomes tolerant
664
- to any unknown option if, and only if some `option` was set explicitly.
665
-
666
- Methods `tolerant_to_unknown_options` and `intolerant_to_unknown_options`
667
723
  are deprecated and will be removed in the next version of the gem.
668
724
 
669
725
  ### Added
726
+
670
727
  - support for special options like `option :end`, `option :begin` etc. (nepalez)
671
728
 
672
729
  ### Changed
673
- - switched from key arguments to serialized hash argument in the initializer (nepalez)
674
730
 
675
- ### Breaking Changes
676
- - the initializer becomes tolerant to unknown options when any `option` was set,
677
- ignoring `intolerant_to_unknown_options` helper.
731
+ - switched from key arguments to serialized hash argument in the initializer (nepalez)
678
732
 
679
- - the initializer becomes intolerant to options when no `option` was set,
680
- ignoring `tolerant_to_unknown_options` helper.
733
+ [Compare v0.7.0...v0.8.0](https://github.com/dry-rb/dry-initializer/compare/v0.7.0...v0.8.0)
681
734
 
682
- ### Deprecated
683
- - `tolerant_to_unknown_options`
684
- - `intolerant_to_unknown_options`
735
+ ## 0.7.0 2016-10-11
685
736
 
686
- ## [0.7.0] [2016-10-11]
687
737
 
688
738
  ### Added
739
+
689
740
  - Shared settings with `#using` method (nepalez)
690
741
 
691
- ## [0.6.0] [2016-10-09]
742
+
743
+ [Compare v0.6.0...v0.7.0](https://github.com/dry-rb/dry-initializer/compare/v0.6.0...v0.7.0)
744
+
745
+ ## 0.6.0 2016-10-09
746
+
692
747
 
693
748
  ### Added
749
+
694
750
  - Support for private and protected readers in the `reader:` option (jmgarnier)
695
751
 
696
- ## [0.5.0] [2016-08-21]
752
+
753
+ [Compare v0.5.0...v0.6.0](https://github.com/dry-rb/dry-initializer/compare/v0.5.0...v0.6.0)
754
+
755
+ ## 0.5.0 2016-08-21
756
+
697
757
 
698
758
  ### Added
759
+
699
760
  - Allow `optional` attribute to be left undefined (nepalez)
700
761
 
701
- ## [0.4.0] [2016-05-28]
702
762
 
703
- ### Deleted (backward-incompatible changes)
704
- - Support of modules and case equality as type constraints (nepalez)
763
+ [Compare v0.4.0...v0.5.0](https://github.com/dry-rb/dry-initializer/compare/v0.4.0...v0.5.0)
764
+
765
+ ## 0.4.0 2016-05-28
766
+
767
+
768
+
769
+ [Compare v0.3.3...v0.4.0](https://github.com/dry-rb/dry-initializer/compare/v0.3.3...v0.4.0)
770
+
771
+ ## 0.3.3 2016-05-28
772
+
773
+
705
774
 
706
- ## [0.3.3] [2016-05-28]
775
+ [Compare v0.3.2...v0.3.3](https://github.com/dry-rb/dry-initializer/compare/v0.3.2...v0.3.3)
707
776
 
708
- - Add deprecation warnings about modules and case equality as type constraints (nepalez)
777
+ ## 0.3.2 2016-05-25
709
778
 
710
- ## [0.3.2] [2016-05-25]
711
779
 
712
780
  ### Fixed
781
+
713
782
  - Add explicit requirement for ruby 'set' (rickenharp)
714
783
 
715
- ## [0.3.1] [2016-05-22]
716
784
 
717
- ### Added
718
- - Support for tolerance to unknown options (nepalez)
785
+ [Compare v0.3.1...v0.3.2](https://github.com/dry-rb/dry-initializer/compare/v0.3.1...v0.3.2)
719
786
 
720
- ## [0.3.0] [2016-05-19]
787
+ ## 0.3.1 2016-05-22
721
788
 
722
- Breaks interface for adding new plugins. Register new plugin via:
723
789
 
724
- ```
725
- def self.extended(klass)
726
- klass.register_initializer_plugin NewPlugin
727
- end
728
- ```
790
+ ### Added
729
791
 
730
- instead of:
792
+ - Support for tolerance to unknown options (nepalez)
731
793
 
732
- ```
733
- def self.extended(klass)
734
- klass.initializer_builder.register NewPlugin
735
- end
736
- ```
737
794
 
738
- While the private method ##initializer_builder is still accessible
739
- its method #register doesn't mutate the builder instance.
795
+ [Compare v0.3.0...v0.3.1](https://github.com/dry-rb/dry-initializer/compare/v0.3.0...v0.3.1)
740
796
 
741
- ### Changed (backward-incompatible changes)
742
- - Made Mixin##initializer_builder method private (nepalez)
743
- - Add Mixin#register_initializer_plugin(plugin) method (nepalez)
797
+ ## 0.3.0 2016-05-19
798
+
799
+ its method #register doesn't mutate the builder instance.
744
800
 
745
801
  ### Fixed
802
+
746
803
  - Prevent plugin's registry from polluting superclass (nepalez)
747
804
 
748
805
  ### Changed
806
+
807
+ - Made Mixin##initializer_builder method private (nepalez)
808
+ - Add Mixin#register_initializer_plugin(plugin) method (nepalez)
749
809
  - Make all instances (Builder and Signature) immutable (nepalez)
750
810
  - Decouple mixin from a builder to prevent pollution (nepalez)
751
811
  - Ensure default value block can use private variables (jeremyf)
752
812
 
753
- ## [0.2.1] [2016-05-19]
813
+ [Compare v0.2.1...v0.3.0](https://github.com/dry-rb/dry-initializer/compare/v0.2.1...v0.3.0)
814
+
815
+ ## 0.2.1 2016-05-19
816
+
754
817
 
755
818
  ### Fixed
819
+
756
820
  - Fix polluting superclass with declarations from subclass (nepalez)
757
821
 
758
822
  ### Changed
823
+
759
824
  - Make all instances (Builder and Signature) immutable (nepalez)
760
825
  - Decouple mixin from a builder to prevent pollution (nepalez)
761
826
  - Ensure default value block can use private variables (jeremyf)
762
827
 
763
- ## [0.2.0] [2016-05-16]
828
+ [Compare v0.2.0...v0.2.1](https://github.com/dry-rb/dry-initializer/compare/v0.2.0...v0.2.1)
764
829
 
765
- The gem internals has been rewritten heavily to make the gem pluggable and fix
766
- bugs in "container style". Type constraints were extracted to a plugin
767
- that should be added explicitly.
768
-
769
- Small extensions were added to type constraints to support constraint by any
770
- object, and apply value coercion via `dry-types`.
830
+ ## 0.2.0 2016-05-16
771
831
 
772
832
  Default assignments became slower (while plain type constraint are not)!
773
833
 
774
- ### Changed (backward-incompatible changes)
834
+ ### Added
835
+
836
+ - Support type constraint via every object's case equality (nepalez)
837
+
838
+ ```ruby
839
+ option :name, type: /foo/
840
+ option :name, type: (1...14)
841
+ ```
842
+ - Support defaults and type constraints for the "container" syntax (nepalez)
843
+ - Support adding extensions via plugin system (nepalez)
844
+
845
+ ### Changed
846
+
775
847
  - Make dry-types constraint to coerce variables (nepalez)
776
848
 
777
849
  ```ruby
778
850
  # This will coerce `name: :foo` to `"foo"`
779
851
  option :name, type: Dry::Types::Coercible::String
780
852
  ```
781
-
782
853
  - Stop supporing proc type constraint (nepalez)
783
854
 
784
855
  ```ruby
@@ -798,86 +869,32 @@ Default assignments became slower (while plain type constraint are not)!
798
869
  end
799
870
  ```
800
871
 
801
- ### Added
802
- - Support type constraint via every object's case equality (nepalez)
872
+ [Compare v0.1.1...v0.2.0](https://github.com/dry-rb/dry-initializer/compare/v0.1.1...v0.2.0)
803
873
 
804
- ```ruby
805
- option :name, type: /foo/
806
- option :name, type: (1...14)
807
- ```
874
+ ## 0.1.1 2016-04-28
808
875
 
809
- - Support defaults and type constraints for the "container" syntax (nepalez)
810
- - Support adding extensions via plugin system (nepalez)
811
876
 
812
- ### Internal
813
- - Private method `##__after_initialize__` is added by the `Mixin` along with `#initialize` (nepalez)
877
+ ### Added
878
+
879
+ - `include Dry::Initializer.define -> do ... end` syntax (flash-gordon)
814
880
 
815
- The previous implementation required defaults and types to be stored in the class method `.initializer_builder`.
816
- That made "container" syntax to support neither defaults nor types.
817
881
 
818
- Now the `#initializer` is still defined via `instance_eval(code)` for efficiency. Some operations
819
- (like default assignments, coercions, dry-type constraints etc.) cannot be implemented in this way.
820
- They are made inside `##__after_initialize__` callback, that is biult via `default_method(&block)`
821
- using instance evals.
882
+ [Compare v0.1.0...v0.1.1](https://github.com/dry-rb/dry-initializer/compare/v0.1.0...v0.1.1)
822
883
 
823
- ## [0.1.1] [2016-04-28]
884
+ ## 0.1.0 2016-04-26
885
+
886
+ Backward compatibility is broken.
824
887
 
825
888
  ### Added
826
- - `include Dry::Initializer.define -> do ... end` syntax (flash-gordon)
827
889
 
828
- ## [0.1.0] [2016-04-26]
890
+ - Use `include Dry::Initializer.define(&block)` as an alternative to extending the class (nepalez)
829
891
 
830
- Class DSL splitted to mixin and container versions (thanks to @AMHOL for the idea).
831
- Backward compatibility is broken.
892
+ ### Changed
832
893
 
833
- ### Changed (backward-incompatible changes)
834
894
  - Use `extend Dry::Initializer::Mixin` instead of `extend Dry::Initializer` (nepalez)
835
895
 
836
- ### Added
837
- - Use `include Dry::Initializer.define(&block)` as an alternative to extending the class (nepalez)
896
+ [Compare v0.0.1...v0.1.0](https://github.com/dry-rb/dry-initializer/compare/v0.0.1...v0.1.0)
838
897
 
839
- ## [0.0.1] [2016-04-09]
898
+ ## 0.0.1 2016-04-09
840
899
 
841
900
  First public release
842
-
843
- [0.1.0]: https://github.com/dry-rb/dry-initializer/compare/v0.0.1...v0.1.0
844
- [0.1.1]: https://github.com/dry-rb/dry-initializer/compare/v0.1.0...v0.1.1
845
- [0.2.0]: https://github.com/dry-rb/dry-initializer/compare/v0.1.1...v0.2.0
846
- [0.2.1]: https://github.com/dry-rb/dry-initializer/compare/v0.2.0...v0.2.1
847
- [0.2.1]: https://github.com/dry-rb/dry-initializer/compare/v0.2.0...v0.2.1
848
- [0.3.0]: https://github.com/dry-rb/dry-initializer/compare/v0.2.1...v0.3.0
849
- [0.3.1]: https://github.com/dry-rb/dry-initializer/compare/v0.3.0...v0.3.1
850
- [0.3.2]: https://github.com/dry-rb/dry-initializer/compare/v0.3.1...v0.3.2
851
- [0.3.3]: https://github.com/dry-rb/dry-initializer/compare/v0.3.2...v0.3.3
852
- [0.4.0]: https://github.com/dry-rb/dry-initializer/compare/v0.3.3...v0.4.0
853
- [0.5.0]: https://github.com/dry-rb/dry-initializer/compare/v0.4.0...v0.5.0
854
- [0.6.0]: https://github.com/dry-rb/dry-initializer/compare/v0.5.0...v0.6.0
855
- [0.7.0]: https://github.com/dry-rb/dry-initializer/compare/v0.6.0...v0.7.0
856
- [0.8.0]: https://github.com/dry-rb/dry-initializer/compare/v0.7.0...v0.8.0
857
- [0.8.1]: https://github.com/dry-rb/dry-initializer/compare/v0.8.0...v0.8.1
858
- [0.9.0]: https://github.com/dry-rb/dry-initializer/compare/v0.8.1...v0.9.0
859
- [0.9.1]: https://github.com/dry-rb/dry-initializer/compare/v0.9.0...v0.9.1
860
- [0.9.2]: https://github.com/dry-rb/dry-initializer/compare/v0.9.1...v0.9.2
861
- [0.9.3]: https://github.com/dry-rb/dry-initializer/compare/v0.9.2...v0.9.3
862
- [0.10.0]: https://github.com/dry-rb/dry-initializer/compare/v0.9.3...v0.10.0
863
- [0.10.1]: https://github.com/dry-rb/dry-initializer/compare/v0.10.0...v0.10.1
864
- [0.10.2]: https://github.com/dry-rb/dry-initializer/compare/v0.10.1...v0.10.2
865
- [0.11.0]: https://github.com/dry-rb/dry-initializer/compare/v0.10.2...v0.11.0
866
- [1.0.0]: https://github.com/dry-rb/dry-initializer/compare/v0.11.0...v1.0.0
867
- [1.1.0]: https://github.com/dry-rb/dry-initializer/compare/v1.0.0...v1.1.0
868
- [1.1.1]: https://github.com/dry-rb/dry-initializer/compare/v1.1.0...v1.1.1
869
- [1.1.2]: https://github.com/dry-rb/dry-initializer/compare/v1.1.1...v1.1.2
870
- [1.1.3]: https://github.com/dry-rb/dry-initializer/compare/v1.1.2...v1.1.3
871
- [1.2.0]: https://github.com/dry-rb/dry-initializer/compare/v1.1.3...v1.2.0
872
- [1.3.0]: https://github.com/dry-rb/dry-initializer/compare/v1.2.0...v1.3.0
873
- [1.4.0]: https://github.com/dry-rb/dry-initializer/compare/v1.3.0...v1.4.0
874
- [1.4.1]: https://github.com/dry-rb/dry-initializer/compare/v1.4.0...v1.4.1
875
- [2.0.0]: https://github.com/dry-rb/dry-initializer/compare/v1.4.1...v2.0.0
876
- [2.1.0]: https://github.com/dry-rb/dry-initializer/compare/v2.0.0...v2.1.0
877
- [2.2.0]: https://github.com/dry-rb/dry-initializer/compare/v2.1.0...v2.2.0
878
- [2.3.0]: https://github.com/dry-rb/dry-initializer/compare/v2.2.0...v2.3.0
879
- [2.4.0]: https://github.com/dry-rb/dry-initializer/compare/v2.3.0...v2.4.0
880
- [2.6.0]: https://github.com/dry-rb/dry-initializer/compare/v2.4.0...v2.5.0
881
- [2.6.0]: https://github.com/dry-rb/dry-initializer/compare/v2.5.0...v2.6.0
882
- [3.0.0]: https://github.com/dry-rb/dry-initializer/compare/v2.5.0...v3.0.0
883
- [3.0.1]: https://github.com/dry-rb/dry-initializer/compare/v3.0.0...v3.0.1