dry-initializer 2.3.0 → 2.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 +17 -0
- data/dry-initializer.gemspec +1 -1
- data/lib/dry/initializer.rb +3 -2
- data/lib/dry/initializer/config.rb +1 -1
- data/lib/dry/initializer/dispatchers.rb +44 -0
- data/spec/custom_dispatchers_spec.rb +35 -0
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 41bfe9bf29562e8ff2f907653002f1d1bae2e7bf
|
4
|
+
data.tar.gz: de76e955208183a7e617367e553cfb97bfbfbf75
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c86812a57b0471dcee12d5ef97495036b350317eb8fea8044a2e85bfd21b68aa5f6f627b6bce7f882533c8fdc3137d52640493e966c195bbcd03d53e8861697a
|
7
|
+
data.tar.gz: 726234048ec21a22da06de940bd25e3aae5ef0244b4489b238d856ba8a7992dab57af385fadf0a3f2553817257cf71cf56ed62ef688764507d54e66afd304e3b
|
data/CHANGELOG.md
CHANGED
@@ -5,6 +5,22 @@ 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
|
+
## [2.4.0] [2018-02-01]
|
9
|
+
|
10
|
+
### Added
|
11
|
+
- Dispatchers for adding syntax sugar to `param` and `options` (nepalez)
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
# Converts `integer: true` to `type: proc(&:to_i)`
|
15
|
+
dispatcher = ->(op) { op[:integer] ? op.merge(type: proc(&:to_i)) : op }
|
16
|
+
# Register a dispatcher
|
17
|
+
Dry::Initializer::Dispatchers << dispatcher
|
18
|
+
# Use syntax sugar
|
19
|
+
class User
|
20
|
+
param :id, integer: true # same as param :id, proc(&:to_i)
|
21
|
+
end
|
22
|
+
```
|
23
|
+
|
8
24
|
## [2.3.0] [2017-09-19]
|
9
25
|
|
10
26
|
### Added
|
@@ -741,3 +757,4 @@ First public release
|
|
741
757
|
[2.1.0]: https://github.com/dry-rb/dry-initializer/compare/v2.0.0...v2.1.0
|
742
758
|
[2.2.0]: https://github.com/dry-rb/dry-initializer/compare/v2.1.0...v2.2.0
|
743
759
|
[2.3.0]: https://github.com/dry-rb/dry-initializer/compare/v2.2.0...v2.3.0
|
760
|
+
[2.4.0]: https://github.com/dry-rb/dry-initializer/compare/v2.3.0...v2.4.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 = "2.
|
3
|
+
gem.version = "2.4.0"
|
4
4
|
gem.author = ["Vladimir Kochnev (marshall-lee)", "Andrew Kozin (nepalez)"]
|
5
5
|
gem.email = "andrew.kozin@gmail.com"
|
6
6
|
gem.homepage = "https://github.com/dryrb/dry-initializer"
|
data/lib/dry/initializer.rb
CHANGED
@@ -14,6 +14,7 @@ module Dry
|
|
14
14
|
require_relative "initializer/builders"
|
15
15
|
require_relative "initializer/config"
|
16
16
|
require_relative "initializer/mixin"
|
17
|
+
require_relative "initializer/dispatchers"
|
17
18
|
|
18
19
|
# Adds methods [.[]] and [.define]
|
19
20
|
extend DSL
|
@@ -34,7 +35,7 @@ module Dry
|
|
34
35
|
# @option opts [true, false, :protected, :public, :private] :reader
|
35
36
|
# @return [self] itself
|
36
37
|
def param(name, type = nil, **opts)
|
37
|
-
dry_initializer.param(name, type, opts)
|
38
|
+
dry_initializer.param(name, type, Dispatchers[opts])
|
38
39
|
self
|
39
40
|
end
|
40
41
|
|
@@ -43,7 +44,7 @@ module Dry
|
|
43
44
|
# @option (see #param)
|
44
45
|
# @return (see #param)
|
45
46
|
def option(name, type = nil, **opts)
|
46
|
-
dry_initializer.option(name, type, opts)
|
47
|
+
dry_initializer.option(name, type, Dispatchers[opts])
|
47
48
|
self
|
48
49
|
end
|
49
50
|
|
@@ -135,7 +135,7 @@ module Dry::Initializer
|
|
135
135
|
end
|
136
136
|
|
137
137
|
def add_definition(option, name, type, opts)
|
138
|
-
definition = Definition.new(option, null, name, type, opts)
|
138
|
+
definition = Definition.new(option, null, name, type, Dispatchers[opts])
|
139
139
|
definitions[definition.source] = definition
|
140
140
|
finalize
|
141
141
|
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Dry::Initializer
|
2
|
+
#
|
3
|
+
# @private
|
4
|
+
#
|
5
|
+
# Dispatchers allow adding syntax sugar to `.param` and `.option` methods.
|
6
|
+
#
|
7
|
+
# Every dispatcher should convert the source hash of options into
|
8
|
+
# the resulting hash so that you can send additional keys to the helpers.
|
9
|
+
#
|
10
|
+
# @example Add special dispatcher
|
11
|
+
#
|
12
|
+
# # Define a dispatcher for key :integer
|
13
|
+
# dispatcher = proc do |opts|
|
14
|
+
# opts.merge(type: proc(&:to_i)) if opts[:integer]
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# # Register a dispatcher
|
18
|
+
# Dry::Initializer::Dispatchers << dispatcher
|
19
|
+
#
|
20
|
+
# # Now you can use option `integer: true` instead of `type: proc(&:to_i)`
|
21
|
+
# class Foo
|
22
|
+
# extend Dry::Initializer
|
23
|
+
# param :id, integer: true
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
module Dispatchers
|
27
|
+
class << self
|
28
|
+
def <<(item)
|
29
|
+
list << item
|
30
|
+
self
|
31
|
+
end
|
32
|
+
|
33
|
+
def [](options)
|
34
|
+
list.inject(options) { |opts, item| item.call(opts) }
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def list
|
40
|
+
@list ||= []
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
describe "custom dispatchers" do
|
2
|
+
subject { Test::Foo.new "123" }
|
3
|
+
|
4
|
+
before do
|
5
|
+
dispatcher = ->(op) { op[:integer] ? op.merge(type: proc(&:to_i)) : op }
|
6
|
+
Dry::Initializer::Dispatchers << dispatcher
|
7
|
+
end
|
8
|
+
|
9
|
+
context "with extend syntax" do
|
10
|
+
before do
|
11
|
+
class Test::Foo
|
12
|
+
extend Dry::Initializer
|
13
|
+
param :id, integer: true
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
it "adds syntax sugar" do
|
18
|
+
expect(subject.id).to eq 123
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context "with include syntax" do
|
23
|
+
before do
|
24
|
+
class Test::Foo
|
25
|
+
include Dry::Initializer.define -> do
|
26
|
+
param :id, integer: true
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
it "adds syntax sugar" do
|
32
|
+
expect(subject.id).to eq 123
|
33
|
+
end
|
34
|
+
end
|
35
|
+
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: 2.
|
4
|
+
version: 2.4.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:
|
12
|
+
date: 2018-02-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -102,6 +102,7 @@ files:
|
|
102
102
|
- lib/dry/initializer/builders/signature.rb
|
103
103
|
- lib/dry/initializer/config.rb
|
104
104
|
- lib/dry/initializer/definition.rb
|
105
|
+
- lib/dry/initializer/dispatchers.rb
|
105
106
|
- lib/dry/initializer/dsl.rb
|
106
107
|
- lib/dry/initializer/mixin.rb
|
107
108
|
- lib/dry/initializer/mixin/local.rb
|
@@ -109,6 +110,7 @@ files:
|
|
109
110
|
- lib/tasks/benchmark.rake
|
110
111
|
- lib/tasks/profile.rake
|
111
112
|
- spec/attributes_spec.rb
|
113
|
+
- spec/custom_dispatchers_spec.rb
|
112
114
|
- spec/custom_initializer_spec.rb
|
113
115
|
- spec/default_values_spec.rb
|
114
116
|
- spec/definition_spec.rb
|
@@ -145,12 +147,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
147
|
version: '0'
|
146
148
|
requirements: []
|
147
149
|
rubyforge_project:
|
148
|
-
rubygems_version: 2.6.
|
150
|
+
rubygems_version: 2.6.14
|
149
151
|
signing_key:
|
150
152
|
specification_version: 4
|
151
153
|
summary: DSL for declaring params and options of the initializer
|
152
154
|
test_files:
|
153
155
|
- spec/attributes_spec.rb
|
156
|
+
- spec/custom_dispatchers_spec.rb
|
154
157
|
- spec/custom_initializer_spec.rb
|
155
158
|
- spec/default_values_spec.rb
|
156
159
|
- spec/definition_spec.rb
|
@@ -167,4 +170,3 @@ test_files:
|
|
167
170
|
- spec/type_argument_spec.rb
|
168
171
|
- spec/type_constraint_spec.rb
|
169
172
|
- spec/value_coercion_via_dry_types_spec.rb
|
170
|
-
has_rdoc:
|