trailblazer-macro 2.1.7 → 2.1.11

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2b94581daf3c1a0afeea2d8a3d9f470393b15fbfe57fe01dc29c5d1f247beb7c
4
- data.tar.gz: dff368470d21d9fb0f9522bf610ef1e62b51eebf59f9c41f371298d12d11b8e5
3
+ metadata.gz: 34955a47d4c5d006819242d4d9a13ce658a3473afe0d7f6b4570374dbff557c0
4
+ data.tar.gz: 4f8fb6b8ba5c8bcc3db19ac977507675550c0defa2be95b771c77914644837b6
5
5
  SHA512:
6
- metadata.gz: 0a2547701dec5fd643a229313dfeab1d047b1b469208ba54c950cf6f496ef07aa950e6674fb96221fea898dcaff8329f2f3d2ff1f9bec7fa0b758599a96e6329
7
- data.tar.gz: a0fb745ffb5a9a313764a08972f5271f66e2f07c097759bd5cccb0521b1f80cf72eadaf3c71ae1dc5abdc8bd311abf0aabf6aed4dbea728328a9c590249d9e24
6
+ metadata.gz: 71cc088d718a756171fd402d12dfb3b55d817e87356ea13088871dbc539085b92af36f57b7e7e43c817181aac9b73c580f8e69208b96deec43c59f551df742f9
7
+ data.tar.gz: c400ba9542fd36400b6ebb0bffc142f3a51212a33b48504b527fdd35b15a5060a95d9c8735a9f146e2f259906568515a7199e9eae7087a3ad3a5b59cbb6a0374
@@ -6,7 +6,7 @@ jobs:
6
6
  fail-fast: false
7
7
  matrix:
8
8
  # Due to https://github.com/actions/runner/issues/849, we have to use quotes for '3.0'
9
- ruby: [2.5, 2.6, 2.7, '3.0', head, jruby, jruby-head]
9
+ ruby: [2.5, 2.6, 2.7, '3.0', "3.1", head, jruby]
10
10
  runs-on: ubuntu-latest
11
11
  steps:
12
12
  - uses: actions/checkout@v2
data/CHANGES.md CHANGED
@@ -1,3 +1,22 @@
1
+ # 2.1.11
2
+
3
+ * In `Nested()`, we no longer use `Railway::End::Success` and `Railway::End::Failure` as static outputs but
4
+ simply use `Railway`'s default termini objects.
5
+ * Use `dsl`'s new `Inject()` API instead of a overriding `:inject` in `Model()` and `Policy()`.
6
+
7
+ # 2.1.10
8
+
9
+ * Yanked, pushed accidentially.
10
+
11
+ # 2.1.9
12
+
13
+ * Allow omitting `:params` when calling the operation by defaulting it to `{}` in `Model()`.
14
+ * Use `dsl-linear` 0.5.0 and above, which allows removing `Inject()` uses.
15
+
16
+ # 2.1.8
17
+
18
+ Yanked due to inconsistency.
19
+
1
20
  # 2.1.7
2
21
 
3
22
  * Improve `Nested()` warning message.
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
  All common Macro's for Trailblazer::Operation, will come here
3
3
 
4
4
  ## TODO
5
- Describe the following Macro's:
5
+ Describe the following Macros:
6
6
  - Nested
7
7
  - Rescue
8
8
  - Wrap
@@ -8,7 +8,6 @@ module Trailblazer::Macro
8
8
  def self.build(callable)
9
9
  option = Trailblazer::Option(callable)
10
10
 
11
- # this gets wrapped in a Operation::Result object.
12
11
  ->((ctx, *), **circuit_args) do
13
12
  Trailblazer::Operation::Result.new(!!option.call(ctx, keyword_arguments: ctx.to_hash, **circuit_args), {})
14
13
  end
@@ -1,54 +1,60 @@
1
- module Trailblazer::Macro
1
+ module Trailblazer
2
+ module Macro
2
3
 
3
- Linear = Trailblazer::Activity::DSL::Linear
4
+ def self.Model(model_class = nil, action = :new, find_by_key = :id, id: 'model.build', not_found_terminus: false)
5
+ task = Activity::TaskBuilder::Binary(Model.new)
4
6
 
5
- def self.Model(model_class, action = nil, find_by_key = nil, id: 'model.build', not_found_terminus: false)
6
- task = Trailblazer::Activity::TaskBuilder::Binary(Model.new)
7
+ injections = {
8
+ Activity::Railway.Inject() => [:params], # pass-through {:params} if it's in ctx.
7
9
 
8
- injection = Trailblazer::Activity::TaskWrap::Inject::Defaults::Extension(
9
- :"model.class" => model_class,
10
- :"model.action" => action,
11
- :"model.find_by_key" => find_by_key
12
- )
10
+ # defaulting as per Inject() API.
11
+ Activity::Railway.Inject() => {
12
+ :"model.class" => ->(*) { model_class },
13
+ :"model.action" => ->(*) { action },
14
+ :"model.find_by_key" => ->(*) { find_by_key },
15
+ }
16
+ }
13
17
 
14
- options = { task: task, id: id, extensions: [injection] }
15
- options = options.merge(Linear::Output(:failure) => Linear::End(:not_found)) if not_found_terminus
18
+ options = {task: task, id: id}.merge(injections)
16
19
 
17
- options
18
- end
20
+ options = options.merge(Activity::Railway.Output(:failure) => Activity::Railway.End(:not_found)) if not_found_terminus
19
21
 
20
- class Model
21
- def call(options, params: nil, **)
22
- builder = Model::Builder.new
23
- options[:model] = model = builder.call(options, params)
24
- options[:"result.model"] = result = Trailblazer::Operation::Result.new(!model.nil?, {})
25
-
26
- result.success?
22
+ options
27
23
  end
28
24
 
29
- class Builder
30
- def call(options, params)
31
- action = options[:"model.action"] || :new
32
- model_class = options[:"model.class"]
33
- find_by_key = options[:"model.find_by_key"] || :id
34
- action = :pass_through unless %i[new find_by].include?(action)
35
-
36
- send("#{action}!", model_class, params, options[:"model.action"], find_by_key)
37
- end
38
-
39
- def new!(model_class, params, *)
40
- model_class.new
41
- end
25
+ class Model
26
+ def call(ctx, params: {}, **)
27
+ builder = Model::Builder.new
28
+ ctx[:model] = model = builder.call(ctx, params)
29
+ ctx[:"result.model"] = result = Operation::Result.new(!model.nil?, {})
42
30
 
43
- # Doesn't throw an exception and will return false to divert to Left.
44
- def find_by!(model_class, params, action, find_by_key, *)
45
- model_class.find_by(find_by_key.to_sym => params[find_by_key])
31
+ result.success?
46
32
  end
47
33
 
48
- # Call any method on the model class and pass find_by_key, for example find(params[:id]).
49
- def pass_through!(model_class, params, action, find_by_key, *)
50
- model_class.send(action, params[find_by_key])
34
+ class Builder
35
+ def call(ctx, params)
36
+ action = ctx[:"model.action"]
37
+ model_class = ctx[:"model.class"]
38
+ find_by_key = ctx[:"model.find_by_key"]
39
+ action = :pass_through unless %i[new find_by].include?(action)
40
+
41
+ send("#{action}!", model_class, params, ctx[:"model.action"], find_by_key)
42
+ end
43
+
44
+ def new!(model_class, params, *)
45
+ model_class.new
46
+ end
47
+
48
+ # Doesn't throw an exception and will return false to divert to Left.
49
+ def find_by!(model_class, params, action, find_by_key, *)
50
+ model_class.find_by(find_by_key.to_sym => params[find_by_key])
51
+ end
52
+
53
+ # Call any method on the model class and pass find_by_key, for example find(params[:id]).
54
+ def pass_through!(model_class, params, action, find_by_key, *)
55
+ model_class.send(action, params[find_by_key])
56
+ end
51
57
  end
52
58
  end
53
- end
59
+ end # Macro
54
60
  end
@@ -9,24 +9,26 @@ module Trailblazer
9
9
  "Using the `Nested()` macro with operations and activities is deprecated. " \
10
10
  "Replace `Nested(#{callable})` with `Subprocess(#{callable})`."
11
11
 
12
- return Nested.operation_class.Subprocess(callable)
12
+ return Activity::Railway.Subprocess(callable)
13
13
  end
14
14
 
15
- # dynamic
16
- task = Nested::Dynamic.new(callable, auto_wire: auto_wire)
15
+ task, outputs, compute_legacy_return_signal = Nested.Dynamic(callable, auto_wire: auto_wire)
17
16
 
18
17
  merge = [
19
- [Activity::TaskWrap::Pipeline.method(:insert_before), "task_wrap.call_task", ["Nested.compute_nested_activity", task.method(:compute_nested_activity)]],
20
- [Activity::TaskWrap::Pipeline.method(:insert_after), "task_wrap.call_task", ["Nested.compute_return_signal", task.method(:compute_return_signal)]],
18
+ [task, id: "Nested.compute_nested_activity", prepend: "task_wrap.call_task"],
21
19
  ]
22
20
 
23
- task_wrap_extension = Activity::TaskWrap::Extension(merge: merge)
21
+ if compute_legacy_return_signal
22
+ merge << [compute_legacy_return_signal, id: "Nested.compute_return_signal", append: "task_wrap.call_task"]
23
+ end
24
+
25
+ task_wrap_extension = Activity::TaskWrap::Extension::WrapStatic.new(extension: Activity::TaskWrap::Extension(*merge))
24
26
 
25
27
  {
26
28
  task: task,
27
29
  id: id,
28
30
  extensions: [task_wrap_extension],
29
- outputs: task.outputs,
31
+ outputs: outputs,
30
32
  }
31
33
  end
32
34
 
@@ -45,57 +47,64 @@ module Trailblazer
45
47
  # by passing their list to {:auto_wire} option.
46
48
  #
47
49
  # step Nested(:compute_nested, auto_wire: [Create, Update])
48
- class Dynamic
49
- STATIC_OUTPUTS = {
50
- :success => Activity::Output(Activity::Railway::End::Success.new(semantic: :success), :success),
51
- :failure => Activity::Output(Activity::Railway::End::Failure.new(semantic: :failure), :failure),
52
- }
53
-
54
- def initialize(nested_activity_decider, auto_wire: [])
55
- @nested_activity_decider = Trailblazer::Option(nested_activity_decider)
56
- @known_activities = Array(auto_wire)
57
- @outputs = compute_task_outputs
50
+ def self.Dynamic(nested_activity_decider, auto_wire:)
51
+ if auto_wire.empty?
52
+ is_legacy = true # no auto_wire means we need to compute the legacy return signal.
53
+ auto_wire = [Class.new(Activity::Railway)]
58
54
  end
59
55
 
60
- attr_reader :outputs
56
+ outputs = outputs_for(auto_wire)
57
+ task = Dynamic.new(nested_activity_decider)
58
+ compute_legacy_return_signal = Dynamic::ComputeLegacyReturnSignal.new(outputs) if is_legacy
59
+
60
+ return task, outputs, compute_legacy_return_signal
61
+ end
62
+
63
+ # Go through the list of all possible nested activities and compile the total sum of possible outputs.
64
+ # FIXME: WHAT IF WE HAVE TWO IDENTICALLY NAMED OUTPUTS?
65
+ # @private
66
+ def self.outputs_for(activities)
67
+ activities.map do |activity|
68
+ Activity::Railway.Subprocess(activity)[:outputs]
69
+ end.inject(:merge)
70
+ end
71
+
72
+ class Dynamic
73
+ def initialize(nested_activity_decider)
74
+ @nested_activity_decider = Trailblazer::Option(nested_activity_decider)
75
+ end
61
76
 
62
77
  # TaskWrap step.
63
- def compute_nested_activity(wrap_ctx, original_args)
78
+ def call(wrap_ctx, original_args)
64
79
  (ctx, _), original_circuit_options = original_args
65
80
 
66
81
  # TODO: evaluate the option to get the actual "object" to call.
67
82
  activity = @nested_activity_decider.(ctx, keyword_arguments: ctx.to_hash, **original_circuit_options)
68
83
 
69
84
  # Overwrite :task so task_wrap.call_task will call this activity.
70
- # This is a trick so we don't have to repeat logic from #call_task here.
85
+ # This is a taskWrap trick so we don't have to repeat logic from #call_task here.
71
86
  wrap_ctx[:task] = activity
72
87
 
73
88
  return wrap_ctx, original_args
74
89
  end
75
90
 
76
- def compute_return_signal(wrap_ctx, original_args)
77
- # NOOP when @known_activities are present as all possible signals have been registered already.
78
- if @known_activities.empty?
79
- # Translate the genuine nested signal to the generic Dynamic end (success/failure, only).
80
- # Note that here we lose information about what specific event was emitted.
81
- wrap_ctx[:return_signal] = wrap_ctx[:return_signal].kind_of?(Activity::Railway::End::Success) ?
82
- @outputs[:success].signal : @outputs[:failure].signal
91
+ # TODO: remove me when we make {:auto_wire} mandatory.
92
+ class ComputeLegacyReturnSignal
93
+ SUCCESS_SEMANTICS = [:success, :pass_fast] # TODO: make this injectable/or get it from operation.
94
+
95
+ def initialize(outputs)
96
+ @outputs = outputs # not needed for auto_wire!
83
97
  end
84
98
 
85
- return wrap_ctx, original_args
86
- end
99
+ def call(wrap_ctx, original_args)
100
+ actual_semantic = wrap_ctx[:return_signal].to_h[:semantic]
101
+ applied_semantic = SUCCESS_SEMANTICS.include?(actual_semantic) ? :success : :failure
87
102
 
88
- private def compute_task_outputs
89
- # If :auto_wire is empty, we map outputs to :success and :failure only, for backward compatibility.
90
- # This is what {Nested} in 2.0 used to do, where the outcome could only be true/false (or success/failure).
91
- return STATIC_OUTPUTS if @known_activities.empty?
103
+ wrap_ctx[:return_signal] = @outputs.fetch(applied_semantic).signal
92
104
 
93
- # Merge activity#outputs from all given auto_wirable activities to wire up for this dynamic task.
94
- @known_activities.map do |activity|
95
- # TODO: Replace this when it's helper gets added.
96
- Hash[activity.to_h[:outputs].collect{ |output| [output.semantic, output] }]
97
- end.inject(:merge)
98
- end
105
+ return wrap_ctx, original_args
106
+ end
107
+ end # ComputeLegacyReturnSignal
99
108
  end
100
109
  end
101
110
  end
@@ -8,35 +8,38 @@ module Trailblazer::Macro
8
8
  @path = path
9
9
  end
10
10
 
11
- # incoming low-level {Task API}.
11
+ # incoming low-level {circuit interface}.
12
12
  # outgoing Task::Binary API.
13
- def call((options, flow_options), **circuit_options)
14
- condition = options[@path] # this allows dependency injection.
15
- result = condition.([options, flow_options], **circuit_options)
13
+ #
14
+ # Retrieve the injectable {condition}, execute it and interpret its {Result} object.
15
+ def call((ctx, flow_options), **circuit_options)
16
+ condition = ctx[@path] # this allows dependency injection.
17
+ result = condition.([ctx, flow_options], **circuit_options)
16
18
 
17
- options[:"policy.#{@name}"] = result[:policy] # assign the policy as a skill.
18
- options[:"result.policy.#{@name}"] = result
19
+ ctx[:"policy.#{@name}"] = result[:policy] # assign the policy as a ctx variable.
20
+ ctx[:"result.policy.#{@name}"] = result
19
21
 
20
22
  # flow control
21
- signal = result.success? ? Trailblazer::Activity::Right : Trailblazer::Activity::Left # since we & this, it's only executed OnRight and the return boolean decides the direction, input is passed straight through.
23
+ signal = result.success? ? Trailblazer::Activity::Right : Trailblazer::Activity::Left
22
24
 
23
- return signal, [options, flow_options]
25
+ return signal, [ctx, flow_options]
24
26
  end
25
27
  end
26
28
 
27
- # Adds the `yield` result to the pipe and treats it like a
29
+ # Adds the `yield` result to the Railway and treats it like a
28
30
  # policy-compatible object at runtime.
29
- def self.step(condition, options, &block)
30
- name = options[:name]
31
+ def self.step(condition, name: nil, &block)
31
32
  path = :"policy.#{name}.eval"
32
-
33
33
  task = Eval.new(name: name, path: path)
34
34
 
35
- injection = Trailblazer::Activity::TaskWrap::Inject::Defaults::Extension(
36
- path => condition
37
- )
35
+ injections = {
36
+ Trailblazer::Activity::Railway.Inject() => {
37
+ # :"policy.default.eval"
38
+ path => ->(*) { condition }
39
+ }
40
+ }
38
41
 
39
- {task: task, id: path, extensions: [injection]}
42
+ {task: task, id: path}.merge(injections)
40
43
  end
41
44
  end
42
45
  end
@@ -1,7 +1,7 @@
1
1
  module Trailblazer
2
2
  module Version
3
3
  module Macro
4
- VERSION = "2.1.7"
4
+ VERSION = "2.1.11"
5
5
  end
6
6
  end
7
7
  end
@@ -1,5 +1,4 @@
1
1
  require "forwardable"
2
- require "trailblazer/activity"
3
2
  require "trailblazer/activity/dsl/linear"
4
3
  require "trailblazer/operation" # TODO: remove this dependency
5
4
 
@@ -17,12 +16,13 @@ module Trailblazer
17
16
 
18
17
  # All macros sit in the {Trailblazer::Macro} namespace, where we forward calls from
19
18
  # operations and activities to.
19
+
20
20
  module Activity::DSL::Linear::Helper
21
- Policy = Trailblazer::Macro::Policy
21
+ Constants::Policy = Trailblazer::Macro::Policy
22
22
 
23
- module ClassMethods
24
- extend Forwardable
25
- def_delegators Trailblazer::Macro, :Model, :Nested, :Wrap, :Rescue
26
- end # ClassMethods
23
+ # Extending the {Linear::Helper} namespace is the canonical way to import
24
+ # macros into Railway, FastTrack, Operation, etc.
25
+ extend Forwardable
26
+ def_delegators Trailblazer::Macro, :Model, :Nested, :Wrap, :Rescue
27
27
  end # Helper
28
28
  end
@@ -21,6 +21,17 @@ class DocsModelTest < Minitest::Spec
21
21
  end
22
22
  #:op end
23
23
 
24
+
25
+ it "defaults {:params} to empty hash when not passed" do
26
+ result = Create.({})
27
+ assert_equal true, result.success?
28
+ assert_equal %{#<struct DocsModelTest::Song id=nil, title=nil>}, result[:model].inspect
29
+
30
+ result = Update.({})
31
+ assert_equal false, result.success?
32
+ assert_equal "nil", result[:model].inspect
33
+ end
34
+
24
35
  it do
25
36
  #:create
26
37
  result = Create.(params: {})
@@ -126,13 +137,38 @@ class DocsModelTest < Minitest::Spec
126
137
  class Hit < Song
127
138
  end
128
139
 
140
+ #:di-model-class
129
141
  result = Create.(params: {}, :"model.class" => Hit)
142
+ #:di-model-class end
130
143
 
131
144
  result[:model].inspect.must_equal %{#<struct DocsModelTest::Hit id=nil, title=nil>}
132
145
 
133
146
  # inject all variables
134
- result = Create.(params: {title: "Olympia"}, "model.class": Hit, "model.action": :find_by, "model.find_by_key": :title)
147
+ #:di-all
148
+ result = Create.(
149
+ params: {title: "Olympia"}, # some random variable.
150
+ "model.class": Hit,
151
+ "model.action": :find_by,
152
+ "model.find_by_key": :title
153
+ )
154
+ #:di-all end
135
155
 
136
156
  result[:model].inspect.must_equal %{#<struct DocsModelTest::Hit id=2, title="Olympia">}
157
+
158
+ # use empty Model() and inject {model.class} and {model.action}
159
+ module A
160
+ #:op-model-empty
161
+ class Create < Trailblazer::Operation
162
+ step Model()
163
+ # ..
164
+ end
165
+ #:op-model-empty end
166
+ end # A
167
+
168
+ result = A::Create.(params: {}, :"model.class" => Hit)
169
+
170
+ result[:model].inspect.must_equal %{#<struct DocsModelTest::Hit id=nil, title=nil>}
171
+
172
+
137
173
  end
138
174
  end
@@ -151,7 +151,8 @@ class NestedInput < Minitest::Spec
151
151
  end
152
152
  #:nested-with-pass-fast end
153
153
 
154
- # pass fast
154
+ #= {#save} is still called because the {End.pass_fast} terminus is automatically wired to
155
+ #= the success "output" of Nested().
155
156
  create.(seq: []).inspect(:seq).must_equal %{<Result:true [[:create, :just_pass_fast, :save]] >}
156
157
  end
157
158
  end
@@ -159,15 +160,16 @@ class NestedInput < Minitest::Spec
159
160
  it "Nested(:method, auto_wire: *activities) with :pass_fast => End()" do
160
161
  module E
161
162
  class JsonValidate < Trailblazer::Operation
162
- step :validate, Output(:success) => End(:json_validate)
163
- include T.def_steps(:validate)
163
+ step :validate, Output(:failure) => End(:invalid_json)
164
+ step :save
165
+ include T.def_steps(:validate, :save)
164
166
  end
165
167
 
166
168
  #:nested-with-auto-wire
167
169
  class Create < Trailblazer::Operation
168
170
  step :create
169
171
  step Nested(:compute_nested, auto_wire: [Validate, JsonValidate]),
170
- Output(:json_validate) => End(:jsoned)
172
+ Output(:invalid_json) => End(:jsoned)
171
173
 
172
174
  #~meths
173
175
  def compute_nested(ctx, what:, **)
@@ -179,10 +181,36 @@ class NestedInput < Minitest::Spec
179
181
  end
180
182
  #:nested-with-auto-wire end
181
183
 
182
- result = Create.(seq: [], what: JsonValidate)
184
+
185
+ #@ nested {JsonValidate} ends on {End.success}
186
+ result = Create.(seq: [], what: JsonValidate, validate: true)
187
+
188
+ result.inspect(:seq).must_equal %{<Result:true [[:create, :validate, :save]] >}
189
+ result.event.inspect.must_equal %{#<Trailblazer::Activity::Railway::End::Success semantic=:success>}
190
+
191
+ #@ nested {JsonValidate} ends on {End.invalid_json} because validate fails.
192
+ result = Create.(seq: [], what: JsonValidate, validate: false)
183
193
 
184
194
  result.inspect(:seq).must_equal %{<Result:false [[:create, :validate]] >}
185
195
  result.event.inspect.must_equal %{#<Trailblazer::Activity::End semantic=:jsoned>}
196
+
197
+ #@ nested {JsonValidate} ends on {End.failure} because save fails.
198
+ result = Create.(seq: [], what: JsonValidate, save: false)
199
+
200
+ result.inspect(:seq).must_equal %{<Result:false [[:create, :validate, :save]] >}
201
+ result.event.inspect.must_equal %{#<Trailblazer::Activity::Railway::End::Failure semantic=:failure>}
202
+
203
+ #@ nested {Validate} ends on {End.failure} because validate fails.
204
+ result = Create.(seq: [], what: Validate, validate: false)
205
+
206
+ result.inspect(:seq).must_equal %{<Result:false [[:create, :validate]] >}
207
+ result.event.inspect.must_equal %{#<Trailblazer::Activity::Railway::End::Failure semantic=:failure>}
208
+
209
+ #@ nested {Validate} ends on {End.success}.
210
+ result = Create.(seq: [], what: Validate)
211
+
212
+ result.inspect(:seq).must_equal %{<Result:true [[:create, :validate]] >}
213
+ result.event.inspect.must_equal %{#<Trailblazer::Activity::Railway::End::Success semantic=:success>}
186
214
  end
187
215
  end
188
216
  end
@@ -49,6 +49,28 @@ class NestedTest < Minitest::Spec
49
49
  result.event.inspect.must_equal %{#<Trailblazer::Activity::Railway::End::Success semantic=:success>}
50
50
  end
51
51
 
52
+ #@ unit test
53
+ # TODO: make me a non-Operation test.
54
+ it "allows using multiple Nested() per operation" do
55
+ create = Class.new(Trailblazer::Operation) do
56
+ def compute_nested(ctx, what:, **)
57
+ what
58
+ end
59
+
60
+ step Nested(:compute_nested)
61
+ step Nested(:compute_nested), id: :compute_nested_again
62
+ end
63
+
64
+ #@ we want both Nested executed
65
+ result = create.(seq: [], what: SignIn)
66
+ result.inspect(:seq).must_equal %{<Result:true [[:c, :c]] >}
67
+ result.event.inspect.must_equal %{#<Trailblazer::Activity::Railway::End::Success semantic=:success>}
68
+
69
+ result = create.wtf?(seq: [], what: SignUp)
70
+ result.inspect(:seq).must_equal %{<Result:false [[:b]] >}
71
+ result.event.inspect.must_equal %{#<Trailblazer::Activity::Railway::End::Failure semantic=:failure>}
72
+ end
73
+
52
74
  it "raises RuntimeError if dynamically nested activities with custom output are not auto wired" do
53
75
  exception = assert_raises RuntimeError do
54
76
  Class.new(Trailblazer::Operation) do
@@ -25,8 +25,8 @@ Gem::Specification.new do |spec|
25
25
  spec.add_development_dependency "roar"
26
26
  spec.add_development_dependency "trailblazer-developer"
27
27
 
28
- spec.add_dependency "trailblazer-activity-dsl-linear", ">= 0.4.0", "< 0.5.0"
29
- spec.add_dependency "trailblazer-operation", ">= 0.7.0" # TODO: this dependency will be removed.
28
+ spec.add_dependency "trailblazer-activity-dsl-linear", ">= 1.0.0", "< 1.1.0"
29
+ spec.add_dependency "trailblazer-operation", ">= 0.8.0" # TODO: this dependency will be removed. currently needed for tests?!
30
30
 
31
31
  spec.required_ruby_version = ">= 2.2.0"
32
32
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trailblazer-macro
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.7
4
+ version: 2.1.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Sutterer
8
8
  - Marc Tich
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-11-09 00:00:00.000000000 Z
12
+ date: 2022-08-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -101,34 +101,34 @@ dependencies:
101
101
  requirements:
102
102
  - - ">="
103
103
  - !ruby/object:Gem::Version
104
- version: 0.4.0
104
+ version: 1.0.0
105
105
  - - "<"
106
106
  - !ruby/object:Gem::Version
107
- version: 0.5.0
107
+ version: 1.1.0
108
108
  type: :runtime
109
109
  prerelease: false
110
110
  version_requirements: !ruby/object:Gem::Requirement
111
111
  requirements:
112
112
  - - ">="
113
113
  - !ruby/object:Gem::Version
114
- version: 0.4.0
114
+ version: 1.0.0
115
115
  - - "<"
116
116
  - !ruby/object:Gem::Version
117
- version: 0.5.0
117
+ version: 1.1.0
118
118
  - !ruby/object:Gem::Dependency
119
119
  name: trailblazer-operation
120
120
  requirement: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
- version: 0.7.0
124
+ version: 0.8.0
125
125
  type: :runtime
126
126
  prerelease: false
127
127
  version_requirements: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - ">="
130
130
  - !ruby/object:Gem::Version
131
- version: 0.7.0
131
+ version: 0.8.0
132
132
  description: Macros for Trailblazer's operation
133
133
  email:
134
134
  - apotonick@gmail.com
@@ -173,7 +173,7 @@ homepage: http://trailblazer.to
173
173
  licenses:
174
174
  - LGPL-3.0
175
175
  metadata: {}
176
- post_install_message:
176
+ post_install_message:
177
177
  rdoc_options: []
178
178
  require_paths:
179
179
  - lib
@@ -188,8 +188,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
188
188
  - !ruby/object:Gem::Version
189
189
  version: '0'
190
190
  requirements: []
191
- rubygems_version: 3.0.8
192
- signing_key:
191
+ rubygems_version: 3.2.3
192
+ signing_key:
193
193
  specification_version: 4
194
194
  summary: 'Macros for Trailblazer''s operation: Policy, Wrap, Rescue and more.'
195
195
  test_files: