dry-initializer 0.6.0 → 0.7.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/mixin.rb +13 -0
- data/lib/dry/initializer/scope.rb +31 -0
- data/spec/dry/shared_definitions_spec.rb +22 -0
- data/spec/dry/type_constraint_spec.rb +9 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0de7dd513351b39d831351662ec6268ebf1920a9
|
4
|
+
data.tar.gz: 1435433ffc6eabba75f481e302ea4b7dcc47d37b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ed882e91dfeed3a4dcc8ade69792beca84334d9850e700de67462cead64434fdfeed5039d188b42799b204d1cb871394e0c9c0e8a7c26ba5d02d6a2c72c08d3
|
7
|
+
data.tar.gz: a477d334fd746c41d09bfc49bdde5af80f4aa22176996518092853bf3a660f3fa4f77f30a84f495d04f54f1592b95d077a3f17473dbd759bf7e310c9ef0396bd
|
data/CHANGELOG.md
CHANGED
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.7.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,3 +1,5 @@
|
|
1
|
+
require_relative "scope"
|
2
|
+
|
1
3
|
module Dry::Initializer
|
2
4
|
# Class-level DSL for the initializer
|
3
5
|
module Mixin
|
@@ -29,6 +31,17 @@ module Dry::Initializer
|
|
29
31
|
initializer_builder.call(self)
|
30
32
|
end
|
31
33
|
|
34
|
+
# Declares arguments (params and options) with default settings
|
35
|
+
#
|
36
|
+
# @param [Hash] settings Shared settings
|
37
|
+
# @param [Proc] block Definitions for params and options
|
38
|
+
# @return [self]
|
39
|
+
#
|
40
|
+
def using(**settings, &block)
|
41
|
+
Scope.new(self, settings).instance_eval(&block)
|
42
|
+
self
|
43
|
+
end
|
44
|
+
|
32
45
|
# Adds new plugin to the builder
|
33
46
|
#
|
34
47
|
# @param [Dry::Initializer::Plugins::Base] plugin
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Dry::Initializer
|
2
|
+
# Shared scope for several params and options
|
3
|
+
class Scope
|
4
|
+
# Defines param with shared settings
|
5
|
+
#
|
6
|
+
# @param (see Dry::Initializer::Mixin#param)
|
7
|
+
# @option (see Dry::Initializer::Mixin#param)
|
8
|
+
# @return (see Dry::Initializer::Mixin#param)
|
9
|
+
#
|
10
|
+
def param(name, **options)
|
11
|
+
@klass.param name, @options.merge(options)
|
12
|
+
end
|
13
|
+
|
14
|
+
# Defines option with shared settings
|
15
|
+
#
|
16
|
+
# @param (see Dry::Initializer::Mixin#option)
|
17
|
+
# @option (see Dry::Initializer::Mixin#option)
|
18
|
+
# @return (see Dry::Initializer::Mixin#option)
|
19
|
+
#
|
20
|
+
def option(name, **options)
|
21
|
+
@klass.option name, @options.merge(options)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def initialize(klass, **options)
|
27
|
+
@klass = klass
|
28
|
+
@options = options
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
describe "shared definition" do
|
2
|
+
subject do
|
3
|
+
class Test::Foo
|
4
|
+
extend Dry::Initializer::Mixin
|
5
|
+
|
6
|
+
using default: proc { nil } do
|
7
|
+
param :foo
|
8
|
+
option :bar
|
9
|
+
option :baz, default: proc { 0 }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
it "is applied to params and options" do
|
15
|
+
expect(subject.new.foo).to be_nil
|
16
|
+
expect(subject.new.bar).to be_nil
|
17
|
+
end
|
18
|
+
|
19
|
+
it "can be reloaded" do
|
20
|
+
expect(subject.new.baz).to eq 0
|
21
|
+
end
|
22
|
+
end
|
@@ -9,7 +9,7 @@ describe "type constraint" do
|
|
9
9
|
|
10
10
|
class Test::Foo
|
11
11
|
extend Dry::Initializer::Mixin
|
12
|
-
param :foo, type: Test::Types::Strict::String
|
12
|
+
param :foo, type: Test::Types::Strict::String, optional: true
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
@@ -28,6 +28,14 @@ describe "type constraint" do
|
|
28
28
|
expect { subject }.not_to raise_error
|
29
29
|
end
|
30
30
|
end
|
31
|
+
|
32
|
+
context "if optional value not set" do
|
33
|
+
subject { Test::Foo.new }
|
34
|
+
|
35
|
+
it "completes the initialization" do
|
36
|
+
expect { subject }.not_to raise_error
|
37
|
+
end
|
38
|
+
end
|
31
39
|
end
|
32
40
|
|
33
41
|
context "by invalid constraint" do
|
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.7.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: 2016-10-
|
12
|
+
date: 2016-10-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -119,6 +119,7 @@ files:
|
|
119
119
|
- lib/dry/initializer/plugins/signature.rb
|
120
120
|
- lib/dry/initializer/plugins/type_constraint.rb
|
121
121
|
- lib/dry/initializer/plugins/variable_setter.rb
|
122
|
+
- lib/dry/initializer/scope.rb
|
122
123
|
- lib/dry/initializer/signature.rb
|
123
124
|
- spec/dry/base_spec.rb
|
124
125
|
- spec/dry/container_spec.rb
|
@@ -131,6 +132,7 @@ files:
|
|
131
132
|
- spec/dry/plugin_registry_spec.rb
|
132
133
|
- spec/dry/reader_spec.rb
|
133
134
|
- spec/dry/repetitive_definitions_spec.rb
|
135
|
+
- spec/dry/shared_definitions_spec.rb
|
134
136
|
- spec/dry/subclassing_spec.rb
|
135
137
|
- spec/dry/type_constraint_spec.rb
|
136
138
|
- spec/dry/value_coercion_via_dry_types_spec.rb
|
@@ -171,6 +173,7 @@ test_files:
|
|
171
173
|
- spec/dry/plugin_registry_spec.rb
|
172
174
|
- spec/dry/reader_spec.rb
|
173
175
|
- spec/dry/repetitive_definitions_spec.rb
|
176
|
+
- spec/dry/shared_definitions_spec.rb
|
174
177
|
- spec/dry/subclassing_spec.rb
|
175
178
|
- spec/dry/type_constraint_spec.rb
|
176
179
|
- spec/dry/value_coercion_via_dry_types_spec.rb
|