dry-mutations 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +9 -8
- data/README.md +3 -0
- data/dry-mutations.gemspec +1 -1
- data/lib/dry/mutations/extensions/command.rb +7 -6
- data/lib/dry/mutations/transactions/container.rb +2 -0
- data/lib/dry/mutations/transactions/dsl.rb +18 -10
- data/lib/dry/mutations/transactions/step_adapters.rb +1 -1
- data/lib/dry/mutations/transactions/step_adapters/chain.rb +22 -0
- data/lib/dry/mutations/utils/dry-mutations.rb +3 -0
- data/lib/dry/mutations/version.rb +1 -1
- metadata +8 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 25dba4781a90bcb4441444f72940618ee5cfedac
|
4
|
+
data.tar.gz: 44ee6fb881a76e12e503933602d696b1169a3527
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cbb1fce1ab811cc3bfa2384569f1a2d9e245f15bedc29571a8757640a9d81befd360506f2f49a1544caedda3ef8baaa4e0d1dc75edbd7750f98ffa57a22f6369
|
7
|
+
data.tar.gz: a141667b23e85eb60549dd6623ca7d80918979e5ddb67fbf7752fbb844eacf81d1c61856ab1bf56e5e35778cb50bfd7afe86c27489f1847e00da3c519552dd6c
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
dry-mutations (1.
|
4
|
+
dry-mutations (1.1.0)
|
5
5
|
activesupport (>= 3.2, < 5)
|
6
|
-
dry-transaction (~> 0.9)
|
6
|
+
dry-transaction (~> 0.9, < 0.10)
|
7
7
|
dry-validation (~> 0.10)
|
8
8
|
hashie (~> 3)
|
9
9
|
mutations (~> 0.8)
|
@@ -32,12 +32,12 @@ GEM
|
|
32
32
|
concurrent-ruby (1.0.5)
|
33
33
|
diff-lcs (1.2.5)
|
34
34
|
docile (1.1.5)
|
35
|
-
dry-configurable (0.
|
35
|
+
dry-configurable (0.7.0)
|
36
36
|
concurrent-ruby (~> 1.0)
|
37
37
|
dry-container (0.6.0)
|
38
38
|
concurrent-ruby (~> 1.0)
|
39
39
|
dry-configurable (~> 0.1, >= 0.1.3)
|
40
|
-
dry-core (0.
|
40
|
+
dry-core (0.3.1)
|
41
41
|
concurrent-ruby (~> 1.0)
|
42
42
|
dry-equalizer (0.2.0)
|
43
43
|
dry-logic (0.4.1)
|
@@ -45,14 +45,15 @@ GEM
|
|
45
45
|
dry-core (~> 0.2)
|
46
46
|
dry-equalizer (~> 0.2)
|
47
47
|
dry-matcher (0.6.0)
|
48
|
-
dry-monads (0.
|
48
|
+
dry-monads (0.3.1)
|
49
|
+
dry-core
|
49
50
|
dry-equalizer
|
50
51
|
dry-transaction (0.9.0)
|
51
52
|
dry-container (>= 0.2.8)
|
52
53
|
dry-matcher (>= 0.5.0)
|
53
54
|
dry-monads (>= 0.0.1)
|
54
55
|
wisper (>= 1.6.0)
|
55
|
-
dry-types (0.
|
56
|
+
dry-types (0.10.3)
|
56
57
|
concurrent-ruby (~> 1.0)
|
57
58
|
dry-configurable (~> 0.1)
|
58
59
|
dry-container (~> 0.3)
|
@@ -60,7 +61,7 @@ GEM
|
|
60
61
|
dry-equalizer (~> 0.2)
|
61
62
|
dry-logic (~> 0.4, >= 0.4.0)
|
62
63
|
inflecto (~> 0.0.0, >= 0.0.2)
|
63
|
-
dry-validation (0.10.
|
64
|
+
dry-validation (0.10.7)
|
64
65
|
concurrent-ruby (~> 1.0)
|
65
66
|
dry-configurable (~> 0.1, >= 0.1.3)
|
66
67
|
dry-core (~> 0.2, >= 0.2.1)
|
@@ -103,7 +104,7 @@ GEM
|
|
103
104
|
thread_safe (0.3.6)
|
104
105
|
tzinfo (1.2.3)
|
105
106
|
thread_safe (~> 0.1)
|
106
|
-
wisper (
|
107
|
+
wisper (2.0.0)
|
107
108
|
|
108
109
|
PLATFORMS
|
109
110
|
ruby
|
data/README.md
CHANGED
data/dry-mutations.gemspec
CHANGED
@@ -35,11 +35,11 @@ module Dry
|
|
35
35
|
attr_reader :validation
|
36
36
|
|
37
37
|
def initialize(*args)
|
38
|
-
@raw_inputs = defaults.merge
|
39
|
-
|
38
|
+
@raw_inputs = defaults.merge(Utils.RawInputs(*args))
|
40
39
|
@validation_result = discard_empty!
|
40
|
+
@inputs = Utils.Hash @validation_result.output
|
41
41
|
|
42
|
-
|
42
|
+
fix_accessors!
|
43
43
|
|
44
44
|
# dry: {:name=>["size cannot be greater than 10"],
|
45
45
|
# :properties=>{:first_arg=>["must be a string", "is in invalid format"]},
|
@@ -99,6 +99,7 @@ module Dry
|
|
99
99
|
super
|
100
100
|
rescue => e
|
101
101
|
add_error(:♻, :runtime_exception, e.message)
|
102
|
+
raise e
|
102
103
|
end
|
103
104
|
|
104
105
|
def add_error(key, kind, message = nil, dry_message = nil)
|
@@ -110,7 +111,7 @@ module Dry
|
|
110
111
|
# path=[:maturity_set, :maturity_days_set, :days],
|
111
112
|
# text=\"must be an integer\",
|
112
113
|
# options={:args=>[], :rule=>:days, :each=>false}>"
|
113
|
-
dry_message ||= ::Dry::Validation::Message.new(kind,
|
114
|
+
dry_message ||= ::Dry::Validation::Message.new(kind, key, message, rule: :♻)
|
114
115
|
atom = Errors::ErrorAtom.new(key, kind, dry_message, message: message)
|
115
116
|
|
116
117
|
last = path.pop
|
@@ -169,8 +170,8 @@ module Dry
|
|
169
170
|
)
|
170
171
|
end
|
171
172
|
|
172
|
-
def fix_accessors
|
173
|
-
|
173
|
+
def fix_accessors!
|
174
|
+
schema.rules.keys.each do |method|
|
174
175
|
next if respond_to?(name = method)
|
175
176
|
|
176
177
|
singleton_class.tap do |c|
|
@@ -1,12 +1,14 @@
|
|
1
1
|
module Dry
|
2
2
|
module Mutations
|
3
3
|
module Transactions # :nodoc:
|
4
|
+
# rubocop:disable Style/MultilineTernaryOperator
|
4
5
|
Container = lambda do |whatever|
|
5
6
|
return ->(*input) { input } unless whatever
|
6
7
|
whatever.respond_to?(:call) ? whatever : Utils.Constant(whatever).tap do |p|
|
7
8
|
fail ArgumentError, "The argument must respond to :call, though #{whatever.inspect} passed." unless p.respond_to? :call
|
8
9
|
end
|
9
10
|
end
|
11
|
+
# rubocop:enable Style/MultilineTernaryOperator
|
10
12
|
end
|
11
13
|
end
|
12
14
|
end
|
@@ -7,39 +7,47 @@ module Dry
|
|
7
7
|
# step :validate
|
8
8
|
# step :persist
|
9
9
|
# end
|
10
|
+
|
10
11
|
module DSL # :nodoc:
|
11
12
|
include Dry::Monads::Either::Mixin
|
12
13
|
|
14
|
+
# rubocop:disable Style/MultilineIfModifier
|
13
15
|
def self.extended base
|
14
16
|
fail Errors::TypeError.new("Extended class [#{base}] should not respond to :call, it is defined by this extension.") if base.respond_to?(:call)
|
15
|
-
base.send :define_method, :initialize do
|
16
|
-
@input = input
|
17
|
+
base.send :define_method, :initialize do |*input|
|
18
|
+
@input = Utils.RawInputs(*input)
|
17
19
|
end unless base.instance_methods(false).include?(:initialize)
|
18
|
-
%i(run run!).each do |meth|
|
20
|
+
%i(call run run!).each do |meth|
|
19
21
|
base.send :define_method, meth do
|
20
22
|
base.public_send(meth, @input)
|
21
23
|
end unless base.instance_methods(false).include?(meth)
|
22
24
|
end
|
23
25
|
end
|
26
|
+
# rubocop:enable Style/MultilineIfModifier
|
24
27
|
|
25
28
|
def chain **params
|
26
29
|
return enum_for(:chain) unless block_given? # FIXME: Needed? Works? Remove?
|
27
30
|
|
31
|
+
# rubocop:disable Style/VariableNumber
|
28
32
|
λ = Proc.new
|
29
33
|
|
30
|
-
@transaction = ::Dry.Transaction(
|
34
|
+
@transaction = ::Dry.Transaction(
|
35
|
+
container: ::Dry::Mutations::Transactions::Container,
|
36
|
+
step_adapters: StepAdapters
|
37
|
+
) do
|
31
38
|
instance_eval(&λ)
|
32
39
|
end.tap do |transaction|
|
33
|
-
singleton_class.send :define_method, :call do
|
34
|
-
transaction.(input)
|
40
|
+
singleton_class.send :define_method, :call do |*input|
|
41
|
+
transaction.(Utils.RawInputs(*input))
|
35
42
|
end
|
36
|
-
singleton_class.send :define_method, :run do
|
37
|
-
::Dry::Mutations::Extensions::Outcome(transaction.(input))
|
43
|
+
singleton_class.send :define_method, :run do |*input|
|
44
|
+
::Dry::Mutations::Extensions::Outcome(transaction.(Utils.RawInputs(*input)))
|
38
45
|
end
|
39
|
-
singleton_class.send :define_method, :run! do
|
40
|
-
::Dry::Mutations::Extensions::Outcome!(transaction.(input))
|
46
|
+
singleton_class.send :define_method, :run! do |*input|
|
47
|
+
::Dry::Mutations::Extensions::Outcome!(transaction.(Utils.RawInputs(*input)))
|
41
48
|
end
|
42
49
|
end
|
50
|
+
# rubocop:enable Style/VariableNumber
|
43
51
|
end
|
44
52
|
end
|
45
53
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Dry
|
2
|
+
module Mutations
|
3
|
+
module Transactions # :nodoc:
|
4
|
+
# http://dry-rb.org/gems/dry-transaction/custom-step-adapters/
|
5
|
+
# step adapters must provide a single `#call(step, *args, input)` method,
|
6
|
+
# which should return the step’s result wrapped in an `Either` object.
|
7
|
+
# This one is a wrapper for neted chains
|
8
|
+
class Chain < StepAdapters::Move
|
9
|
+
def call(step, *args, input)
|
10
|
+
if step.block
|
11
|
+
Class.new do
|
12
|
+
extend ::Dry::Mutations::Transactions::DSL
|
13
|
+
chain(&step.block)
|
14
|
+
end.(input, *args)
|
15
|
+
else
|
16
|
+
super
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dry-mutations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aleksei Matiushkin
|
@@ -183,6 +183,9 @@ dependencies:
|
|
183
183
|
- - "~>"
|
184
184
|
- !ruby/object:Gem::Version
|
185
185
|
version: '0.9'
|
186
|
+
- - "<"
|
187
|
+
- !ruby/object:Gem::Version
|
188
|
+
version: '0.10'
|
186
189
|
type: :runtime
|
187
190
|
prerelease: false
|
188
191
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -190,6 +193,9 @@ dependencies:
|
|
190
193
|
- - "~>"
|
191
194
|
- !ruby/object:Gem::Version
|
192
195
|
version: '0.9'
|
196
|
+
- - "<"
|
197
|
+
- !ruby/object:Gem::Version
|
198
|
+
version: '0.10'
|
193
199
|
description: |2
|
194
200
|
Mutations gem interface implemented with `dry-rb`’s validation schemas.
|
195
201
|
email:
|
@@ -240,6 +246,7 @@ files:
|
|
240
246
|
- lib/dry/mutations/transactions/container.rb
|
241
247
|
- lib/dry/mutations/transactions/dsl.rb
|
242
248
|
- lib/dry/mutations/transactions/step_adapters.rb
|
249
|
+
- lib/dry/mutations/transactions/step_adapters/chain.rb
|
243
250
|
- lib/dry/mutations/transactions/step_adapters/mutate.rb
|
244
251
|
- lib/dry/mutations/transactions/step_adapters/tranquilo.rb
|
245
252
|
- lib/dry/mutations/transactions/step_adapters/transform.rb
|