dry-initializer 2.4.0 → 3.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) 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 +30 -0
  5. data/.github/ISSUE_TEMPLATE/---feature-request.md +18 -0
  6. data/.github/workflows/custom_ci.yml +58 -0
  7. data/.github/workflows/docsite.yml +34 -0
  8. data/.github/workflows/sync_configs.yml +56 -0
  9. data/.gitignore +2 -0
  10. data/.rspec +1 -1
  11. data/.rubocop.yml +76 -25
  12. data/CHANGELOG.md +150 -14
  13. data/CODE_OF_CONDUCT.md +13 -0
  14. data/CONTRIBUTING.md +29 -0
  15. data/Gemfile +25 -18
  16. data/Gemfile.devtools +16 -0
  17. data/Guardfile +3 -3
  18. data/LICENSE +20 -0
  19. data/README.md +17 -79
  20. data/Rakefile +4 -4
  21. data/benchmarks/compare_several_defaults.rb +27 -27
  22. data/benchmarks/plain_options.rb +14 -14
  23. data/benchmarks/plain_params.rb +22 -22
  24. data/benchmarks/with_coercion.rb +14 -14
  25. data/benchmarks/with_defaults.rb +17 -17
  26. data/benchmarks/with_defaults_and_coercion.rb +14 -14
  27. data/bin/.gitkeep +0 -0
  28. data/docsite/source/attributes.html.md +106 -0
  29. data/docsite/source/container-version.html.md +39 -0
  30. data/docsite/source/index.html.md +43 -0
  31. data/docsite/source/inheritance.html.md +43 -0
  32. data/docsite/source/optionals-and-defaults.html.md +130 -0
  33. data/docsite/source/options-tolerance.html.md +27 -0
  34. data/docsite/source/params-and-options.html.md +74 -0
  35. data/docsite/source/rails-support.html.md +101 -0
  36. data/docsite/source/readers.html.md +43 -0
  37. data/docsite/source/skip-undefined.html.md +59 -0
  38. data/docsite/source/type-constraints.html.md +160 -0
  39. data/dry-initializer.gemspec +13 -13
  40. data/lib/dry-initializer.rb +1 -1
  41. data/lib/dry/initializer.rb +17 -16
  42. data/lib/dry/initializer/builders.rb +2 -2
  43. data/lib/dry/initializer/builders/attribute.rb +16 -11
  44. data/lib/dry/initializer/builders/initializer.rb +9 -13
  45. data/lib/dry/initializer/builders/reader.rb +4 -2
  46. data/lib/dry/initializer/builders/signature.rb +3 -3
  47. data/lib/dry/initializer/config.rb +25 -12
  48. data/lib/dry/initializer/definition.rb +20 -71
  49. data/lib/dry/initializer/dispatchers.rb +101 -33
  50. data/lib/dry/initializer/dispatchers/build_nested_type.rb +59 -0
  51. data/lib/dry/initializer/dispatchers/check_type.rb +43 -0
  52. data/lib/dry/initializer/dispatchers/prepare_default.rb +40 -0
  53. data/lib/dry/initializer/dispatchers/prepare_ivar.rb +12 -0
  54. data/lib/dry/initializer/dispatchers/prepare_optional.rb +13 -0
  55. data/lib/dry/initializer/dispatchers/prepare_reader.rb +30 -0
  56. data/lib/dry/initializer/dispatchers/prepare_source.rb +28 -0
  57. data/lib/dry/initializer/dispatchers/prepare_target.rb +44 -0
  58. data/lib/dry/initializer/dispatchers/unwrap_type.rb +22 -0
  59. data/lib/dry/initializer/dispatchers/wrap_type.rb +28 -0
  60. data/lib/dry/initializer/mixin.rb +4 -4
  61. data/lib/dry/initializer/mixin/root.rb +1 -0
  62. data/lib/dry/initializer/struct.rb +39 -0
  63. data/lib/dry/initializer/undefined.rb +2 -0
  64. data/lib/dry/initializer/version.rb +5 -0
  65. data/lib/tasks/benchmark.rake +13 -13
  66. data/lib/tasks/profile.rake +16 -16
  67. data/project.yml +2 -0
  68. data/spec/attributes_spec.rb +7 -7
  69. data/spec/coercion_of_nil_spec.rb +25 -0
  70. data/spec/custom_dispatchers_spec.rb +6 -6
  71. data/spec/custom_initializer_spec.rb +2 -2
  72. data/spec/default_values_spec.rb +9 -9
  73. data/spec/definition_spec.rb +16 -12
  74. data/spec/invalid_default_spec.rb +2 -2
  75. data/spec/list_type_spec.rb +32 -0
  76. data/spec/missed_default_spec.rb +2 -2
  77. data/spec/nested_type_spec.rb +48 -0
  78. data/spec/optional_spec.rb +16 -16
  79. data/spec/options_tolerance_spec.rb +2 -2
  80. data/spec/public_attributes_utility_spec.rb +5 -5
  81. data/spec/reader_spec.rb +13 -13
  82. data/spec/repetitive_definitions_spec.rb +9 -9
  83. data/spec/several_assignments_spec.rb +9 -9
  84. data/spec/spec_helper.rb +6 -3
  85. data/spec/subclassing_spec.rb +5 -5
  86. data/spec/support/coverage.rb +7 -0
  87. data/spec/support/warnings.rb +7 -0
  88. data/spec/type_argument_spec.rb +15 -15
  89. data/spec/type_constraint_spec.rb +46 -28
  90. data/spec/value_coercion_via_dry_types_spec.rb +8 -8
  91. metadata +51 -34
  92. data/.travis.yml +0 -24
@@ -0,0 +1,28 @@
1
+ #
2
+ # Takes `:type` and `:wrap` to construct the final value coercer
3
+ #
4
+ module Dry::Initializer::Dispatchers::WrapType
5
+ extend self
6
+
7
+ def call(type: nil, wrap: 0, **options)
8
+ { type: wrapped_type(type, wrap), **options }
9
+ end
10
+
11
+ private
12
+
13
+ def wrapped_type(type, count)
14
+ return type if count.zero?
15
+
16
+ ->(value) { wrap_value(value, count, type) }
17
+ end
18
+
19
+ def wrap_value(value, count, type)
20
+ if count.zero?
21
+ type ? type.call(value) : value
22
+ else
23
+ return [wrap_value(value, count - 1, type)] unless value.is_a?(Array)
24
+
25
+ value.map { |item| wrap_value(item, count - 1, type) }
26
+ end
27
+ end
28
+ end
@@ -4,12 +4,12 @@ module Dry::Initializer
4
4
  extend DSL # @deprecated
5
5
  include Dry::Initializer # @deprecated
6
6
  def self.extended(klass) # @deprecated
7
- warn "[DEPRECATED] Use Dry::Initializer instead of its alias" \
8
- " Dry::Initializer::Mixin. The later will be removed in v2.1.0"
7
+ warn '[DEPRECATED] Use Dry::Initializer instead of its alias' \
8
+ ' Dry::Initializer::Mixin. The later will be removed in v2.1.0'
9
9
  super
10
10
  end
11
11
 
12
- require_relative "mixin/root"
13
- require_relative "mixin/local"
12
+ require_relative 'mixin/root'
13
+ require_relative 'mixin/local'
14
14
  end
15
15
  end
@@ -6,5 +6,6 @@ module Dry::Initializer::Mixin
6
6
  def initialize(*args)
7
7
  __dry_initializer_initialize__(*args)
8
8
  end
9
+ ruby2_keywords(:initialize) if respond_to?(:ruby2_keywords, true)
9
10
  end
10
11
  end
@@ -0,0 +1,39 @@
1
+ #
2
+ # The nested structure that takes nested hashes with indifferent access
3
+ #
4
+ class Dry::Initializer::Struct
5
+ extend Dry::Initializer
6
+
7
+ class << self
8
+ undef_method :param
9
+
10
+ def new(options)
11
+ super(**Hash(options).each_with_object({}) { |(k, v), h| h[k.to_sym] = v })
12
+ end
13
+ alias call new
14
+ end
15
+
16
+ #
17
+ # Represents event data as a nested hash with deeply stringified keys
18
+ # @return [Hash<String, ...>]
19
+ #
20
+ def to_h
21
+ self
22
+ .class
23
+ .dry_initializer
24
+ .attributes(self)
25
+ .each_with_object({}) { |(k, v), h| h[k.to_s] = __hashify(v) }
26
+ end
27
+
28
+ private
29
+
30
+ def __hashify(value)
31
+ case value
32
+ when Hash
33
+ value.each_with_object({}) { |(k, v), obj| obj[k.to_s] = __hashify(v) }
34
+ when Array then value.map { |v| __hashify(v) }
35
+ when Dry::Initializer::Struct then value.to_h
36
+ else value
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,2 @@
1
+ module Dry::Initializer::UNDEFINED
2
+ end
@@ -0,0 +1,5 @@
1
+ module Dry
2
+ module Initializer
3
+ VERSION = '3.0.3'.freeze
4
+ end
5
+ end
@@ -1,36 +1,36 @@
1
1
  namespace :benchmark do
2
- desc "Runs benchmarks for plain params"
2
+ desc 'Runs benchmarks for plain params'
3
3
  task :plain_params do
4
- system "ruby benchmarks/plain_params.rb"
4
+ system 'ruby benchmarks/plain_params.rb'
5
5
  end
6
6
 
7
- desc "Runs benchmarks for plain options"
7
+ desc 'Runs benchmarks for plain options'
8
8
  task :plain_options do
9
- system "ruby benchmarks/plain_options.rb"
9
+ system 'ruby benchmarks/plain_options.rb'
10
10
  end
11
11
 
12
- desc "Runs benchmarks for value coercion"
12
+ desc 'Runs benchmarks for value coercion'
13
13
  task :with_coercion do
14
- system "ruby benchmarks/with_coercion.rb"
14
+ system 'ruby benchmarks/with_coercion.rb'
15
15
  end
16
16
 
17
- desc "Runs benchmarks with defaults"
17
+ desc 'Runs benchmarks with defaults'
18
18
  task :with_defaults do
19
- system "ruby benchmarks/with_defaults.rb"
19
+ system 'ruby benchmarks/with_defaults.rb'
20
20
  end
21
21
 
22
- desc "Runs benchmarks with defaults and coercion"
22
+ desc 'Runs benchmarks with defaults and coercion'
23
23
  task :with_defaults_and_coercion do
24
- system "ruby benchmarks/with_defaults_and_coercion.rb"
24
+ system 'ruby benchmarks/with_defaults_and_coercion.rb'
25
25
  end
26
26
 
27
- desc "Runs benchmarks for several defaults"
27
+ desc 'Runs benchmarks for several defaults'
28
28
  task :compare_several_defaults do
29
- system "ruby benchmarks/with_several_defaults.rb"
29
+ system 'ruby benchmarks/with_several_defaults.rb'
30
30
  end
31
31
  end
32
32
 
33
- desc "Runs all benchmarks"
33
+ desc 'Runs all benchmarks'
34
34
  task benchmark: %i[
35
35
  benchmark:plain_params
36
36
  benchmark:plain_options
@@ -1,32 +1,32 @@
1
1
  namespace :profile do
2
2
  def profile(name, execution, &definition)
3
- require "dry-initializer"
4
- require "ruby-prof"
5
- require "fileutils"
3
+ require 'dry-initializer'
4
+ require 'ruby-prof'
5
+ require 'fileutils'
6
6
 
7
7
  definition.call
8
8
  result = RubyProf.profile do
9
9
  1_000.times { execution.call }
10
10
  end
11
11
 
12
- FileUtils.mkdir_p "./tmp"
12
+ FileUtils.mkdir_p './tmp'
13
13
 
14
14
  FileUtils.touch "./tmp/#{name}.dot"
15
- File.open("./tmp/#{name}.dot", "w+") do |output|
15
+ File.open("./tmp/#{name}.dot", 'w+') do |output|
16
16
  RubyProf::DotPrinter.new(result).print(output, min_percent: 0)
17
17
  end
18
18
 
19
19
  FileUtils.touch "./tmp/#{name}.html"
20
- File.open("./tmp/#{name}.html", "w+") do |output|
20
+ File.open("./tmp/#{name}.html", 'w+') do |output|
21
21
  RubyProf::CallStackPrinter.new(result).print(output, min_percent: 0)
22
22
  end
23
23
 
24
24
  system "dot -Tpng ./tmp/#{name}.dot > ./tmp/#{name}.png"
25
25
  end
26
26
 
27
- desc "Profiles initialization with required param and option"
27
+ desc 'Profiles initialization with required param and option'
28
28
  task :required do
29
- profile("required", -> { User.new :Andy, email: "andy@example.com" }) do
29
+ profile('required', -> { User.new :Andy, email: 'andy@example.com' }) do
30
30
  class User
31
31
  extend Dry::Initializer
32
32
  param :name
@@ -35,20 +35,20 @@ namespace :profile do
35
35
  end
36
36
  end
37
37
 
38
- desc "Profiles initialization with default param and option"
38
+ desc 'Profiles initialization with default param and option'
39
39
  task :defaults do
40
- profile("defaults", -> { User.new }) do
40
+ profile('defaults', -> { User.new }) do
41
41
  class User
42
42
  extend Dry::Initializer
43
43
  param :name, default: -> { :Andy }
44
- option :email, default: -> { "andy@example.com" }
44
+ option :email, default: -> { 'andy@example.com' }
45
45
  end
46
46
  end
47
47
  end
48
48
 
49
- desc "Profiles initialization with coerced param and option"
49
+ desc 'Profiles initialization with coerced param and option'
50
50
  task :coercion do
51
- profile("coercion", -> { User.new :Andy, email: :"andy@example.com" }) do
51
+ profile('coercion', -> { User.new :Andy, email: :"andy@example.com" }) do
52
52
  class User
53
53
  extend Dry::Initializer
54
54
  param :name, proc(&:to_s)
@@ -57,9 +57,9 @@ namespace :profile do
57
57
  end
58
58
  end
59
59
 
60
- desc "Profiles initialization with coerced defaults of param and option"
60
+ desc 'Profiles initialization with coerced defaults of param and option'
61
61
  task :default_coercion do
62
- profile("default_coercion", -> { User.new }) do
62
+ profile('default_coercion', -> { User.new }) do
63
63
  class User
64
64
  extend Dry::Initializer
65
65
  param :name, proc(&:to_s), default: -> { :Andy }
@@ -69,7 +69,7 @@ namespace :profile do
69
69
  end
70
70
  end
71
71
 
72
- desc "Makes all profiling at once"
72
+ desc 'Makes all profiling at once'
73
73
  task profile: %i[
74
74
  profile:required
75
75
  profile:defaults
data/project.yml ADDED
@@ -0,0 +1,2 @@
1
+ name: dry-initializer
2
+ codacy_id: 03c8923afd734e9fb0f4bfe9cc893edb
@@ -1,7 +1,7 @@
1
- describe Dry::Initializer, "dry_initializer.attributes" do
1
+ describe Dry::Initializer, 'dry_initializer.attributes' do
2
2
  subject { instance.class.dry_initializer.attributes(instance) }
3
3
 
4
- context "when class has params" do
4
+ context 'when class has params' do
5
5
  before do
6
6
  class Test::Foo
7
7
  extend Dry::Initializer
@@ -13,12 +13,12 @@ describe Dry::Initializer, "dry_initializer.attributes" do
13
13
 
14
14
  let(:instance) { Test::Foo.new(:FOO) }
15
15
 
16
- it "collects coerced params with default values" do
17
- expect(subject).to eq({ foo: "FOO", bar: 1 })
16
+ it 'collects coerced params with default values' do
17
+ expect(subject).to eq({ foo: 'FOO', bar: 1 })
18
18
  end
19
19
  end
20
20
 
21
- context "when class has options" do
21
+ context 'when class has options' do
22
22
  before do
23
23
  class Test::Foo
24
24
  extend Dry::Initializer
@@ -31,8 +31,8 @@ describe Dry::Initializer, "dry_initializer.attributes" do
31
31
 
32
32
  let(:instance) { Test::Foo.new(foo: :FOO, qux: :QUX) }
33
33
 
34
- it "collects coerced and renamed options with default values" do
35
- expect(subject).to eq({ foo: :FOO, bar: 1, quxx: "QUX" })
34
+ it 'collects coerced and renamed options with default values' do
35
+ expect(subject).to eq({ foo: :FOO, bar: 1, quxx: 'QUX' })
36
36
  end
37
37
  end
38
38
  end
@@ -0,0 +1,25 @@
1
+ describe 'coercion of nil' do
2
+ before do
3
+ class Test::Foo
4
+ extend Dry::Initializer
5
+ param :bar, proc(&:to_i)
6
+ end
7
+
8
+ class Test::Baz
9
+ include Dry::Initializer.define -> do
10
+ param :qux, proc(&:to_i)
11
+ end
12
+ end
13
+ end
14
+
15
+ let(:foo) { Test::Foo.new(nil) }
16
+ let(:baz) { Test::Baz.new(nil) }
17
+
18
+ it 'works with extend syntax' do
19
+ expect(foo.bar).to eq 0
20
+ end
21
+
22
+ it 'works with include syntax' do
23
+ expect(baz.qux).to eq 0
24
+ end
25
+ end
@@ -1,12 +1,12 @@
1
- describe "custom dispatchers" do
2
- subject { Test::Foo.new "123" }
1
+ describe 'custom dispatchers' do
2
+ subject { Test::Foo.new '123' }
3
3
 
4
4
  before do
5
5
  dispatcher = ->(op) { op[:integer] ? op.merge(type: proc(&:to_i)) : op }
6
6
  Dry::Initializer::Dispatchers << dispatcher
7
7
  end
8
8
 
9
- context "with extend syntax" do
9
+ context 'with extend syntax' do
10
10
  before do
11
11
  class Test::Foo
12
12
  extend Dry::Initializer
@@ -14,12 +14,12 @@ describe "custom dispatchers" do
14
14
  end
15
15
  end
16
16
 
17
- it "adds syntax sugar" do
17
+ it 'adds syntax sugar' do
18
18
  expect(subject.id).to eq 123
19
19
  end
20
20
  end
21
21
 
22
- context "with include syntax" do
22
+ context 'with include syntax' do
23
23
  before do
24
24
  class Test::Foo
25
25
  include Dry::Initializer.define -> do
@@ -28,7 +28,7 @@ describe "custom dispatchers" do
28
28
  end
29
29
  end
30
30
 
31
- it "adds syntax sugar" do
31
+ it 'adds syntax sugar' do
32
32
  expect(subject.id).to eq 123
33
33
  end
34
34
  end
@@ -1,4 +1,4 @@
1
- describe "custom initializer" do
1
+ describe 'custom initializer' do
2
2
  before do
3
3
  class Test::Foo
4
4
  extend Dry::Initializer
@@ -21,7 +21,7 @@ describe "custom initializer" do
21
21
  end
22
22
  end
23
23
 
24
- it "reloads the initializer" do
24
+ it 'reloads the initializer' do
25
25
  baz = Test::Baz.new(5, 5)
26
26
 
27
27
  expect(baz.bar).to eq 15 # 5 * 3
@@ -1,4 +1,4 @@
1
- describe "default values" do
1
+ describe 'default values' do
2
2
  before do
3
3
  class Test::Foo
4
4
  extend Dry::Initializer
@@ -17,7 +17,7 @@ describe "default values" do
17
17
  end
18
18
  end
19
19
 
20
- it "instantiate arguments" do
20
+ it 'instantiate arguments' do
21
21
  subject = Test::Foo.new(1, 2, baz: 3, qux: 4)
22
22
 
23
23
  expect(subject.foo).to eql 1
@@ -26,7 +26,7 @@ describe "default values" do
26
26
  expect(subject.qux).to eql 4
27
27
  end
28
28
 
29
- it "applies default values" do
29
+ it 'applies default values' do
30
30
  subject = Test::Foo.new
31
31
 
32
32
  expect(subject.foo).to eql :FOO
@@ -35,7 +35,7 @@ describe "default values" do
35
35
  expect(subject.qux).to eql :FOO
36
36
  end
37
37
 
38
- it "applies default values partially" do
38
+ it 'applies default values partially' do
39
39
  subject = Test::Foo.new 1, baz: 3
40
40
 
41
41
  expect(subject.foo).to eql 1
@@ -44,12 +44,12 @@ describe "default values" do
44
44
  expect(subject.qux).to eql 1
45
45
  end
46
46
 
47
- it "applies default values from private methods" do
47
+ it 'applies default values from private methods' do
48
48
  subject = Test::Foo.new
49
49
  expect(subject.mox).to eql :MOX
50
50
  end
51
51
 
52
- describe "when the last param has a default and there are no options" do
52
+ describe 'when the last param has a default and there are no options' do
53
53
  before do
54
54
  class Test::Bar
55
55
  extend Dry::Initializer
@@ -59,21 +59,21 @@ describe "default values" do
59
59
  end
60
60
  end
61
61
 
62
- it "instantiates arguments" do
62
+ it 'instantiates arguments' do
63
63
  subject = Test::Bar.new(1, 2)
64
64
 
65
65
  expect(subject.foo).to eql 1
66
66
  expect(subject.bar).to eql 2
67
67
  end
68
68
 
69
- it "applies default values" do
69
+ it 'applies default values' do
70
70
  subject = Test::Bar.new(1)
71
71
 
72
72
  expect(subject.foo).to eql 1
73
73
  expect(subject.bar).to eql({})
74
74
  end
75
75
 
76
- it "instantiates arguments also if the last is an hash" do
76
+ it 'instantiates arguments also if the last is an hash' do
77
77
  subject = Test::Bar.new(1, { baz: 2, qux: 3 })
78
78
 
79
79
  expect(subject.foo).to eql 1
@@ -1,4 +1,4 @@
1
- describe "definition" do
1
+ describe 'definition' do
2
2
  shared_examples :initializer do |in_context|
3
3
  subject { Test::Foo.new(1, bar: 2) }
4
4
 
@@ -8,7 +8,7 @@ describe "definition" do
8
8
  end
9
9
  end
10
10
 
11
- it_behaves_like :initializer, "extend Dry::Initializer" do
11
+ it_behaves_like :initializer, 'extend Dry::Initializer' do
12
12
  before do
13
13
  class Test::Foo
14
14
  extend Dry::Initializer
@@ -17,24 +17,28 @@ describe "definition" do
17
17
  end
18
18
  end
19
19
 
20
- it "preservers definition params" do
20
+ it 'preservers definition params' do
21
21
  params = Test::Foo.dry_initializer.params.map do |definition|
22
22
  [definition.source, definition.options]
23
23
  end
24
24
 
25
- expect(params).to eq [[:foo, { as: :foo, reader: :public }]]
25
+ expect(params).to eq [
26
+ [:foo, { as: :foo, reader: :public, optional: false }]
27
+ ]
26
28
  end
27
29
 
28
- it "preservers definition options" do
30
+ it 'preservers definition options' do
29
31
  options = Test::Foo.dry_initializer.options.map do |definition|
30
32
  [definition.source, definition.options]
31
33
  end
32
34
 
33
- expect(options).to eq [[:bar, { as: :bar, reader: :public }]]
35
+ expect(options).to eq [
36
+ [:bar, { as: :bar, reader: :public, optional: false }]
37
+ ]
34
38
  end
35
39
  end
36
40
 
37
- it_behaves_like :initializer, "extend Dry::Initializer" do
41
+ it_behaves_like :initializer, 'extend Dry::Initializer' do
38
42
  before do
39
43
  class Test::Foo
40
44
  extend Dry::Initializer
@@ -44,7 +48,7 @@ describe "definition" do
44
48
  end
45
49
  end
46
50
 
47
- it_behaves_like :initializer, "extend Dry::Initializer[undefined: false]" do
51
+ it_behaves_like :initializer, 'extend Dry::Initializer[undefined: false]' do
48
52
  before do
49
53
  class Test::Foo
50
54
  extend Dry::Initializer[undefined: false]
@@ -54,7 +58,7 @@ describe "definition" do
54
58
  end
55
59
  end
56
60
 
57
- it_behaves_like :initializer, "include Dry::Initializer with block" do
61
+ it_behaves_like :initializer, 'include Dry::Initializer with block' do
58
62
  before do
59
63
  class Test::Foo
60
64
  include(
@@ -67,7 +71,7 @@ describe "definition" do
67
71
  end
68
72
  end
69
73
 
70
- it_behaves_like :initializer, "include Dry::Initializer with lambda" do
74
+ it_behaves_like :initializer, 'include Dry::Initializer with lambda' do
71
75
  before do
72
76
  class Test::Foo
73
77
  include Dry::Initializer.define -> do
@@ -78,7 +82,7 @@ describe "definition" do
78
82
  end
79
83
  end
80
84
 
81
- it_behaves_like :initializer, "include Dry::Initializer[undefined: false]" do
85
+ it_behaves_like :initializer, 'include Dry::Initializer[undefined: false]' do
82
86
  before do
83
87
  class Test::Foo
84
88
  include(
@@ -92,7 +96,7 @@ describe "definition" do
92
96
  end
93
97
 
94
98
  # @deprecated
95
- it_behaves_like :initializer, "include Dry::Initializer::Mixin" do
99
+ it_behaves_like :initializer, 'include Dry::Initializer::Mixin' do
96
100
  before do
97
101
  class Test::Foo
98
102
  include(