dry-initializer 0.3.3 → 0.4.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 +8 -0
- data/dry-initializer.gemspec +1 -1
- data/lib/dry/initializer/errors.rb +0 -1
- data/lib/dry/initializer/errors/type_constraint_error.rb +1 -2
- data/lib/dry/initializer/plugins/type_constraint.rb +3 -48
- data/spec/dry/type_constraint_spec.rb +43 -0
- metadata +3 -8
- data/lib/dry/initializer/errors/type_error.rb +0 -6
- data/spec/dry/dry_type_constraint_spec.rb +0 -30
- data/spec/dry/object_type_constraint_spec.rb +0 -25
- data/spec/dry/plain_type_constraint_spec.rb +0 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7db8f3d16f5e690b2184d79d06d2417e2dab2810
|
4
|
+
data.tar.gz: 03a361fa17734d5d37d8da5f647e975e36ee8d1f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f879fb0ae4169c9a402df913d7b00f4c38e9349ca7d200c43687f5c28970e81466c3152a19b61249299451213b93ee9ce971b949d3eb0f163ebce6c55304bf3b
|
7
|
+
data.tar.gz: cc7a1b201b934f10c1d09a09f2b22820361135c4da201c4778828836b55dd7633e0b8db8e9673071e3344a56c73498ab036f787dec8be57bd57169c07872532b
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## v0.4.0 2016-05-28
|
2
|
+
|
3
|
+
### Deleted (backward-incompatible changes)
|
4
|
+
|
5
|
+
* Support of modules and case equality as type constraints (@nepalez)
|
6
|
+
|
7
|
+
[Compare v0.3.3...v0.4.0](https://github.com/dry-rb/dry-initializer/compare/v0.3.3..v0.4.0)
|
8
|
+
|
1
9
|
## v0.3.3 2016-05-28
|
2
10
|
|
3
11
|
* Add deprecation warnings about modules and case equality as type constraints (@nepalez)
|
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 = "0.
|
3
|
+
gem.version = "0.4.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"
|
@@ -1,6 +1,5 @@
|
|
1
1
|
class Dry::Initializer::Errors::TypeConstraintError < TypeError
|
2
2
|
def initialize(name, type)
|
3
|
-
super "#{type}
|
4
|
-
" Use either plain Ruby module/class, or dry-type."
|
3
|
+
super "#{type} used as constraint for argument '#{name}' is not a dry-type."
|
5
4
|
end
|
6
5
|
end
|
@@ -4,60 +4,15 @@ module Dry::Initializer::Plugins
|
|
4
4
|
class TypeConstraint < Base
|
5
5
|
def call
|
6
6
|
return unless settings.key? :type
|
7
|
-
dry_type_constraint || module_type_constraint || object_type_constraint
|
8
|
-
end
|
9
|
-
|
10
|
-
private
|
11
|
-
|
12
|
-
def type
|
13
|
-
@type ||= settings[:type]
|
14
|
-
end
|
15
|
-
|
16
|
-
def dry_type?
|
17
|
-
type.respond_to? :call
|
18
|
-
end
|
19
|
-
|
20
|
-
def plain_type?
|
21
|
-
Module === type
|
22
|
-
end
|
23
|
-
|
24
|
-
def module_type_constraint
|
25
|
-
return unless plain_type?
|
26
|
-
|
27
|
-
warn "[DEPRECATION] support for ruby modules as type constraint" \
|
28
|
-
" is deprecated. Use dry-types instead."
|
29
|
-
|
30
|
-
"fail #{TypeError}.new(:#{name}, #{type}, @#{name})" \
|
31
|
-
" unless @#{name} == Dry::Initializer::UNDEFINED ||" \
|
32
|
-
" #{type} === @#{name}"
|
33
|
-
end
|
34
7
|
|
35
|
-
|
36
|
-
|
8
|
+
type = settings[:type]
|
9
|
+
fail TypeConstraintError.new(name, type) unless type.respond_to? :call
|
37
10
|
|
38
11
|
ivar = :"@#{name}"
|
39
|
-
constraint = type
|
40
|
-
|
41
|
-
lambda do |*|
|
42
|
-
value = instance_variable_get(ivar)
|
43
|
-
return if value == Dry::Initializer::UNDEFINED
|
44
|
-
|
45
|
-
instance_variable_set ivar, constraint[value]
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def object_type_constraint
|
50
|
-
warn "[DEPRECATION] support for case equality (===) as type constraint" \
|
51
|
-
" is deprecated. Use dry-types instead."
|
52
|
-
|
53
|
-
ivar = :"@#{name}"
|
54
|
-
constraint = type
|
55
|
-
|
56
12
|
lambda do |*|
|
57
13
|
value = instance_variable_get(ivar)
|
58
14
|
return if value == Dry::Initializer::UNDEFINED
|
59
|
-
|
60
|
-
fail TypeError.new(ivar, constraint, value) unless constraint === value
|
15
|
+
instance_variable_set ivar, type.call(value)
|
61
16
|
end
|
62
17
|
end
|
63
18
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require "dry-types"
|
2
|
+
|
3
|
+
describe "type constraint" do
|
4
|
+
context "by dry-type" do
|
5
|
+
before do
|
6
|
+
module Test::Types
|
7
|
+
include Dry::Types.module
|
8
|
+
end
|
9
|
+
|
10
|
+
class Test::Foo
|
11
|
+
extend Dry::Initializer::Mixin
|
12
|
+
param :foo, type: Test::Types::Strict::String
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context "in case of mismatch" do
|
17
|
+
subject { Test::Foo.new 1 }
|
18
|
+
|
19
|
+
it "raises TypeError" do
|
20
|
+
expect { subject }.to raise_error TypeError, /1/
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "in case of match" do
|
25
|
+
subject { Test::Foo.new "foo" }
|
26
|
+
|
27
|
+
it "completes the initialization" do
|
28
|
+
expect { subject }.not_to raise_error
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context "by invalid constraint" do
|
34
|
+
it "raises TypeError" do
|
35
|
+
expect {
|
36
|
+
class Test::Foo
|
37
|
+
extend Dry::Initializer::Mixin
|
38
|
+
param :foo, type: String
|
39
|
+
end
|
40
|
+
}.to raise_error(TypeError)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
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: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vladimir Kochnev (marshall-lee)
|
@@ -98,7 +98,6 @@ files:
|
|
98
98
|
- lib/dry/initializer/errors/plugin_error.rb
|
99
99
|
- lib/dry/initializer/errors/redefinition_error.rb
|
100
100
|
- lib/dry/initializer/errors/type_constraint_error.rb
|
101
|
-
- lib/dry/initializer/errors/type_error.rb
|
102
101
|
- lib/dry/initializer/mixin.rb
|
103
102
|
- lib/dry/initializer/plugins.rb
|
104
103
|
- lib/dry/initializer/plugins/base.rb
|
@@ -111,16 +110,14 @@ files:
|
|
111
110
|
- spec/dry/container_spec.rb
|
112
111
|
- spec/dry/default_nil_spec.rb
|
113
112
|
- spec/dry/default_values_spec.rb
|
114
|
-
- spec/dry/dry_type_constraint_spec.rb
|
115
113
|
- spec/dry/invalid_default_spec.rb
|
116
114
|
- spec/dry/missed_default_spec.rb
|
117
|
-
- spec/dry/object_type_constraint_spec.rb
|
118
115
|
- spec/dry/options_tolerance_spec.rb
|
119
|
-
- spec/dry/plain_type_constraint_spec.rb
|
120
116
|
- spec/dry/plugin_registry_spec.rb
|
121
117
|
- spec/dry/reader_spec.rb
|
122
118
|
- spec/dry/repetitive_definitions_spec.rb
|
123
119
|
- spec/dry/subclassing_spec.rb
|
120
|
+
- spec/dry/type_constraint_spec.rb
|
124
121
|
- spec/dry/value_coercion_via_dry_types_spec.rb
|
125
122
|
- spec/spec_helper.rb
|
126
123
|
homepage: https://github.com/dryrb/dry-initializer
|
@@ -152,16 +149,14 @@ test_files:
|
|
152
149
|
- spec/dry/container_spec.rb
|
153
150
|
- spec/dry/default_nil_spec.rb
|
154
151
|
- spec/dry/default_values_spec.rb
|
155
|
-
- spec/dry/dry_type_constraint_spec.rb
|
156
152
|
- spec/dry/invalid_default_spec.rb
|
157
153
|
- spec/dry/missed_default_spec.rb
|
158
|
-
- spec/dry/object_type_constraint_spec.rb
|
159
154
|
- spec/dry/options_tolerance_spec.rb
|
160
|
-
- spec/dry/plain_type_constraint_spec.rb
|
161
155
|
- spec/dry/plugin_registry_spec.rb
|
162
156
|
- spec/dry/reader_spec.rb
|
163
157
|
- spec/dry/repetitive_definitions_spec.rb
|
164
158
|
- spec/dry/subclassing_spec.rb
|
159
|
+
- spec/dry/type_constraint_spec.rb
|
165
160
|
- spec/dry/value_coercion_via_dry_types_spec.rb
|
166
161
|
- spec/spec_helper.rb
|
167
162
|
has_rdoc:
|
@@ -1,30 +0,0 @@
|
|
1
|
-
require "dry-types"
|
2
|
-
|
3
|
-
describe "Dry type constraint" do
|
4
|
-
before do
|
5
|
-
module Test::Types
|
6
|
-
include Dry::Types.module
|
7
|
-
end
|
8
|
-
|
9
|
-
class Test::Foo
|
10
|
-
extend Dry::Initializer::Mixin
|
11
|
-
param :foo, type: Test::Types::Strict::String
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
context "in case of mismatch" do
|
16
|
-
subject { Test::Foo.new 1 }
|
17
|
-
|
18
|
-
it "raises TypeError" do
|
19
|
-
expect { subject }.to raise_error TypeError, /1/
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
context "in case of match" do
|
24
|
-
subject { Test::Foo.new "foo" }
|
25
|
-
|
26
|
-
it "completes the initialization" do
|
27
|
-
expect { subject }.not_to raise_error
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
describe "object type constraint" do
|
2
|
-
before do
|
3
|
-
class Test::Foo
|
4
|
-
extend Dry::Initializer::Mixin
|
5
|
-
|
6
|
-
param :foo, type: /bar/
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
context "in case of mismatch" do
|
11
|
-
subject { Test::Foo.new "baz" }
|
12
|
-
|
13
|
-
it "raises TypeError" do
|
14
|
-
expect { subject }.to raise_error TypeError
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
context "in case of match" do
|
19
|
-
subject { Test::Foo.new "barbar" }
|
20
|
-
|
21
|
-
it "completes the initialization" do
|
22
|
-
expect { subject }.not_to raise_error
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
describe "plain type constraint" do
|
2
|
-
before do
|
3
|
-
class Test::Foo
|
4
|
-
extend Dry::Initializer::Mixin
|
5
|
-
|
6
|
-
param :foo, type: String
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
context "in case of mismatch" do
|
11
|
-
subject { Test::Foo.new :foo }
|
12
|
-
|
13
|
-
it "raises TypeError" do
|
14
|
-
expect { subject }.to raise_error TypeError, /:foo/
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
context "in case of match" do
|
19
|
-
subject { Test::Foo.new "foo" }
|
20
|
-
|
21
|
-
it "completes the initialization" do
|
22
|
-
expect { subject }.not_to raise_error
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
context "in case of soft match" do
|
27
|
-
subject { Test::Foo.new Class.new(String).new "foo" }
|
28
|
-
|
29
|
-
it "completes the initialization" do
|
30
|
-
expect { subject }.not_to raise_error
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|