dry-initializer 1.2.0 → 1.3.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +38 -9
- data/dry-initializer.gemspec +1 -1
- data/lib/dry/initializer.rb +4 -32
- data/lib/dry/initializer/attribute.rb +29 -13
- data/lib/dry/initializer/builder.rb +19 -18
- data/lib/dry/initializer/dsl.rb +44 -0
- data/lib/dry/initializer/option.rb +5 -4
- data/lib/dry/initializer/param.rb +2 -2
- data/spec/definition_spec.rb +84 -0
- data/spec/{enhancement_spec.rb → gem_enhancement_spec.rb} +0 -0
- data/spec/optional_spec.rb +17 -0
- data/spec/value_coercion_via_dry_types_spec.rb +11 -3
- metadata +7 -10
- data/spec/base_spec.rb +0 -21
- data/spec/container_spec.rb +0 -45
- data/spec/default_nil_spec.rb +0 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a64c90248831e6513871de4f8f489422f3522e0
|
4
|
+
data.tar.gz: bc6cfa16dd5a4922c54869d993fc3d8ac6e08bb6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 615d1a7be21495edcfabe3d4884b637700c1ba032de7b8abc6cdd9d08c10abf00a1febcfc78ae98e6d4c2e0f25031c547326e6640fea561fc755236add5064e8
|
7
|
+
data.tar.gz: 2ca11b3bdaa8d57adc40c7ca07aa5f790a306aeb8d88facacb6233031eaa7be2524bce10e921c775b93edb6720791f8842946a492d2603dc0857b39cc94b6784
|
data/CHANGELOG.md
CHANGED
@@ -1,34 +1,63 @@
|
|
1
|
+
## v1.3.0 2017-03-05
|
2
|
+
|
3
|
+
### Added
|
4
|
+
- No-undefined configuration of the initializer (nepalez, flash-gordon)
|
5
|
+
|
6
|
+
You can either extend or include module `Dry::Initializer` with additional option
|
7
|
+
`[undefined: false]`. This time `nil` will be assigned instead of
|
8
|
+
`Dry::Initializer::UNDEFINED`. Readers becomes faster because there is no need
|
9
|
+
to chech whether a variable was defined or not. At the same time the initializer
|
10
|
+
doesn't distinct cases when a variable was set to `nil` explicitly, and when it wasn's set at all:
|
11
|
+
|
12
|
+
class Foo # old behavior
|
13
|
+
extend Dry::Initializer
|
14
|
+
param :qux, optional: true
|
15
|
+
end
|
16
|
+
|
17
|
+
class Bar # new behavior
|
18
|
+
extend Dry::Initializer[undefined: false]
|
19
|
+
param :qux, optional: true
|
20
|
+
end
|
21
|
+
|
22
|
+
Foo.new.instance_variable_get(:@qux) # => Dry::Initializer::UNDEFINED
|
23
|
+
Bar.new.instance_variable_get(:@qux) # => nil
|
24
|
+
|
25
|
+
### Internals
|
26
|
+
- Fixed method definitions for performance at the load time (nepalez, flash-gordon)
|
27
|
+
|
28
|
+
[Compare v1.2.0...v1.3.0](https://github.com/dry-rb/dry-initializer/compare/v1.2.0...v1.3.0)
|
29
|
+
|
1
30
|
## v1.2.0 2017-03-05
|
2
31
|
|
3
|
-
|
32
|
+
### Fixed
|
4
33
|
- The `@__options__` variable collects renamed options after default values and coercions were applied (nepalez)
|
5
34
|
|
6
35
|
[Compare v1.1.3...v1.2.0](https://github.com/dry-rb/dry-initializer/compare/v1.1.3...v1.2.0)
|
7
36
|
|
8
37
|
## v1.1.3 2017-03-01
|
9
38
|
|
10
|
-
|
39
|
+
### Added
|
11
40
|
- Support for lambdas as default values (nepalez, gzigzigzeo)
|
12
41
|
|
13
42
|
[Compare v1.1.2...v1.1.3](https://github.com/dry-rb/dry-initializer/compare/v1.1.2...v1.1.3)
|
14
43
|
|
15
44
|
## v1.1.2 2017-02-06
|
16
45
|
|
17
|
-
|
46
|
+
### Internals
|
18
47
|
- Remove previously defined methods before redefining them (flash-gordon)
|
19
48
|
|
20
49
|
[Compare v1.1.1...v1.1.2](https://github.com/dry-rb/dry-initializer/compare/v1.1.1...v1.1.2)
|
21
50
|
|
22
51
|
## v1.1.1 2017-02-04
|
23
52
|
|
24
|
-
|
53
|
+
### Bugs Fixed
|
25
54
|
- `@__options__` collects defined options only (nepalez)
|
26
55
|
|
27
56
|
[Compare v1.1.0...v1.1.1](https://github.com/dry-rb/dry-initializer/compare/v1.1.0...v1.1.1)
|
28
57
|
|
29
58
|
## v1.1.0 2017-01-28
|
30
59
|
|
31
|
-
|
60
|
+
### Added:
|
32
61
|
- enhancement via `Dry::Initializer::Attribute.dispatchers` registry (nepalez)
|
33
62
|
|
34
63
|
# Register dispatcher for `:string` option
|
@@ -44,7 +73,7 @@
|
|
44
73
|
|
45
74
|
User.new(:Andy).name # => "Andy"
|
46
75
|
|
47
|
-
|
76
|
+
### Internals:
|
48
77
|
- optimize assignments for performance (nepalez)
|
49
78
|
|
50
79
|
[Compare v1.0.0...v1.1.0](https://github.com/dry-rb/dry-initializer/compare/v1.0.0...v1.1.0)
|
@@ -53,10 +82,10 @@
|
|
53
82
|
|
54
83
|
In this version the code has been rewritten for simplicity
|
55
84
|
|
56
|
-
|
85
|
+
### BREAKING CHANGES
|
57
86
|
- 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)
|
58
87
|
|
59
|
-
|
88
|
+
### Added:
|
60
89
|
- support for reloading `param` and `option` definitions (nepalez)
|
61
90
|
|
62
91
|
class User
|
@@ -86,7 +115,7 @@ In this version the code has been rewritten for simplicity
|
|
86
115
|
User.new(phone: '1234567890').phone # => '1234567890'
|
87
116
|
User.new(number: '1234567890').phone # => '1234567890'
|
88
117
|
|
89
|
-
|
118
|
+
### Internals
|
90
119
|
- `Dry::Initializer` and `Dry::Initializer::Mixin` became aliases (nepalez)
|
91
120
|
|
92
121
|
[Compare v0.11.0...v1.0.0](https://github.com/dry-rb/dry-initializer/compare/v0.11.0...v1.0.0)
|
data/dry-initializer.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |gem|
|
2
2
|
gem.name = "dry-initializer"
|
3
|
-
gem.version = "1.
|
3
|
+
gem.version = "1.3.0"
|
4
4
|
gem.author = ["Vladimir Kochnev (marshall-lee)", "Andrew Kozin (nepalez)"]
|
5
5
|
gem.email = ["hashtable@yandex.ru", "andrew.kozin@gmail.com"]
|
6
6
|
gem.homepage = "https://github.com/dryrb/dry-initializer"
|
data/lib/dry/initializer.rb
CHANGED
@@ -8,6 +8,7 @@ module Dry
|
|
8
8
|
require_relative "initializer/param"
|
9
9
|
require_relative "initializer/option"
|
10
10
|
require_relative "initializer/builder"
|
11
|
+
require_relative "initializer/dsl"
|
11
12
|
|
12
13
|
# rubocop: disable Style/ConstantName
|
13
14
|
Mixin = self # for compatibility to versions below 0.12
|
@@ -17,36 +18,7 @@ module Dry
|
|
17
18
|
obj.define_singleton_method(:inspect) { "Dry::Initializer::UNDEFINED" }
|
18
19
|
end.freeze
|
19
20
|
|
20
|
-
|
21
|
-
def extended(klass)
|
22
|
-
super
|
23
|
-
mixin = klass.send(:__initializer_mixin__)
|
24
|
-
builder = klass.send(:__initializer_builder__)
|
25
|
-
|
26
|
-
builder.call(mixin)
|
27
|
-
klass.include(mixin)
|
28
|
-
klass.send(:define_method, :initialize) do |*args|
|
29
|
-
__initialize__(*args)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def define(fn = nil, &block)
|
34
|
-
mixin = Module.new do
|
35
|
-
def initialize(*args)
|
36
|
-
__initialize__(*args)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
builder = Builder.new
|
41
|
-
builder.instance_exec(&(fn || block))
|
42
|
-
builder.call(mixin)
|
43
|
-
mixin
|
44
|
-
end
|
45
|
-
|
46
|
-
def mixin(fn = nil, &block)
|
47
|
-
define(fn, &block)
|
48
|
-
end
|
49
|
-
end
|
21
|
+
extend Dry::Initializer::DSL
|
50
22
|
|
51
23
|
def param(*args)
|
52
24
|
__initializer_builder__.param(*args).call(__initializer_mixin__)
|
@@ -66,8 +38,8 @@ module Dry
|
|
66
38
|
end
|
67
39
|
end
|
68
40
|
|
69
|
-
def __initializer_builder__
|
70
|
-
@__initializer_builder__ ||= Dry::Initializer::Builder.new
|
41
|
+
def __initializer_builder__(**settings)
|
42
|
+
@__initializer_builder__ ||= Dry::Initializer::Builder.new(settings)
|
71
43
|
end
|
72
44
|
|
73
45
|
def inherited(klass)
|
@@ -40,12 +40,13 @@ module Dry::Initializer
|
|
40
40
|
attr_reader :source, :target, :coercer, :default, :optional, :reader
|
41
41
|
|
42
42
|
def initialize(options)
|
43
|
-
@source
|
44
|
-
@target
|
45
|
-
@coercer
|
46
|
-
@default
|
47
|
-
@optional
|
48
|
-
@reader
|
43
|
+
@source = options[:source]
|
44
|
+
@target = options[:target]
|
45
|
+
@coercer = options[:type]
|
46
|
+
@default = options[:default]
|
47
|
+
@optional = !!(options[:optional] || @default)
|
48
|
+
@reader = options.fetch(:reader, :public)
|
49
|
+
@undefined = options.fetch(:undefined, true)
|
49
50
|
validate
|
50
51
|
end
|
51
52
|
|
@@ -58,12 +59,12 @@ module Dry::Initializer
|
|
58
59
|
return unless reader
|
59
60
|
command = %w(private protected).include?(reader.to_s) ? reader : :public
|
60
61
|
|
61
|
-
<<-RUBY
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
62
|
+
<<-RUBY
|
63
|
+
undef_method :#{target} if method_defined?(:#{target}) ||
|
64
|
+
protected_method_defined?(:#{target}) ||
|
65
|
+
private_method_defined?(:#{target})
|
66
|
+
#{reader_definition}
|
67
|
+
#{command} :#{target}
|
67
68
|
RUBY
|
68
69
|
end
|
69
70
|
|
@@ -75,6 +76,18 @@ module Dry::Initializer
|
|
75
76
|
validate_coercer
|
76
77
|
end
|
77
78
|
|
79
|
+
def undefined
|
80
|
+
@undefined ? "Dry::Initializer::UNDEFINED" : "nil"
|
81
|
+
end
|
82
|
+
|
83
|
+
def reader_definition
|
84
|
+
if @undefined
|
85
|
+
"def #{target}; @#{target} unless @#{target} == #{undefined}; end"
|
86
|
+
else
|
87
|
+
"attr_reader :#{target}"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
78
91
|
def validate_target
|
79
92
|
return if target =~ /\A\w+\Z/
|
80
93
|
fail ArgumentError.new("Invalid name '#{target}' for the target variable")
|
@@ -96,7 +109,10 @@ module Dry::Initializer
|
|
96
109
|
|
97
110
|
def coercer_hash(type)
|
98
111
|
return {} unless coercer
|
99
|
-
|
112
|
+
|
113
|
+
value = coercer unless @undefined
|
114
|
+
value ||= proc { |v| v == Dry::Initializer::UNDEFINED ? v : coercer.(v) }
|
115
|
+
|
100
116
|
{ :"#{type}_#{source}" => value }
|
101
117
|
end
|
102
118
|
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
module Dry::Initializer
|
2
2
|
class Builder
|
3
|
-
def param(*args)
|
4
|
-
@params = insert
|
3
|
+
def param(*args, **opts)
|
4
|
+
@params = insert @params, Attribute.param(*args, **@config.merge(opts))
|
5
5
|
validate_collections
|
6
6
|
end
|
7
7
|
|
8
|
-
def option(*args)
|
9
|
-
@options = insert
|
8
|
+
def option(*args, **opts)
|
9
|
+
@options = insert @options, Attribute.option(*args, **@config.merge(opts))
|
10
10
|
validate_collections
|
11
11
|
end
|
12
12
|
|
@@ -20,12 +20,13 @@ module Dry::Initializer
|
|
20
20
|
|
21
21
|
mixin.send(:define_method, :__defaults__) { defaults }
|
22
22
|
mixin.send(:define_method, :__coercers__) { coercers }
|
23
|
-
mixin.class_eval(code
|
23
|
+
mixin.class_eval(code)
|
24
24
|
end
|
25
25
|
|
26
26
|
private
|
27
27
|
|
28
|
-
def initialize
|
28
|
+
def initialize(**config)
|
29
|
+
@config = config
|
29
30
|
@params = []
|
30
31
|
@options = []
|
31
32
|
end
|
@@ -40,18 +41,18 @@ module Dry::Initializer
|
|
40
41
|
end
|
41
42
|
|
42
43
|
def code
|
43
|
-
<<-RUBY
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
44
|
+
<<-RUBY
|
45
|
+
def __initialize__(#{initializer_signatures})
|
46
|
+
@__options__ = {}
|
47
|
+
#{initializer_presetters}
|
48
|
+
#{initializer_setters}
|
49
|
+
#{initializer_postsetters}
|
50
|
+
end
|
51
|
+
private :__initialize__
|
52
|
+
private :__defaults__
|
53
|
+
private :__coercers__
|
54
|
+
|
55
|
+
#{getters}
|
55
56
|
RUBY
|
56
57
|
end
|
57
58
|
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Dry::Initializer
|
2
|
+
module DSL
|
3
|
+
attr_reader :config
|
4
|
+
|
5
|
+
def [](**settings)
|
6
|
+
Module.new do
|
7
|
+
extend Dry::Initializer::DSL
|
8
|
+
include Dry::Initializer
|
9
|
+
@config = settings
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def define(fn = nil, &block)
|
14
|
+
mixin = Module.new do
|
15
|
+
def initialize(*args)
|
16
|
+
__initialize__(*args)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
builder = Builder.new Hash(config)
|
21
|
+
builder.instance_exec(&(fn || block))
|
22
|
+
builder.call(mixin)
|
23
|
+
mixin
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def extended(klass)
|
29
|
+
super
|
30
|
+
mixin = klass.send(:__initializer_mixin__)
|
31
|
+
builder = klass.send(:__initializer_builder__, Hash(config))
|
32
|
+
|
33
|
+
builder.call(mixin)
|
34
|
+
klass.include(mixin)
|
35
|
+
klass.send(:define_method, :initialize) do |*args|
|
36
|
+
__initialize__(*args)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def mixin(fn = nil, &block)
|
41
|
+
define(fn, &block)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -7,7 +7,7 @@ module Dry::Initializer
|
|
7
7
|
|
8
8
|
# parts of __initalizer__
|
9
9
|
def presetter
|
10
|
-
"@#{target} =
|
10
|
+
"@#{target} = #{undefined}" if dispensable? && @undefined
|
11
11
|
end
|
12
12
|
|
13
13
|
def safe_setter
|
@@ -16,13 +16,14 @@ module Dry::Initializer
|
|
16
16
|
|
17
17
|
def fast_setter
|
18
18
|
return safe_setter unless dispensable?
|
19
|
-
"@#{target} = __options__.key?(:'#{source}')
|
20
|
-
|
19
|
+
"@#{target} = __options__.key?(:'#{source}')" \
|
20
|
+
" ? #{safe_coerced}" \
|
21
|
+
" : #{undefined}"
|
21
22
|
end
|
22
23
|
|
23
24
|
def postsetter
|
24
25
|
"@__options__[:#{target}] = @#{target}" \
|
25
|
-
" unless @#{target} ==
|
26
|
+
" unless @#{target} == #{undefined}"
|
26
27
|
end
|
27
28
|
|
28
29
|
# part of __defaults__
|
@@ -2,7 +2,7 @@ module Dry::Initializer
|
|
2
2
|
class Param < Attribute
|
3
3
|
# part of __initializer__ definition
|
4
4
|
def initializer_signature
|
5
|
-
optional ? "#{target} =
|
5
|
+
optional ? "#{target} = #{undefined}" : target
|
6
6
|
end
|
7
7
|
|
8
8
|
# parts of __initalizer__
|
@@ -46,7 +46,7 @@ module Dry::Initializer
|
|
46
46
|
|
47
47
|
def default_part
|
48
48
|
return unless default
|
49
|
-
" ==
|
49
|
+
" == #{undefined} ?" \
|
50
50
|
" instance_exec(&__defaults__[:param_#{target}]) :" \
|
51
51
|
" #{target}"
|
52
52
|
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
describe "definition" do
|
2
|
+
shared_examples :initializer do |in_context|
|
3
|
+
subject { Test::Foo.new(1, bar: 2) }
|
4
|
+
|
5
|
+
it "sets variables when defined by #{in_context}" do
|
6
|
+
expect(subject.instance_variable_get(:@foo)).to eql 1
|
7
|
+
expect(subject.instance_variable_get(:@bar)).to eql 2
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
it_behaves_like :initializer, "extending Dry::Initializer" do
|
12
|
+
before do
|
13
|
+
class Test::Foo
|
14
|
+
extend Dry::Initializer
|
15
|
+
param :foo
|
16
|
+
option :bar
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
it_behaves_like :initializer, "extending Dry::Initializer::Mixin" do
|
22
|
+
before do
|
23
|
+
class Test::Foo
|
24
|
+
extend Dry::Initializer::Mixin
|
25
|
+
param :foo
|
26
|
+
option :bar
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
it_behaves_like :initializer, "extending Dry::Initializer[undefined: false]" do
|
32
|
+
before do
|
33
|
+
class Test::Foo
|
34
|
+
extend Dry::Initializer[undefined: false]
|
35
|
+
param :foo
|
36
|
+
option :bar
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
it_behaves_like :initializer, "including Dry::Initializer with block" do
|
42
|
+
before do
|
43
|
+
class Test::Foo
|
44
|
+
include Dry::Initializer.define {
|
45
|
+
param :foo
|
46
|
+
option :bar
|
47
|
+
}
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
it_behaves_like :initializer, "including Dry::Initializer with lambda" do
|
53
|
+
before do
|
54
|
+
class Test::Foo
|
55
|
+
include Dry::Initializer.define -> do
|
56
|
+
param :foo
|
57
|
+
option :bar
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
it_behaves_like :initializer, "including Dry::Initializer[undefined: false]" do
|
64
|
+
before do
|
65
|
+
class Test::Foo
|
66
|
+
include Dry::Initializer[undefined: false].define {
|
67
|
+
param :foo
|
68
|
+
option :bar
|
69
|
+
}
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
it_behaves_like :initializer, "including Dry::Initializer::Mixin" do
|
75
|
+
before do
|
76
|
+
class Test::Foo
|
77
|
+
include Dry::Initializer::Mixin.define {
|
78
|
+
param :foo
|
79
|
+
option :bar
|
80
|
+
}
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
File without changes
|
data/spec/optional_spec.rb
CHANGED
@@ -29,6 +29,23 @@ describe "optional value" do
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
+
context "with undefined: false" do
|
33
|
+
before do
|
34
|
+
class Test::Foo
|
35
|
+
extend Dry::Initializer[undefined: false]
|
36
|
+
|
37
|
+
param :foo
|
38
|
+
param :bar, optional: true
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
it "sets undefined values to nil" do
|
43
|
+
subject = Test::Foo.new(1)
|
44
|
+
|
45
|
+
expect(subject.instance_variable_get(:@bar)).to be_nil
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
32
49
|
context "when has a default value" do
|
33
50
|
before do
|
34
51
|
class Test::Foo
|
@@ -9,13 +9,21 @@ describe "value coercion via dry-types" do
|
|
9
9
|
class Test::Foo
|
10
10
|
extend Dry::Initializer::Mixin
|
11
11
|
|
12
|
-
param
|
12
|
+
param :foo, type: Test::Types::Coercible::String
|
13
|
+
option :bar, proc(&:to_i), default: proc { "16" }
|
13
14
|
end
|
14
15
|
end
|
15
16
|
|
16
|
-
|
17
|
+
it "coerces assigned values" do
|
18
|
+
subject = Test::Foo.new :foo, bar: "13"
|
17
19
|
|
18
|
-
it "coerces values" do
|
19
20
|
expect(subject.foo).to eql "foo"
|
21
|
+
expect(subject.bar).to eql 13
|
22
|
+
end
|
23
|
+
|
24
|
+
it "coerces defaults as well" do
|
25
|
+
subject = Test::Foo.new :foo
|
26
|
+
|
27
|
+
expect(subject.bar).to eql 16
|
20
28
|
end
|
21
29
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dry-initializer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vladimir Kochnev (marshall-lee)
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-03-
|
12
|
+
date: 2017-03-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -102,17 +102,16 @@ files:
|
|
102
102
|
- lib/dry/initializer.rb
|
103
103
|
- lib/dry/initializer/attribute.rb
|
104
104
|
- lib/dry/initializer/builder.rb
|
105
|
+
- lib/dry/initializer/dsl.rb
|
105
106
|
- lib/dry/initializer/exceptions/default_value_error.rb
|
106
107
|
- lib/dry/initializer/exceptions/params_order_error.rb
|
107
108
|
- lib/dry/initializer/exceptions/type_constraint_error.rb
|
108
109
|
- lib/dry/initializer/option.rb
|
109
110
|
- lib/dry/initializer/param.rb
|
110
|
-
- spec/base_spec.rb
|
111
|
-
- spec/container_spec.rb
|
112
111
|
- spec/custom_initializer_spec.rb
|
113
|
-
- spec/default_nil_spec.rb
|
114
112
|
- spec/default_values_spec.rb
|
115
|
-
- spec/
|
113
|
+
- spec/definition_spec.rb
|
114
|
+
- spec/gem_enhancement_spec.rb
|
116
115
|
- spec/invalid_default_spec.rb
|
117
116
|
- spec/missed_default_spec.rb
|
118
117
|
- spec/optional_spec.rb
|
@@ -151,12 +150,10 @@ signing_key:
|
|
151
150
|
specification_version: 4
|
152
151
|
summary: DSL for declaring params and options of the initializer
|
153
152
|
test_files:
|
154
|
-
- spec/base_spec.rb
|
155
|
-
- spec/container_spec.rb
|
156
153
|
- spec/custom_initializer_spec.rb
|
157
|
-
- spec/default_nil_spec.rb
|
158
154
|
- spec/default_values_spec.rb
|
159
|
-
- spec/
|
155
|
+
- spec/definition_spec.rb
|
156
|
+
- spec/gem_enhancement_spec.rb
|
160
157
|
- spec/invalid_default_spec.rb
|
161
158
|
- spec/missed_default_spec.rb
|
162
159
|
- spec/optional_spec.rb
|
data/spec/base_spec.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
describe "base example" do
|
2
|
-
before do
|
3
|
-
class Test::Foo
|
4
|
-
extend Dry::Initializer::Mixin
|
5
|
-
|
6
|
-
param :foo
|
7
|
-
param :bar
|
8
|
-
option :baz
|
9
|
-
option :qux
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
it "instantiates attributes" do
|
14
|
-
subject = Test::Foo.new(1, 2, baz: 3, qux: 4)
|
15
|
-
|
16
|
-
expect(subject.foo).to eql 1
|
17
|
-
expect(subject.bar).to eql 2
|
18
|
-
expect(subject.baz).to eql 3
|
19
|
-
expect(subject.qux).to eql 4
|
20
|
-
end
|
21
|
-
end
|
data/spec/container_spec.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
describe "container" do
|
2
|
-
context "with block syntax" do
|
3
|
-
before do
|
4
|
-
class Test::Foo
|
5
|
-
include Dry::Initializer.define {
|
6
|
-
param :foo
|
7
|
-
param :bar
|
8
|
-
option :baz
|
9
|
-
option :qux
|
10
|
-
}
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
it "instantiates attributes" do
|
15
|
-
subject = Test::Foo.new(1, 2, baz: 3, qux: 4)
|
16
|
-
|
17
|
-
expect(subject.foo).to eql 1
|
18
|
-
expect(subject.bar).to eql 2
|
19
|
-
expect(subject.baz).to eql 3
|
20
|
-
expect(subject.qux).to eql 4
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
context "with lambda syntax" do
|
25
|
-
before do
|
26
|
-
class Test::Foo
|
27
|
-
include Dry::Initializer.define -> do
|
28
|
-
param :foo
|
29
|
-
param :bar
|
30
|
-
option :baz
|
31
|
-
option :qux
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
it "instantiates attributes" do
|
37
|
-
subject = Test::Foo.new(1, 2, baz: 3, qux: 4)
|
38
|
-
|
39
|
-
expect(subject.foo).to eql 1
|
40
|
-
expect(subject.bar).to eql 2
|
41
|
-
expect(subject.baz).to eql 3
|
42
|
-
expect(subject.qux).to eql 4
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
data/spec/default_nil_spec.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
describe "default nil" do
|
2
|
-
before do
|
3
|
-
class Test::Foo
|
4
|
-
extend Dry::Initializer::Mixin
|
5
|
-
|
6
|
-
param :foo, default: proc { nil }
|
7
|
-
param :bar, default: -> { nil }
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
it "is assigned" do
|
12
|
-
subject = Test::Foo.new(1)
|
13
|
-
|
14
|
-
expect(subject.foo).to eql 1
|
15
|
-
expect(subject.bar).to be_nil
|
16
|
-
end
|
17
|
-
end
|