trailblazer-macro 2.1.7 → 2.1.9

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2b94581daf3c1a0afeea2d8a3d9f470393b15fbfe57fe01dc29c5d1f247beb7c
4
- data.tar.gz: dff368470d21d9fb0f9522bf610ef1e62b51eebf59f9c41f371298d12d11b8e5
3
+ metadata.gz: 639ab06bc834f5258e404d9c87e1e53db434884225e6f6c222afcb9df9597154
4
+ data.tar.gz: b5f08c21b83529cd8a12fed2e6ef3e638a9db546b2d57d651f3a9f9adec8ff3c
5
5
  SHA512:
6
- metadata.gz: 0a2547701dec5fd643a229313dfeab1d047b1b469208ba54c950cf6f496ef07aa950e6674fb96221fea898dcaff8329f2f3d2ff1f9bec7fa0b758599a96e6329
7
- data.tar.gz: a0fb745ffb5a9a313764a08972f5271f66e2f07c097759bd5cccb0521b1f80cf72eadaf3c71ae1dc5abdc8bd311abf0aabf6aed4dbea728328a9c590249d9e24
6
+ metadata.gz: ebf4969c76b10be6b3e842376ebbb6bb5fd73bd7a3c8fe1f6c61ab1efb9e8d945b3bb13404fcf6cdbead3590deb5cf9aeaf0150a32209d14107e2019981732ed
7
+ data.tar.gz: 5d485adedac0da50b68f3528ddaf80329f9d33a06cd6768e7a7c1d430c4f7ff05bf5daafbf14eb174fd821bbb5d1108150bbb278fbc7eacb960c26fd8f058cca
data/CHANGES.md CHANGED
@@ -1,3 +1,12 @@
1
+ # 2.1.9
2
+
3
+ * Allow omitting `:params` when calling the operation by defaulting it to `{}` in `Model()`.
4
+ * Use `dsl-linear` 0.5.0 and above, which allows removing `Inject()` uses.
5
+
6
+ # 2.1.8
7
+
8
+ Yanked due to inconsistency.
9
+
1
10
  # 2.1.7
2
11
 
3
12
  * 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
@@ -2,38 +2,39 @@ module Trailblazer::Macro
2
2
 
3
3
  Linear = Trailblazer::Activity::DSL::Linear
4
4
 
5
- def self.Model(model_class, action = nil, find_by_key = nil, id: 'model.build', not_found_terminus: false)
5
+ def self.Model(model_class = nil, action = :new, find_by_key = :id, id: 'model.build', not_found_terminus: false)
6
6
  task = Trailblazer::Activity::TaskBuilder::Binary(Model.new)
7
7
 
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
- )
8
+ injections = { # defaulting as per `:inject` API.
9
+ :"model.class" => ->(*) { model_class },
10
+ :"model.action" => ->(*) { action },
11
+ :"model.find_by_key" => ->(*) { find_by_key },
12
+ }
13
+
14
+ options = {task: task, id: id, inject: [:params, injections]} # pass-through {:params} if it's in ctx.
13
15
 
14
- options = { task: task, id: id, extensions: [injection] }
15
16
  options = options.merge(Linear::Output(:failure) => Linear::End(:not_found)) if not_found_terminus
16
17
 
17
18
  options
18
19
  end
19
20
 
20
21
  class Model
21
- def call(options, params: nil, **)
22
+ def call(ctx, params: {}, **)
22
23
  builder = Model::Builder.new
23
- options[:model] = model = builder.call(options, params)
24
- options[:"result.model"] = result = Trailblazer::Operation::Result.new(!model.nil?, {})
24
+ ctx[:model] = model = builder.call(ctx, params)
25
+ ctx[:"result.model"] = result = Trailblazer::Operation::Result.new(!model.nil?, {})
25
26
 
26
27
  result.success?
27
28
  end
28
29
 
29
30
  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
31
+ def call(ctx, params)
32
+ action = ctx[:"model.action"]
33
+ model_class = ctx[:"model.class"]
34
+ find_by_key = ctx[:"model.find_by_key"]
34
35
  action = :pass_through unless %i[new find_by].include?(action)
35
36
 
36
- send("#{action}!", model_class, params, options[:"model.action"], find_by_key)
37
+ send("#{action}!", model_class, params, ctx[:"model.action"], find_by_key)
37
38
  end
38
39
 
39
40
  def new!(model_class, params, *)
@@ -8,35 +8,36 @@ 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
+ # :"policy.default.eval"
37
+ path => ->(*) { condition }
38
+ }
38
39
 
39
- {task: task, id: path, extensions: [injection]}
40
+ {task: task, id: path, inject: [injections]}
40
41
  end
41
42
  end
42
43
  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.9"
5
5
  end
6
6
  end
7
7
  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
@@ -25,7 +25,7 @@ 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"
28
+ spec.add_dependency "trailblazer-activity-dsl-linear", ">= 0.5.0", "< 0.6.0"
29
29
  spec.add_dependency "trailblazer-operation", ">= 0.7.0" # TODO: this dependency will be removed.
30
30
 
31
31
  spec.required_ruby_version = ">= 2.2.0"
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.9
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: 2021-12-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -101,20 +101,20 @@ dependencies:
101
101
  requirements:
102
102
  - - ">="
103
103
  - !ruby/object:Gem::Version
104
- version: 0.4.0
104
+ version: 0.5.0
105
105
  - - "<"
106
106
  - !ruby/object:Gem::Version
107
- version: 0.5.0
107
+ version: 0.6.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: 0.5.0
115
115
  - - "<"
116
116
  - !ruby/object:Gem::Version
117
- version: 0.5.0
117
+ version: 0.6.0
118
118
  - !ruby/object:Gem::Dependency
119
119
  name: trailblazer-operation
120
120
  requirement: !ruby/object:Gem::Requirement
@@ -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: