dry-initializer 2.3.0 → 3.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +5 -5
  2. data/.codeclimate.yml +10 -21
  3. data/.github/ISSUE_TEMPLATE/----please-don-t-ask-for-support-via-issues.md +10 -0
  4. data/.github/ISSUE_TEMPLATE/---bug-report.md +34 -0
  5. data/.github/ISSUE_TEMPLATE/---feature-request.md +18 -0
  6. data/.github/workflows/custom_ci.yml +74 -0
  7. data/.github/workflows/docsite.yml +34 -0
  8. data/.github/workflows/sync_configs.yml +34 -0
  9. data/.gitignore +2 -0
  10. data/.rspec +2 -2
  11. data/.rubocop.yml +65 -27
  12. data/CHANGELOG.md +160 -13
  13. data/CODE_OF_CONDUCT.md +13 -0
  14. data/CONTRIBUTING.md +29 -0
  15. data/Gemfile +26 -17
  16. data/LICENSE +20 -0
  17. data/README.md +13 -15
  18. data/docsite/source/attributes.html.md +106 -0
  19. data/docsite/source/container-version.html.md +39 -0
  20. data/docsite/source/index.html.md +43 -0
  21. data/docsite/source/inheritance.html.md +43 -0
  22. data/docsite/source/optionals-and-defaults.html.md +130 -0
  23. data/docsite/source/options-tolerance.html.md +27 -0
  24. data/docsite/source/params-and-options.html.md +74 -0
  25. data/docsite/source/rails-support.html.md +101 -0
  26. data/docsite/source/readers.html.md +43 -0
  27. data/docsite/source/skip-undefined.html.md +59 -0
  28. data/docsite/source/type-constraints.html.md +160 -0
  29. data/dry-initializer.gemspec +3 -3
  30. data/lib/dry/initializer.rb +11 -9
  31. data/lib/dry/initializer/builders/attribute.rb +4 -4
  32. data/lib/dry/initializer/builders/reader.rb +1 -1
  33. data/lib/dry/initializer/config.rb +22 -11
  34. data/lib/dry/initializer/definition.rb +11 -62
  35. data/lib/dry/initializer/dispatchers.rb +112 -0
  36. data/lib/dry/initializer/dispatchers/build_nested_type.rb +59 -0
  37. data/lib/dry/initializer/dispatchers/check_type.rb +43 -0
  38. data/lib/dry/initializer/dispatchers/prepare_default.rb +40 -0
  39. data/lib/dry/initializer/dispatchers/prepare_ivar.rb +12 -0
  40. data/lib/dry/initializer/dispatchers/prepare_optional.rb +13 -0
  41. data/lib/dry/initializer/dispatchers/prepare_reader.rb +30 -0
  42. data/lib/dry/initializer/dispatchers/prepare_source.rb +28 -0
  43. data/lib/dry/initializer/dispatchers/prepare_target.rb +44 -0
  44. data/lib/dry/initializer/dispatchers/unwrap_type.rb +22 -0
  45. data/lib/dry/initializer/dispatchers/wrap_type.rb +27 -0
  46. data/lib/dry/initializer/mixin/root.rb +1 -0
  47. data/lib/dry/initializer/struct.rb +39 -0
  48. data/lib/dry/initializer/undefined.rb +2 -0
  49. data/spec/coercion_of_nil_spec.rb +25 -0
  50. data/spec/custom_dispatchers_spec.rb +35 -0
  51. data/spec/definition_spec.rb +6 -2
  52. data/spec/list_type_spec.rb +32 -0
  53. data/spec/nested_type_spec.rb +48 -0
  54. data/spec/spec_helper.rb +9 -1
  55. data/spec/type_argument_spec.rb +2 -2
  56. data/spec/type_constraint_spec.rb +6 -6
  57. data/spec/value_coercion_via_dry_types_spec.rb +1 -1
  58. metadata +48 -9
  59. data/.travis.yml +0 -24
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 2272ada187c2b221d758533b4cc63f37ea067aca
4
- data.tar.gz: 80af7ae1bc35c976fc275a33b02bc0647ba1dd32
2
+ SHA256:
3
+ metadata.gz: f5d079daa17830b65177c99533e1b7f280bb4aee14dbcba097ba8c40de273abd
4
+ data.tar.gz: a59b00abe9c741b764152a6213ff40c29adbdf27094ecebbaaf766b2e056aa99
5
5
  SHA512:
6
- metadata.gz: 8507dde97e618b0b1ad710def44309be4bc48db87268c8757e3fdc8ceb4e8515a75e7b216c8076ee37e61a03bdeeaf818589ba934904b74bb5a8713a73d1ede8
7
- data.tar.gz: 78cc7f411b550ace24555d6c489d5cbf18e3ead3c9fc46140c4f6563b68786152cead5e845db76c13c44855a73d9e4dd595e0f39f617a2fcb70f31ed6c43cb6f
6
+ metadata.gz: 4fee1158d5ddd7bfca050f61788ee7012bf0a0f424239095ea649c6dd34ba47b157627efe7261f9e5fdaef405654b589addd26990a912b72cd0f76e339003754
7
+ data.tar.gz: 64a5e73606be0a238d0dba9173d32f90d8366d0aae64edf378dd851705a07d4ede0906ed241cc85ff9cb9b5c5f3fe9734bfb77d53fb6fc71bf29565b8607c388
@@ -1,23 +1,12 @@
1
- ---
2
- engines:
1
+ # this file is managed by dry-rb/devtools project
2
+
3
+ version: "2"
4
+
5
+ exclude_patterns:
6
+ - "benchmarks/"
7
+ - "examples/"
8
+ - "spec/"
9
+
10
+ plugins:
3
11
  rubocop:
4
12
  enabled: true
5
- checks:
6
- Rubocop/Style/FrozenStringLiteralComment:
7
- enabled: false
8
- Rubocop/Style/PercentLiteralDelimiters:
9
- enabled: false
10
- Rubocop/Lint/UnderscorePrefixedVariableName:
11
- enabled: false
12
- duplication:
13
- enabled: true
14
- config:
15
- languages:
16
- - ruby
17
- exclude_paths:
18
- - "benchmarks/**/*"
19
- - "spec/**/*"
20
- - "lib/tasks/**/*"
21
- ratings:
22
- paths:
23
- - "lib/**/*"
@@ -0,0 +1,10 @@
1
+ ---
2
+ name: "⚠️ Please don't ask for support via issues"
3
+ about: See CONTRIBUTING.md for more information
4
+ title: ''
5
+ labels: ''
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: "\U0001F41B Bug report"
3
+ about: See CONTRIBUTING.md for more information
4
+ title: ''
5
+ labels: bug
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Before you submit this: WE ONLY ACCEPT BUG REPORTS AND FEATURE REQUESTS**
11
+
12
+ For more information see [our contribution guidelines](https://github.com/rom-rb/rom/blob/master/CONTRIBUTING.md)
13
+
14
+ **Before you report**
15
+
16
+ :warning: If you have a problem related to a schema, please **report it under [dry-schema issues](https://github.com/dry-rb/dry-schema/issues/new?assignees=&labels=bug&template=---bug-report.md&title=)** instead.
17
+
18
+ **Describe the bug**
19
+
20
+ A clear and concise description of what the bug is.
21
+
22
+ **To Reproduce**
23
+
24
+ Provide detailed steps to reproduce, an executable script would be best.
25
+
26
+ **Expected behavior**
27
+
28
+ A clear and concise description of what you expected to happen.
29
+
30
+ **Your environment**
31
+
32
+ - Affects my production application: **YES/NO**
33
+ - Ruby version: ...
34
+ - OS: ...
@@ -0,0 +1,18 @@
1
+ ---
2
+ name: "\U0001F6E0 Feature request"
3
+ about: See CONTRIBUTING.md for more information
4
+ title: ''
5
+ labels: feature
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ Summary of what the feature is supposed to do.
11
+
12
+ ## Examples
13
+
14
+ Code examples showing how the feature could be used.
15
+
16
+ ## Resources
17
+
18
+ Additional information, like a link to the discussion forum thread where the feature was discussed etc.
@@ -0,0 +1,74 @@
1
+ name: ci
2
+
3
+ on:
4
+ push:
5
+ paths:
6
+ - .github/workflows/custom_ci.yml
7
+ - lib/**
8
+ - spec/**
9
+ - Gemfile
10
+ - "*.gemspec"
11
+
12
+ jobs:
13
+ tests-mri:
14
+ runs-on: ubuntu-latest
15
+ strategy:
16
+ fail-fast: false
17
+ matrix:
18
+ ruby: ["2.6.x", "2.5.x", "2.4.x", "2.3.x"]
19
+ include:
20
+ - ruby: "2.6.x"
21
+ coverage: "true"
22
+ steps:
23
+ - uses: actions/checkout@v1
24
+ - name: Set up Ruby
25
+ uses: actions/setup-ruby@v1
26
+ with:
27
+ ruby-version: ${{matrix.ruby}}
28
+ - name: Download test reporter
29
+ if: "matrix.coverage == 'true'"
30
+ run: |
31
+ mkdir -p tmp/
32
+ curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./tmp/cc-test-reporter
33
+ chmod +x ./tmp/cc-test-reporter
34
+ ./tmp/cc-test-reporter before-build
35
+ - name: Run all tests
36
+ env:
37
+ CI: "true"
38
+ COVERAGE: ${{matrix.coverage}}
39
+ run: |
40
+ gem install bundler
41
+ bundle config set without 'tools docs benchmarks'
42
+ bundle install --jobs 4 --retry 3
43
+ bundle exec rake
44
+ - name: Send coverage results
45
+ if: "matrix.coverage == 'true'"
46
+ env:
47
+ CC_TEST_REPORTER_ID: ${{secrets.CC_TEST_REPORTER_ID}}
48
+ GIT_COMMIT_SHA: ${{github.sha}}
49
+ GIT_BRANCH: ${{github.ref}}
50
+ GIT_COMMITTED_AT: ${{github.event.head_commit.timestamp}}
51
+ run: |
52
+ GIT_BRANCH=`ruby -e "puts ENV['GITHUB_REF'].split('/', 3).last"` \
53
+ GIT_COMMITTED_AT=`ruby -r time -e "puts Time.iso8601(ENV['GIT_COMMITTED_AT']).to_i"` \
54
+ ./tmp/cc-test-reporter after-build
55
+
56
+ tests-others:
57
+ runs-on: ubuntu-latest
58
+ strategy:
59
+ fail-fast: false
60
+ matrix:
61
+ image: ["jruby:9.2.8", "ruby:rc"]
62
+ container:
63
+ image: ${{matrix.image}}
64
+ steps:
65
+ - uses: actions/checkout@v1
66
+ - name: Install git
67
+ run: |
68
+ apt-get update
69
+ apt-get install -y --no-install-recommends git
70
+ - name: Run all tests
71
+ run: |
72
+ gem install bundler
73
+ bundle install --jobs 4 --retry 3 --without tools docs benchmarks
74
+ bundle exec rspec
@@ -0,0 +1,34 @@
1
+ # this file is managed by dry-rb/devtools project
2
+
3
+ name: docsite
4
+
5
+ on:
6
+ push:
7
+ paths:
8
+ - docsite/**
9
+ - .github/workflows/docsite.yml
10
+ branches:
11
+ - master
12
+ - release-**
13
+ tags:
14
+
15
+ jobs:
16
+ update-docs:
17
+ runs-on: ubuntu-latest
18
+ steps:
19
+ - uses: actions/checkout@v1
20
+ - name: Set up Ruby
21
+ uses: actions/setup-ruby@v1
22
+ with:
23
+ ruby-version: "2.6.x"
24
+ - name: Install dependencies
25
+ run: |
26
+ gem install bundler
27
+ bundle install --jobs 4 --retry 3 --without benchmarks sql
28
+ - name: Symlink ossy
29
+ run: mkdir -p bin && ln -sf "$(bundle show ossy)/bin/ossy" bin/ossy
30
+ - name: Trigger dry-rb.org deploy
31
+ env:
32
+ GITHUB_LOGIN: dry-bot
33
+ GITHUB_TOKEN: ${{ secrets.GH_PAT }}
34
+ run: bin/ossy github workflow dry-rb/dry-rb.org ci
@@ -0,0 +1,34 @@
1
+ # this file is managed by dry-rb/devtools project
2
+
3
+ name: sync_configs
4
+
5
+ on:
6
+ repository_dispatch:
7
+
8
+ jobs:
9
+ sync-configs:
10
+ runs-on: ubuntu-latest
11
+ if: github.event.action == 'sync_configs'
12
+ steps:
13
+ - uses: actions/checkout@v1
14
+ - name: Update configuration files from devtools
15
+ env:
16
+ GITHUB_LOGIN: dry-bot
17
+ GITHUB_TOKEN: ${{ secrets.GH_PAT }}
18
+ run: |
19
+ git clone https://github.com/dry-rb/devtools.git tmp/devtools
20
+
21
+ if [ -f ".github/workflows/custom_ci.yml" ]; then
22
+ rsync -av --exclude '.github/workflows/ci.yml' tmp/devtools/shared/ . ;
23
+ else
24
+ rsync -av tmp/devtools/shared/ . ;
25
+ fi
26
+
27
+ git config --local user.email "dry-bot@dry-rb.org"
28
+ git config --local user.name "dry-bot"
29
+ git add -A
30
+ git commit -m "[devtools] config sync" || echo "nothing changed"
31
+ - name: Push changes
32
+ uses: ad-m/github-push-action@master
33
+ with:
34
+ github_token: ${{ secrets.GH_PAT }}
data/.gitignore CHANGED
@@ -8,3 +8,5 @@
8
8
  /spec/reports/
9
9
  /tmp/
10
10
  /*.gem
11
+
12
+ .vscode
data/.rspec CHANGED
@@ -1,4 +1,4 @@
1
- --format documentation
2
1
  --color
3
2
  --require spec_helper
4
- --warnings
3
+ --order random
4
+
@@ -1,51 +1,89 @@
1
- ---
1
+ # this file is managed by dry-rb/devtools project
2
+
2
3
  AllCops:
3
- DisplayCopNames: true
4
- DisplayStyleGuide: true
5
- StyleGuideCopsOnly: true
6
- TargetRubyVersion: 2.3
7
- Exclude:
8
- - lib/tasks/*.rake
4
+ TargetRubyVersion: 2.4
5
+
6
+ Style/EachWithObject:
7
+ Enabled: false
9
8
 
10
- Bundler/DuplicatedGem:
9
+ Style/StringLiterals:
10
+ Enabled: true
11
+ EnforcedStyle: single_quotes
12
+
13
+ Style/Alias:
11
14
  Enabled: false
12
15
 
13
- Style/CaseEquality:
16
+ Style/LambdaCall:
14
17
  Enabled: false
15
18
 
16
- Style/ClassVars:
19
+ Style/StabbyLambdaParentheses:
17
20
  Enabled: false
18
21
 
19
- Style/ClassAndModuleChildren:
22
+ Style/FormatString:
20
23
  Enabled: false
21
24
 
22
25
  Style/Documentation:
23
26
  Enabled: false
24
27
 
25
- Style/DoubleNegation:
28
+ Layout/SpaceInLambdaLiteral:
26
29
  Enabled: false
27
30
 
28
- Style/FileName:
29
- Exclude:
30
- - lib/dry-initializer.rb
31
+ Layout/MultilineMethodCallIndentation:
32
+ Enabled: true
33
+ EnforcedStyle: indented
31
34
 
32
- Style/Lambda:
33
- Exclude:
34
- - spec/**/*.rb
35
+ Metrics/LineLength:
36
+ Max: 100
35
37
 
36
- Style/LambdaCall:
38
+ Metrics/MethodLength:
39
+ Max: 22
40
+
41
+ Metrics/ClassLength:
42
+ Max: 150
43
+
44
+ Metrics/AbcSize:
45
+ Max: 20
46
+
47
+ Metrics/BlockLength:
48
+ Enabled: false
49
+
50
+ Metrics/CyclomaticComplexity:
51
+ Enabled: true
52
+ Max: 10
53
+
54
+ Lint/BooleanSymbol:
55
+ Enabled: false
56
+
57
+ Style/AccessModifierDeclarations:
58
+ Enabled: false
59
+
60
+ Style/BlockDelimiters:
37
61
  Enabled: false
38
62
 
39
- Style/RescueModified:
63
+ Layout/IndentFirstArrayElement:
64
+ EnforcedStyle: consistent
65
+
66
+ Style/ClassAndModuleChildren:
40
67
  Exclude:
41
- - spec/**/*.rb
68
+ - "spec/**/*_spec.rb"
42
69
 
43
- Style/Semicolon:
70
+ Lint/HandleExceptions:
44
71
  Exclude:
45
- - spec/**/*.rb
72
+ - "spec/spec_helper.rb"
46
73
 
47
- Style/StringLiterals:
48
- EnforcedStyle: double_quotes
74
+ Naming/FileName:
75
+ Exclude:
76
+ - "lib/dry-*.rb"
77
+
78
+ Style/SymbolArray:
79
+ Exclude:
80
+ - "spec/**/*_spec.rb"
81
+
82
+ Style/ConditionalAssignment:
83
+ Enabled: false
84
+
85
+ Naming/MethodName:
86
+ Enabled: false
49
87
 
50
- Style/StringLiteralsInInterpolation:
51
- EnforcedStyle: double_quotes
88
+ Style/AsciiComments:
89
+ Enabled: false
@@ -5,6 +5,145 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](http://keepachangelog.com/)
6
6
  and this project adheres to [Semantic Versioning](http://semver.org/).
7
7
 
8
+ ## [3.0.2] [2019-11-07]
9
+
10
+ ### Fixed
11
+
12
+ - Warnings about keyword arguments (flash-gordon)
13
+
14
+ ## [3.0.1] [2019-04-15]
15
+
16
+ ### Fixed
17
+
18
+ - Usage of underscored names of `option`-s and `param`-s (nepalez)
19
+
20
+ You can use any sequence of underscores except for in nested types.
21
+ In nested types single underscores can be used to split alphanumeric
22
+ parts only.
23
+
24
+ ```ruby
25
+ class Test
26
+ extend Dry::Initializer
27
+
28
+ # Proper usage
29
+ option :foo_bar do
30
+ option :__foo__, proc(&:to_s)
31
+ end
32
+ end
33
+
34
+ # Improper usage
35
+ option :__foo__ do
36
+ # ...
37
+ end
38
+
39
+ option :foo__bar do
40
+ # ...
41
+ end
42
+ end
43
+ ```
44
+
45
+ This restriction is necessary because we constantize option/param names
46
+ when defining nested structs.
47
+
48
+ ## [3.0.0] [2019-04-14]
49
+
50
+ ### Added
51
+
52
+ - Support of wrapped types/coercers (nepalez)
53
+
54
+ ```ruby
55
+ class Test
56
+ # Wrap type to the array
57
+ param :foo, [proc(&:to_s)]
58
+ end
59
+
60
+ # And the value will be wrapped as well
61
+ test = Test.new(42)
62
+ test.foo # => ["42"]
63
+ ```
64
+
65
+ - It works with several layers of nesting (nepalez)
66
+
67
+ ```ruby
68
+ class Test
69
+ # Wrap type to the array
70
+ param :foo, [[proc(&:to_s)]]
71
+ end
72
+
73
+ # And the value will be wrapped as well
74
+ test = Test.new(42)
75
+ test.foo # => [["42"]]
76
+ ```
77
+
78
+ - Support of nested types/coercers (nepalez)
79
+
80
+ ```ruby
81
+ class Test
82
+ param :foo do
83
+ option :bar do
84
+ option :baz, proc(&:to_s)
85
+ end
86
+ end
87
+ end
88
+
89
+ test = Test.new(bar: { "baz" => 42 })
90
+ test.foo.bar.baz # => "42"
91
+ ```
92
+
93
+ - Wrapped/nested combinations are supported as well (nepalez)
94
+
95
+ ```ruby
96
+ class Test
97
+ param :foo, [] do
98
+ option :bar, proc(&:to_s)
99
+ end
100
+ end
101
+
102
+ test = Test.new(bar: 42)
103
+ test.foo.first.bar # => "42"
104
+ ```
105
+
106
+ ## [2.7.0] Unreleazed
107
+
108
+ ### Fixed
109
+
110
+ - Roll back master to the state of [2.5.0].
111
+
112
+ Somehow distinction between `@default_null` and `@null` variables
113
+ in the `Dry::Initializer::Builders` broken the `rom` library.
114
+
115
+ The version [2.6.0] has been yanked on rubygems, so the master
116
+ was rolled back to the previous state until the reason for
117
+ the incompatibility become clear (bjeanes, nepalez)
118
+
119
+ ## [2.6.0] [2018-09-09] (YANKED)
120
+
121
+ ## [2.5.0] [2018-08-17]
122
+
123
+ ### Fixed
124
+
125
+ - `nil` coercion (belousovAV)
126
+
127
+ When default value is `nil` instead of `Dry::Initializer::UNDEFINED`,
128
+ the coercion should be applied to any value, including `nil`, because
129
+ we cannot distinct "undefined" `nil` from the "assigned" `nil` value.
130
+
131
+ ## [2.4.0] [2018-02-01]
132
+
133
+ ### Added
134
+ - Dispatchers for adding syntax sugar to `param` and `options` (nepalez)
135
+
136
+ ```ruby
137
+ # Converts `integer: true` to `type: proc(&:to_i)`
138
+ dispatcher = ->(op) { op[:integer] ? op.merge(type: proc(&:to_i)) : op }
139
+ # Register a dispatcher
140
+ Dry::Initializer::Dispatchers << dispatcher
141
+ # Use syntax sugar
142
+ class User
143
+ param :id, integer: true # same as param :id, proc(&:to_i)
144
+ end
145
+ ```
146
+
8
147
  ## [2.3.0] [2017-09-19]
9
148
 
10
149
  ### Added
@@ -15,7 +154,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
15
154
  ```ruby
16
155
  class Location < String
17
156
  attr_reader :parameter # refers back to its parameter
18
-
157
+
19
158
  def initialize(name, parameter)
20
159
  super(name)
21
160
  @parameter = parameter
@@ -303,7 +442,7 @@ and to @gzigzigzeo for persuading me to do this refactoring.
303
442
 
304
443
  ### Added
305
444
  - No-undefined configuration of the initializer (nepalez, flash-gordon)
306
-
445
+
307
446
  You can either extend or include module `Dry::Initializer` with additional option
308
447
  `[undefined: false]`. This time `nil` will be assigned instead of
309
448
  `Dry::Initializer::UNDEFINED`. Readers becomes faster because there is no need
@@ -351,18 +490,20 @@ and to @gzigzigzeo for persuading me to do this refactoring.
351
490
  ### Added
352
491
  - enhancement via `Dry::Initializer::Attribute.dispatchers` registry (nepalez)
353
492
 
354
- # Register dispatcher for `:string` option
355
- Dry::Initializer::Attribute.dispatchers << ->(string: nil, **op) do
356
- string ? op.merge(type: proc(&:to_s)) : op
357
- end
493
+ ```ruby
494
+ # Register dispatcher for `:string` option
495
+ Dry::Initializer::Attribute.dispatchers << ->(string: nil, **op) do
496
+ string ? op.merge(type: proc(&:to_s)) : op
497
+ end
358
498
 
359
- # Now you can use the `:string` key for `param` and `option`
360
- class User
361
- extend Dry::Initializer
362
- param :name, string: true
363
- end
499
+ # Now you can use the `:string` key for `param` and `option`
500
+ class User
501
+ extend Dry::Initializer
502
+ param :name, string: true
503
+ end
364
504
 
365
- User.new(:Andy).name # => "Andy"
505
+ User.new(:Andy).name # => "Andy"
506
+ ```
366
507
 
367
508
  ### Changed
368
509
  - optimize assignments for performance (nepalez)
@@ -413,7 +554,7 @@ In this version the code has been rewritten for simplicity
413
554
 
414
555
  ### Internal
415
556
  - Refactor the way [#initializer] method is (re)defined (nepalez)
416
-
557
+
417
558
  When you extend class with `Dry::Initializer::Mixin`, the initializer is
418
559
  defined not "inside" the class per se, but inside the included module. The
419
560
  reference to that module is stored as class-level `__initializer_mixin__`.
@@ -741,3 +882,9 @@ First public release
741
882
  [2.1.0]: https://github.com/dry-rb/dry-initializer/compare/v2.0.0...v2.1.0
742
883
  [2.2.0]: https://github.com/dry-rb/dry-initializer/compare/v2.1.0...v2.2.0
743
884
  [2.3.0]: https://github.com/dry-rb/dry-initializer/compare/v2.2.0...v2.3.0
885
+ [2.4.0]: https://github.com/dry-rb/dry-initializer/compare/v2.3.0...v2.4.0
886
+ [2.6.0]: https://github.com/dry-rb/dry-initializer/compare/v2.4.0...v2.5.0
887
+ [2.6.0]: https://github.com/dry-rb/dry-initializer/compare/v2.5.0...v2.6.0
888
+ [3.0.0]: https://github.com/dry-rb/dry-initializer/compare/v2.5.0...v3.0.0
889
+ [3.0.1]: https://github.com/dry-rb/dry-initializer/compare/v3.0.0...v3.0.1
890
+ [3.0.2]: https://github.com/dry-rb/dry-initializer/compare/v3.0.1...v3.0.2