dry-transaction 0.12.1 → 0.13.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/Gemfile.lock +1 -1
- data/lib/dry/transaction/dsl.rb +7 -7
- data/lib/dry/transaction/instance_methods.rb +18 -16
- data/lib/dry/transaction/operation_resolver.rb +2 -2
- data/lib/dry/transaction/result_matcher.rb +1 -1
- data/lib/dry/transaction/step.rb +28 -20
- data/lib/dry/transaction/version.rb +1 -1
- data/spec/examples.txt +82 -81
- data/spec/integration/around_spec.rb +5 -5
- data/spec/integration/transaction_spec.rb +23 -16
- data/spec/integration/transaction_without_steps_spec.rb +13 -13
- data/spec/unit/step_spec.rb +9 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 901e6ca3954acdc46da017a77ceb17014e0c5728d216fbf80b97995d9be03164
|
4
|
+
data.tar.gz: 501e37cccc173d5be0f654f5e4606c9d2db4e4737c0e004c569bab1bbadd04bd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bcad8d5346e432e465310eeba9d79c32c2d2df024baf8d752ef5d2ad054685652f1851e3e55ec42d3937563dbaec2b93acd4f6a93e5e40d6cadee66332c6f80d
|
7
|
+
data.tar.gz: 6ff93e764b43ff80a578c2bb775a9a2d1db41a86b617ad2e62ffbcddef4bde69ba95bb8387824a2c96150d4729f0b7c80ab5464e87b4b29f2717ed05d383c246
|
data/Gemfile.lock
CHANGED
data/lib/dry/transaction/dsl.rb
CHANGED
@@ -24,16 +24,16 @@ module Dry
|
|
24
24
|
|
25
25
|
def define_dsl
|
26
26
|
module_exec(@step_adapters) do |step_adapters|
|
27
|
-
step_adapters.
|
27
|
+
step_adapters.each do |adapter_name, adapter|
|
28
28
|
define_method(adapter_name) do |step_name, with: nil, **options|
|
29
|
-
operation_name = with
|
29
|
+
operation_name = with
|
30
30
|
|
31
31
|
steps << Step.new(
|
32
|
-
|
33
|
-
step_name,
|
34
|
-
operation_name,
|
35
|
-
nil, # operations are resolved only when transactions are instantiated
|
36
|
-
options,
|
32
|
+
adapter: adapter,
|
33
|
+
name: step_name,
|
34
|
+
operation_name: operation_name,
|
35
|
+
operation: nil, # operations are resolved only when transactions are instantiated
|
36
|
+
options: options,
|
37
37
|
)
|
38
38
|
end
|
39
39
|
end
|
@@ -42,7 +42,7 @@ module Dry
|
|
42
42
|
|
43
43
|
if listeners.is_a?(Hash)
|
44
44
|
listeners.each do |step_name, listener|
|
45
|
-
steps.detect { |step| step.
|
45
|
+
steps.detect { |step| step.name == step_name }.subscribe(listener)
|
46
46
|
end
|
47
47
|
else
|
48
48
|
steps.each do |step|
|
@@ -55,8 +55,8 @@ module Dry
|
|
55
55
|
assert_valid_step_args(step_args)
|
56
56
|
|
57
57
|
new_steps = steps.map { |step|
|
58
|
-
if step_args[step.
|
59
|
-
step.with(call_args: step_args[step.
|
58
|
+
if step_args[step.name]
|
59
|
+
step.with(call_args: step_args[step.name])
|
60
60
|
else
|
61
61
|
step
|
62
62
|
end
|
@@ -68,34 +68,36 @@ module Dry
|
|
68
68
|
private
|
69
69
|
|
70
70
|
def respond_to_missing?(name, _include_private = false)
|
71
|
-
steps.any? { |step| step.
|
71
|
+
steps.any? { |step| step.name == name }
|
72
72
|
end
|
73
73
|
|
74
74
|
def method_missing(name, *args, &block)
|
75
|
-
step = steps.detect { |s| s.
|
75
|
+
step = steps.detect { |s| s.name == name }
|
76
76
|
super unless step
|
77
77
|
|
78
|
-
operation = operations[step.
|
79
|
-
raise NotImplementedError, "no operation +#{step.operation_name}+ defined for step +#{step.
|
78
|
+
operation = operations[step.name]
|
79
|
+
raise NotImplementedError, "no operation +#{step.operation_name}+ defined for step +#{step.name}+" unless operation
|
80
80
|
|
81
81
|
operation.(*args, &block)
|
82
82
|
end
|
83
83
|
|
84
84
|
def resolve_operation(step, **operations)
|
85
|
-
if
|
86
|
-
|
87
|
-
elsif
|
88
|
-
|
89
|
-
elsif operations[step.
|
90
|
-
operations[step.
|
85
|
+
if step.internal? && operations[step.name]
|
86
|
+
operations[step.name]
|
87
|
+
elsif methods.include?(step.name) || private_methods.include?(step.name)
|
88
|
+
method(step.name)
|
89
|
+
elsif operations[step.name].respond_to?(:call)
|
90
|
+
operations[step.name]
|
91
|
+
elsif operations[step.name]
|
92
|
+
raise InvalidStepError.new(step.name)
|
91
93
|
else
|
92
|
-
raise
|
94
|
+
raise MissingStepError.new(step.name)
|
93
95
|
end
|
94
96
|
end
|
95
97
|
|
96
98
|
def assert_valid_step_args(step_args)
|
97
99
|
step_args.each_key do |step_name|
|
98
|
-
unless steps.any? { |step| step.
|
100
|
+
unless steps.any? { |step| step.name == step_name }
|
99
101
|
raise ArgumentError, "+#{step_name}+ is not a valid step name"
|
100
102
|
end
|
101
103
|
end
|
@@ -107,7 +109,7 @@ module Dry
|
|
107
109
|
num_args_supplied = step.call_args.length + 1 # add 1 for main `input`
|
108
110
|
|
109
111
|
if num_args_required > num_args_supplied
|
110
|
-
raise ArgumentError, "not enough arguments supplied for step +#{step.
|
112
|
+
raise ArgumentError, "not enough arguments supplied for step +#{step.name}+"
|
111
113
|
end
|
112
114
|
end
|
113
115
|
end
|
@@ -5,7 +5,7 @@ module Dry
|
|
5
5
|
module_exec(container) do |ops_container|
|
6
6
|
define_method :initialize do |**kwargs|
|
7
7
|
operation_kwargs = self.class.steps.select(&:operation_name).map { |step|
|
8
|
-
operation = kwargs.fetch(step.
|
8
|
+
operation = kwargs.fetch(step.name) {
|
9
9
|
if ops_container && ops_container.key?(step.operation_name)
|
10
10
|
ops_container[step.operation_name]
|
11
11
|
else
|
@@ -13,7 +13,7 @@ module Dry
|
|
13
13
|
end
|
14
14
|
}
|
15
15
|
|
16
|
-
[step.
|
16
|
+
[step.name, operation]
|
17
17
|
}.to_h
|
18
18
|
|
19
19
|
super(**kwargs, **operation_kwargs)
|
@@ -10,7 +10,7 @@ module Dry
|
|
10
10
|
failure: Dry::Matcher::Case.new(
|
11
11
|
match: -> result, step_name = nil {
|
12
12
|
if step_name
|
13
|
-
result.failure? && result.failure.step.
|
13
|
+
result.failure? && result.failure.step.name == step_name
|
14
14
|
else
|
15
15
|
result.failure?
|
16
16
|
end
|
data/lib/dry/transaction/step.rb
CHANGED
@@ -17,14 +17,14 @@ module Dry
|
|
17
17
|
register_event(:step_succeeded)
|
18
18
|
register_event(:step_failed)
|
19
19
|
|
20
|
-
attr_reader :
|
21
|
-
attr_reader :
|
20
|
+
attr_reader :adapter
|
21
|
+
attr_reader :name
|
22
22
|
attr_reader :operation_name
|
23
23
|
attr_reader :call_args
|
24
24
|
|
25
|
-
def initialize(
|
26
|
-
@
|
27
|
-
@
|
25
|
+
def initialize(adapter:, name:, operation_name:, operation: nil, options:, call_args: [])
|
26
|
+
@adapter = StepAdapter[adapter, operation, **options, step_name: name, operation_name: operation_name]
|
27
|
+
@name = name
|
28
28
|
@operation_name = operation_name
|
29
29
|
@call_args = call_args
|
30
30
|
end
|
@@ -32,50 +32,58 @@ module Dry
|
|
32
32
|
def with(operation: UNDEFINED, call_args: UNDEFINED)
|
33
33
|
return self if operation == UNDEFINED && call_args == UNDEFINED
|
34
34
|
|
35
|
-
new_operation = operation == UNDEFINED ?
|
35
|
+
new_operation = operation == UNDEFINED ? adapter.operation : operation
|
36
36
|
new_call_args = call_args == UNDEFINED ? self.call_args : Array(call_args)
|
37
37
|
|
38
38
|
self.class.new(
|
39
|
-
|
40
|
-
|
41
|
-
operation_name,
|
42
|
-
new_operation,
|
43
|
-
|
44
|
-
new_call_args
|
39
|
+
adapter: adapter,
|
40
|
+
name: name,
|
41
|
+
operation_name: operation_name,
|
42
|
+
operation: new_operation,
|
43
|
+
options: adapter.options,
|
44
|
+
call_args: new_call_args,
|
45
45
|
)
|
46
46
|
end
|
47
47
|
|
48
48
|
def call(input, continue = RETURN)
|
49
49
|
args = [input, *call_args]
|
50
50
|
|
51
|
-
if
|
52
|
-
with_broadcast(args) {
|
51
|
+
if adapter.yields?
|
52
|
+
with_broadcast(args) { adapter.(args, &continue) }
|
53
53
|
else
|
54
|
-
continue.(with_broadcast(args) {
|
54
|
+
continue.(with_broadcast(args) { adapter.(args) })
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
58
|
def with_broadcast(args)
|
59
|
-
publish(:step, step_name:
|
59
|
+
publish(:step, step_name: name, args: args)
|
60
60
|
|
61
61
|
yield.fmap { |value|
|
62
|
-
publish(:step_succeeded, step_name:
|
62
|
+
publish(:step_succeeded, step_name: name, args: args, value: value)
|
63
63
|
value
|
64
64
|
}.or { |value|
|
65
65
|
Failure(
|
66
66
|
StepFailure.(self, value) {
|
67
|
-
publish(:step_failed, step_name:
|
67
|
+
publish(:step_failed, step_name: name, args: args, value: value)
|
68
68
|
}
|
69
69
|
)
|
70
70
|
}
|
71
71
|
end
|
72
72
|
|
73
|
+
def internal?
|
74
|
+
!external?
|
75
|
+
end
|
76
|
+
|
77
|
+
def external?
|
78
|
+
!!operation_name
|
79
|
+
end
|
80
|
+
|
73
81
|
def arity
|
74
|
-
|
82
|
+
adapter.operation.arity
|
75
83
|
end
|
76
84
|
|
77
85
|
def operation
|
78
|
-
|
86
|
+
adapter.operation
|
79
87
|
end
|
80
88
|
end
|
81
89
|
end
|
data/spec/examples.txt
CHANGED
@@ -1,87 +1,88 @@
|
|
1
1
|
example_id | status | run_time |
|
2
2
|
----------------------------------------------------------- | ------ | --------------- |
|
3
|
-
./spec/integration/around_spec.rb[1:1] | passed | 0.
|
4
|
-
./spec/integration/around_spec.rb[1:2] | passed | 0.
|
5
|
-
./spec/integration/around_spec.rb[1:3] | passed | 0.
|
6
|
-
./spec/integration/around_spec.rb[1:4] | passed | 0.
|
7
|
-
./spec/integration/around_spec.rb[1:5] | passed | 0.
|
8
|
-
./spec/integration/around_spec.rb[1:6:1] | passed | 0.
|
3
|
+
./spec/integration/around_spec.rb[1:1] | passed | 0.00234 seconds |
|
4
|
+
./spec/integration/around_spec.rb[1:2] | passed | 0.00095 seconds |
|
5
|
+
./spec/integration/around_spec.rb[1:3] | passed | 0.00149 seconds |
|
6
|
+
./spec/integration/around_spec.rb[1:4] | passed | 0.00118 seconds |
|
7
|
+
./spec/integration/around_spec.rb[1:5] | passed | 0.00104 seconds |
|
8
|
+
./spec/integration/around_spec.rb[1:6:1] | passed | 0.00096 seconds |
|
9
9
|
./spec/integration/auto_injection_spec.rb[1:1] | failed | 0.00149 seconds |
|
10
|
-
./spec/integration/custom_step_adapters_spec.rb[1:1] | passed | 0.
|
11
|
-
./spec/integration/operation_spec.rb[1:1] | passed | 0.
|
12
|
-
./spec/integration/operation_spec.rb[1:2] | passed | 0.
|
13
|
-
./spec/integration/passing_step_arguments_spec.rb[1:1:1] | passed | 0.
|
14
|
-
./spec/integration/passing_step_arguments_spec.rb[1:2:1] | passed | 0.
|
15
|
-
./spec/integration/passing_step_arguments_spec.rb[1:3:1] | passed | 0.
|
16
|
-
./spec/integration/publishing_step_events_spec.rb[1:1:1] | passed | 0.
|
17
|
-
./spec/integration/publishing_step_events_spec.rb[1:1:2] | passed | 0.
|
18
|
-
./spec/integration/publishing_step_events_spec.rb[1:2:1] | passed | 0.
|
19
|
-
./spec/integration/publishing_step_events_spec.rb[1:2:2] | passed | 0.
|
20
|
-
./spec/integration/publishing_step_events_spec.rb[1:3:1] | passed | 0.
|
21
|
-
./spec/integration/publishing_step_events_spec.rb[1:3:2] | passed | 0.
|
22
|
-
./spec/integration/transaction_spec.rb[1:1:1] | passed | 0.
|
23
|
-
./spec/integration/transaction_spec.rb[1:1:2] | passed | 0.
|
24
|
-
./spec/integration/transaction_spec.rb[1:1:3] | passed | 0.
|
25
|
-
./spec/integration/transaction_spec.rb[1:1:4] | passed | 0.
|
26
|
-
./spec/integration/transaction_spec.rb[1:1:5] | passed | 0.
|
27
|
-
./spec/integration/transaction_spec.rb[1:2:1] | passed | 0.
|
28
|
-
./spec/integration/transaction_spec.rb[1:3:1] | passed | 0.
|
29
|
-
./spec/integration/transaction_spec.rb[1:4:1] | passed | 0.
|
30
|
-
./spec/integration/transaction_spec.rb[1:5:1] | passed | 0.
|
31
|
-
./spec/integration/transaction_spec.rb[1:6:1] | passed | 0.
|
32
|
-
./spec/integration/transaction_spec.rb[1:7:1] | passed | 0.
|
33
|
-
./spec/integration/transaction_spec.rb[1:8:1] | passed | 0.
|
34
|
-
./spec/integration/transaction_spec.rb[1:9:1] | passed | 0.
|
35
|
-
./spec/integration/transaction_spec.rb[1:10:1] | passed | 0.
|
36
|
-
./spec/integration/transaction_spec.rb[1:11:1] | passed | 0.
|
37
|
-
./spec/integration/transaction_spec.rb[1:
|
38
|
-
./spec/integration/transaction_spec.rb[1:12:
|
39
|
-
./spec/integration/transaction_spec.rb[1:12:
|
40
|
-
./spec/integration/transaction_spec.rb[1:12:
|
41
|
-
./spec/integration/transaction_spec.rb[1:12:
|
42
|
-
./spec/integration/transaction_spec.rb[1:12:
|
43
|
-
./spec/integration/transaction_spec.rb[1:
|
44
|
-
./spec/integration/transaction_spec.rb[1:13:
|
45
|
-
./spec/integration/transaction_spec.rb[1:13:
|
46
|
-
./spec/integration/transaction_spec.rb[1:13:
|
47
|
-
./spec/integration/transaction_spec.rb[1:13:
|
48
|
-
./spec/integration/transaction_spec.rb[1:
|
49
|
-
./spec/integration/transaction_spec.rb[1:
|
50
|
-
./spec/integration/transaction_spec.rb[1:
|
51
|
-
./spec/integration/transaction_spec.rb[1:16:
|
52
|
-
./spec/integration/transaction_spec.rb[1:16:2:
|
53
|
-
./spec/integration/
|
54
|
-
./spec/integration/transaction_without_steps_spec.rb[1:1:
|
55
|
-
./spec/integration/transaction_without_steps_spec.rb[1:1:
|
56
|
-
./spec/integration/transaction_without_steps_spec.rb[1:1:
|
57
|
-
./spec/integration/transaction_without_steps_spec.rb[1:
|
58
|
-
./spec/integration/transaction_without_steps_spec.rb[1:
|
59
|
-
./spec/
|
60
|
-
./spec/unit/step_adapters/around_spec.rb[1:1:
|
61
|
-
./spec/unit/step_adapters/around_spec.rb[1:1:
|
62
|
-
./spec/unit/step_adapters/
|
63
|
-
./spec/unit/step_adapters/check_spec.rb[1:1:
|
64
|
-
./spec/unit/step_adapters/check_spec.rb[1:1:
|
10
|
+
./spec/integration/custom_step_adapters_spec.rb[1:1] | passed | 0.00372 seconds |
|
11
|
+
./spec/integration/operation_spec.rb[1:1] | passed | 0.00013 seconds |
|
12
|
+
./spec/integration/operation_spec.rb[1:2] | passed | 0.00014 seconds |
|
13
|
+
./spec/integration/passing_step_arguments_spec.rb[1:1:1] | passed | 0.00063 seconds |
|
14
|
+
./spec/integration/passing_step_arguments_spec.rb[1:2:1] | passed | 0.00072 seconds |
|
15
|
+
./spec/integration/passing_step_arguments_spec.rb[1:3:1] | passed | 0.00038 seconds |
|
16
|
+
./spec/integration/publishing_step_events_spec.rb[1:1:1] | passed | 0.00057 seconds |
|
17
|
+
./spec/integration/publishing_step_events_spec.rb[1:1:2] | passed | 0.0007 seconds |
|
18
|
+
./spec/integration/publishing_step_events_spec.rb[1:2:1] | passed | 0.00054 seconds |
|
19
|
+
./spec/integration/publishing_step_events_spec.rb[1:2:2] | passed | 0.00052 seconds |
|
20
|
+
./spec/integration/publishing_step_events_spec.rb[1:3:1] | passed | 0.00075 seconds |
|
21
|
+
./spec/integration/publishing_step_events_spec.rb[1:3:2] | passed | 0.00071 seconds |
|
22
|
+
./spec/integration/transaction_spec.rb[1:1:1] | passed | 0.0006 seconds |
|
23
|
+
./spec/integration/transaction_spec.rb[1:1:2] | passed | 0.0006 seconds |
|
24
|
+
./spec/integration/transaction_spec.rb[1:1:3] | passed | 0.00058 seconds |
|
25
|
+
./spec/integration/transaction_spec.rb[1:1:4] | passed | 0.00072 seconds |
|
26
|
+
./spec/integration/transaction_spec.rb[1:1:5] | passed | 0.00058 seconds |
|
27
|
+
./spec/integration/transaction_spec.rb[1:2:1] | passed | 0.00075 seconds |
|
28
|
+
./spec/integration/transaction_spec.rb[1:3:1] | passed | 0.00055 seconds |
|
29
|
+
./spec/integration/transaction_spec.rb[1:4:1] | passed | 0.00055 seconds |
|
30
|
+
./spec/integration/transaction_spec.rb[1:5:1] | passed | 0.00059 seconds |
|
31
|
+
./spec/integration/transaction_spec.rb[1:6:1] | passed | 0.00043 seconds |
|
32
|
+
./spec/integration/transaction_spec.rb[1:7:1] | passed | 0.00047 seconds |
|
33
|
+
./spec/integration/transaction_spec.rb[1:8:1] | passed | 0.00043 seconds |
|
34
|
+
./spec/integration/transaction_spec.rb[1:9:1] | passed | 0.00068 seconds |
|
35
|
+
./spec/integration/transaction_spec.rb[1:10:1] | passed | 0.00052 seconds |
|
36
|
+
./spec/integration/transaction_spec.rb[1:11:1] | passed | 0.00053 seconds |
|
37
|
+
./spec/integration/transaction_spec.rb[1:11:2] | passed | 0.00047 seconds |
|
38
|
+
./spec/integration/transaction_spec.rb[1:12:1] | passed | 0.00065 seconds |
|
39
|
+
./spec/integration/transaction_spec.rb[1:12:2] | passed | 0.00062 seconds |
|
40
|
+
./spec/integration/transaction_spec.rb[1:12:3] | passed | 0.00066 seconds |
|
41
|
+
./spec/integration/transaction_spec.rb[1:12:4] | passed | 0.00063 seconds |
|
42
|
+
./spec/integration/transaction_spec.rb[1:12:5] | passed | 0.0006 seconds |
|
43
|
+
./spec/integration/transaction_spec.rb[1:12:6] | passed | 0.00063 seconds |
|
44
|
+
./spec/integration/transaction_spec.rb[1:13:1] | passed | 0.00076 seconds |
|
45
|
+
./spec/integration/transaction_spec.rb[1:13:2] | passed | 0.0007 seconds |
|
46
|
+
./spec/integration/transaction_spec.rb[1:13:3] | passed | 0.00198 seconds |
|
47
|
+
./spec/integration/transaction_spec.rb[1:13:4] | passed | 0.00065 seconds |
|
48
|
+
./spec/integration/transaction_spec.rb[1:13:5] | passed | 0.00068 seconds |
|
49
|
+
./spec/integration/transaction_spec.rb[1:14:1] | passed | 0.00055 seconds |
|
50
|
+
./spec/integration/transaction_spec.rb[1:15:1] | passed | 0.00042 seconds |
|
51
|
+
./spec/integration/transaction_spec.rb[1:16:1:1:1] | passed | 0.0004 seconds |
|
52
|
+
./spec/integration/transaction_spec.rb[1:16:2:1:1] | passed | 0.00037 seconds |
|
53
|
+
./spec/integration/transaction_spec.rb[1:16:2:2:1] | passed | 0.00042 seconds |
|
54
|
+
./spec/integration/transaction_without_steps_spec.rb[1:1:1] | passed | 0.00066 seconds |
|
55
|
+
./spec/integration/transaction_without_steps_spec.rb[1:1:2] | passed | 0.0007 seconds |
|
56
|
+
./spec/integration/transaction_without_steps_spec.rb[1:1:3] | passed | 0.00072 seconds |
|
57
|
+
./spec/integration/transaction_without_steps_spec.rb[1:1:4] | passed | 0.00064 seconds |
|
58
|
+
./spec/integration/transaction_without_steps_spec.rb[1:2:1] | passed | 0.0008 seconds |
|
59
|
+
./spec/integration/transaction_without_steps_spec.rb[1:3:1] | passed | 0.00071 seconds |
|
60
|
+
./spec/unit/step_adapters/around_spec.rb[1:1:1:1] | passed | 0.0016 seconds |
|
61
|
+
./spec/unit/step_adapters/around_spec.rb[1:1:2:1] | passed | 0.00092 seconds |
|
62
|
+
./spec/unit/step_adapters/around_spec.rb[1:1:3:1] | passed | 0.00011 seconds |
|
63
|
+
./spec/unit/step_adapters/check_spec.rb[1:1:1] | passed | 0.00012 seconds |
|
64
|
+
./spec/unit/step_adapters/check_spec.rb[1:1:2:1] | passed | 0.00012 seconds |
|
65
|
+
./spec/unit/step_adapters/check_spec.rb[1:1:3:1] | passed | 0.00009 seconds |
|
65
66
|
./spec/unit/step_adapters/check_spec.rb[1:1:4:1] | passed | 0.00009 seconds |
|
66
|
-
./spec/unit/step_adapters/map_spec.rb[1:1:1] | passed | 0.
|
67
|
-
./spec/unit/step_adapters/raw_spec.rb[1:1:1:1] | passed | 0.
|
68
|
-
./spec/unit/step_adapters/raw_spec.rb[1:1:2:1] | passed | 0.
|
69
|
-
./spec/unit/step_adapters/tee_spec.rb[1:1:1] | passed | 0.
|
70
|
-
./spec/unit/step_adapters/try_spec.rb[1:1:1:1] | passed | 0.
|
71
|
-
./spec/unit/step_adapters/try_spec.rb[1:1:2:1:1] | passed | 0.
|
72
|
-
./spec/unit/step_adapters/try_spec.rb[1:1:2:1:2] | passed | 0.
|
73
|
-
./spec/unit/step_adapters/try_spec.rb[1:1:2:1:3:1] | passed | 0.
|
74
|
-
./spec/unit/step_adapters/try_spec.rb[1:1:2:1:3:2] | passed | 0.
|
75
|
-
./spec/unit/step_adapters/try_spec.rb[1:1:2:2:1] | passed | 0.
|
76
|
-
./spec/unit/step_adapters/try_spec.rb[1:1:2:2:2:1] | passed | 0.
|
77
|
-
./spec/unit/step_spec.rb[1:1:1:1] | passed | 0.
|
78
|
-
./spec/unit/step_spec.rb[1:1:1:2] | passed | 0.
|
79
|
-
./spec/unit/step_spec.rb[1:1:2:1] | passed | 0.
|
80
|
-
./spec/unit/step_spec.rb[1:1:3:1] | passed | 0.
|
81
|
-
./spec/unit/step_spec.rb[1:1:3:2] | passed | 0.
|
82
|
-
./spec/unit/step_spec.rb[1:1:3:3] | passed | 0.
|
67
|
+
./spec/unit/step_adapters/map_spec.rb[1:1:1] | passed | 0.00009 seconds |
|
68
|
+
./spec/unit/step_adapters/raw_spec.rb[1:1:1:1] | passed | 0.00014 seconds |
|
69
|
+
./spec/unit/step_adapters/raw_spec.rb[1:1:2:1] | passed | 0.00009 seconds |
|
70
|
+
./spec/unit/step_adapters/tee_spec.rb[1:1:1] | passed | 0.00012 seconds |
|
71
|
+
./spec/unit/step_adapters/try_spec.rb[1:1:1:1] | passed | 0.00016 seconds |
|
72
|
+
./spec/unit/step_adapters/try_spec.rb[1:1:2:1:1] | passed | 0.00013 seconds |
|
73
|
+
./spec/unit/step_adapters/try_spec.rb[1:1:2:1:2] | passed | 0.00016 seconds |
|
74
|
+
./spec/unit/step_adapters/try_spec.rb[1:1:2:1:3:1] | passed | 0.00017 seconds |
|
75
|
+
./spec/unit/step_adapters/try_spec.rb[1:1:2:1:3:2] | passed | 0.00012 seconds |
|
76
|
+
./spec/unit/step_adapters/try_spec.rb[1:1:2:2:1] | passed | 0.00012 seconds |
|
77
|
+
./spec/unit/step_adapters/try_spec.rb[1:1:2:2:2:1] | passed | 0.00012 seconds |
|
78
|
+
./spec/unit/step_spec.rb[1:1:1:1] | passed | 0.00225 seconds |
|
79
|
+
./spec/unit/step_spec.rb[1:1:1:2] | passed | 0.00071 seconds |
|
80
|
+
./spec/unit/step_spec.rb[1:1:2:1] | passed | 0.01719 seconds |
|
81
|
+
./spec/unit/step_spec.rb[1:1:3:1] | passed | 0.00026 seconds |
|
82
|
+
./spec/unit/step_spec.rb[1:1:3:2] | passed | 0.00306 seconds |
|
83
|
+
./spec/unit/step_spec.rb[1:1:3:3] | passed | 0.00057 seconds |
|
83
84
|
./spec/unit/step_spec.rb[1:2:1:1] | passed | 0.00014 seconds |
|
84
|
-
./spec/unit/step_spec.rb[1:2:2:1] | passed | 0.
|
85
|
-
./spec/unit/step_spec.rb[1:2:3:1] | passed | 0.
|
86
|
-
./spec/unit/step_spec.rb[1:3:1:1] | passed | 0.
|
85
|
+
./spec/unit/step_spec.rb[1:2:2:1] | passed | 0.00014 seconds |
|
86
|
+
./spec/unit/step_spec.rb[1:2:3:1] | passed | 0.00013 seconds |
|
87
|
+
./spec/unit/step_spec.rb[1:3:1:1] | passed | 0.00014 seconds |
|
87
88
|
./spec/unit/step_spec.rb[1:3:2:1] | passed | 0.00013 seconds |
|
@@ -29,11 +29,11 @@ RSpec.describe "around steps" do
|
|
29
29
|
Class.new do
|
30
30
|
include Dry::Transaction(container: Test::Container)
|
31
31
|
|
32
|
-
around :transaction
|
33
|
-
step :validate
|
34
|
-
step :persist_user
|
35
|
-
step :persist_account
|
36
|
-
step :finalize
|
32
|
+
around :transaction, with: :transaction
|
33
|
+
step :validate, with: :validate
|
34
|
+
step :persist_user, with: :persist_user
|
35
|
+
step :persist_account, with: :persist_account
|
36
|
+
step :finalize, with: :finalize
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
@@ -18,10 +18,10 @@ RSpec.describe "Transactions" do
|
|
18
18
|
let(:transaction) {
|
19
19
|
Class.new do
|
20
20
|
include Dry::Transaction(container: Test::Container)
|
21
|
-
map :process
|
22
|
-
step :verify
|
23
|
-
try :validate, catch: Test::NotValidError
|
24
|
-
tee :persist
|
21
|
+
map :process, with: :process
|
22
|
+
step :verify, with: :verify
|
23
|
+
try :validate, with: :validate, catch: Test::NotValidError
|
24
|
+
tee :persist, with: :persist
|
25
25
|
end.new(**dependencies)
|
26
26
|
}
|
27
27
|
let(:input) { {"name" => "Jane", "email" => "jane@doe.com"} }
|
@@ -92,9 +92,9 @@ RSpec.describe "Transactions" do
|
|
92
92
|
let(:transaction) {
|
93
93
|
Class.new do
|
94
94
|
include Dry::Transaction(container: Test::Container)
|
95
|
-
map :process
|
95
|
+
map :process, with: :process
|
96
96
|
step :verify_step, with: :verify
|
97
|
-
tee :persist
|
97
|
+
tee :persist, with: :persist
|
98
98
|
end.new(**dependencies)
|
99
99
|
}
|
100
100
|
|
@@ -177,10 +177,11 @@ RSpec.describe "Transactions" do
|
|
177
177
|
{process: -> input { Failure(input)} }
|
178
178
|
end
|
179
179
|
|
180
|
+
# FIXME: needs a better description
|
180
181
|
it "execute the transaction and execute the injected operation" do
|
181
182
|
result = transaction.call([:hello])
|
182
183
|
|
183
|
-
expect(result).to eq
|
184
|
+
expect(result).to eq Failure([:hello])
|
184
185
|
end
|
185
186
|
end
|
186
187
|
|
@@ -286,9 +287,8 @@ RSpec.describe "Transactions" do
|
|
286
287
|
end
|
287
288
|
end
|
288
289
|
|
289
|
-
|
290
290
|
context "all steps are local methods" do
|
291
|
-
let(:
|
291
|
+
let(:transaction_class) do
|
292
292
|
Class.new do
|
293
293
|
include Dry::Transaction
|
294
294
|
|
@@ -307,23 +307,30 @@ RSpec.describe "Transactions" do
|
|
307
307
|
def persist(input)
|
308
308
|
Test::Container[:database] << input and true
|
309
309
|
end
|
310
|
-
end
|
310
|
+
end
|
311
311
|
end
|
312
312
|
|
313
313
|
it "executes succesfully" do
|
314
|
-
|
314
|
+
transaction_class.new.call("name" => "Jane", "email" => "jane@doe.com")
|
315
315
|
expect(database).to include([["name", "Jane"], ["email", "jane@doe.com"]])
|
316
316
|
end
|
317
|
+
|
318
|
+
it "allows replacement steps to be injected" do
|
319
|
+
verify = -> { Failure("nope") }
|
320
|
+
|
321
|
+
result = transaction_class.new(verify: verify).("name" => "Jane", "email" => "jane@doe.com")
|
322
|
+
expect(result).to eq Failure("nope")
|
323
|
+
end
|
317
324
|
end
|
318
325
|
|
319
326
|
context "failed in a try step" do
|
320
327
|
let(:transaction) {
|
321
328
|
Class.new do
|
322
329
|
include Dry::Transaction(container: Test::Container)
|
323
|
-
map :process
|
324
|
-
step :verify
|
325
|
-
try :validate, catch: Test::NotValidError
|
326
|
-
tee :persist
|
330
|
+
map :process, with: :process
|
331
|
+
step :verify, with: :verify
|
332
|
+
try :validate, with: :validate, catch: Test::NotValidError
|
333
|
+
tee :persist, with: :persist
|
327
334
|
end.new(**dependencies)
|
328
335
|
}
|
329
336
|
let(:input) { {"name" => "Jane"} }
|
@@ -498,7 +505,7 @@ RSpec.describe "Transactions" do
|
|
498
505
|
let(:transaction) {
|
499
506
|
Class.new do
|
500
507
|
include Dry::Transaction(container: Test::ContainerRaw)
|
501
|
-
map :not_a_proc
|
508
|
+
map :not_a_proc, with: :not_a_proc
|
502
509
|
end.new
|
503
510
|
}
|
504
511
|
|
@@ -28,10 +28,10 @@ RSpec.describe "Transactions steps without arguments" do
|
|
28
28
|
let(:transaction) {
|
29
29
|
Class.new do
|
30
30
|
include Dry::Transaction(container: Test::Container)
|
31
|
-
map :fetch_data
|
32
|
-
map :process
|
33
|
-
try :validate, catch: Test::NotValidError
|
34
|
-
tee :persist
|
31
|
+
map :fetch_data, with: :fetch_data
|
32
|
+
map :process, with: :process
|
33
|
+
try :validate, with: :validate, catch: Test::NotValidError
|
34
|
+
tee :persist, with: :persist
|
35
35
|
end.new(**dependencies)
|
36
36
|
}
|
37
37
|
|
@@ -67,11 +67,11 @@ RSpec.describe "Transactions steps without arguments" do
|
|
67
67
|
let(:transaction) {
|
68
68
|
Class.new do
|
69
69
|
include Dry::Transaction(container: Test::Container)
|
70
|
-
tee :call_outside
|
71
|
-
map :fetch_data
|
72
|
-
map :process
|
73
|
-
try :validate, catch: Test::NotValidError
|
74
|
-
tee :external_store
|
70
|
+
tee :call_outside, with: :call_outside
|
71
|
+
map :fetch_data, with: :fetch_data
|
72
|
+
map :process, with: :process
|
73
|
+
try :validate, with: :validate, catch: Test::NotValidError
|
74
|
+
tee :external_store, with: :external_store
|
75
75
|
end.new(**dependencies)
|
76
76
|
}
|
77
77
|
|
@@ -85,10 +85,10 @@ RSpec.describe "Transactions steps without arguments" do
|
|
85
85
|
let(:transaction) {
|
86
86
|
Class.new do
|
87
87
|
include Dry::Transaction(container: Test::Container)
|
88
|
-
map :process
|
89
|
-
try :validate, catch: Test::NotValidError
|
90
|
-
tee :call_outside
|
91
|
-
tee :external_store
|
88
|
+
map :process, with: :process
|
89
|
+
try :validate, with: :validate, catch: Test::NotValidError
|
90
|
+
tee :call_outside, with: :call_outside
|
91
|
+
tee :external_store, with: :external_store
|
92
92
|
end.new(**dependencies)
|
93
93
|
}
|
94
94
|
let(:input) { {"name" => "Jane", "email" => "jane@doe.com"} }
|
data/spec/unit/step_spec.rb
CHANGED
@@ -3,7 +3,15 @@ RSpec.describe Dry::Transaction::Step do
|
|
3
3
|
let(:step_name) { :test }
|
4
4
|
let(:operation_name) { step_name }
|
5
5
|
|
6
|
-
subject(:step) {
|
6
|
+
subject(:step) {
|
7
|
+
described_class.new(
|
8
|
+
adapter: step_adapter,
|
9
|
+
name: step_name,
|
10
|
+
operation_name: operation_name,
|
11
|
+
operation: operation,
|
12
|
+
options: {}
|
13
|
+
)
|
14
|
+
}
|
7
15
|
|
8
16
|
describe "#call" do
|
9
17
|
let(:listener) do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dry-transaction
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Riley
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-06-
|
11
|
+
date: 2018-06-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-container
|