trailblazer 2.1.0.beta3 → 2.1.0.beta4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.travis.yml +2 -0
- data/CHANGES.md +5 -0
- data/Gemfile +1 -1
- data/README.md +1 -0
- data/lib/trailblazer/operation/auto_inject.rb +5 -5
- data/lib/trailblazer/operation/nested.rb +3 -2
- data/lib/trailblazer/operation/wrap.rb +2 -0
- data/lib/trailblazer/version.rb +1 -1
- data/test/docs/auto_inject_test.rb +9 -2
- data/test/docs/fast_test.rb +1 -1
- data/test/docs/input_output_test.rb +7 -0
- data/test/docs/pundit_test.rb +2 -2
- data/test/docs/rescue_test.rb +1 -1
- data/test/docs/wrap_test.rb +9 -6
- data/test/module_test.rb +1 -1
- data/test/nested_test.rb +2 -2
- data/test/operation/dsl/contract_test.rb +2 -2
- data/test/test_helper.rb +7 -0
- data/trailblazer.gemspec +1 -1
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 044bf54cdca3624c8e6bc5da16773c89de007343daa9312144a64699e7e4be01
|
4
|
+
data.tar.gz: ef916032a3a00776e16e743f443b3ce6a7388f1b3ae39e87d6014223e896a897
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c18bec78e4bf2dd29865bf0644f8aad697e32066144a56c4ebda7fa52d9736a9991e2807da38bb2b0d07da51e1de8714a8a937f212141a8955a59c9c03e1342c
|
7
|
+
data.tar.gz: 9e8a51483076587ff6b495d46597f38f624dbbfe718517c93cd9a94a4fabee7d224ab415a8e913986bffeee76dd1c4255e94ceb73e12b7f96bb4fbb47484e8a0
|
data/.travis.yml
CHANGED
data/CHANGES.md
CHANGED
@@ -7,6 +7,7 @@
|
|
7
7
|
* Wrap
|
8
8
|
dropped the `pipe` option. This is now `options, flow_options, *`
|
9
9
|
`false` is now automatically connected to End.failure.
|
10
|
+
* remove `Uber::Callable`.
|
10
11
|
|
11
12
|
* `operation.new` step removed.
|
12
13
|
* Undocumented step behavior removed. You can't write to `self` anymore.
|
@@ -29,6 +30,10 @@ document Task API and define step API
|
|
29
30
|
deprecate step->(options) ?
|
30
31
|
injectable, per-operation step arguments strategy?
|
31
32
|
|
33
|
+
# 2.1.0.beta4
|
34
|
+
|
35
|
+
* Simple maintenance release to establish `activity-0.5.0`.
|
36
|
+
|
32
37
|
# 2.1.0.beta3
|
33
38
|
|
34
39
|
* More simplifications because of `activity`.
|
data/Gemfile
CHANGED
@@ -14,7 +14,7 @@ gem "dry-auto_inject"
|
|
14
14
|
gem "dry-matcher"
|
15
15
|
gem "dry-validation"
|
16
16
|
|
17
|
-
|
17
|
+
gem "trailblazer-operation", path: "../operation"
|
18
18
|
# gem "trailblazer-operation", github: "trailblazer/trailblazer-operation"
|
19
19
|
|
20
20
|
gem "minitest-line"
|
data/README.md
CHANGED
@@ -5,6 +5,7 @@ _Trailblazer provides new high-level abstractions for Ruby frameworks. It gently
|
|
5
5
|
[![Gitter Chat](https://badges.gitter.im/trailblazer/chat.svg)](https://gitter.im/trailblazer/chat)
|
6
6
|
[![TRB Newsletter](https://img.shields.io/badge/TRB-newsletter-lightgrey.svg)](http://trailblazer.to/newsletter/)
|
7
7
|
[![Gem Version](https://badge.fury.io/rb/trailblazer.svg)](http://badge.fury.io/rb/trailblazer)
|
8
|
+
[![Open Source Helpers](https://www.codetriage.com/trailblazer/trailblazer/badges/users.svg)](https://www.codetriage.com/trailblazer/trailblazer)
|
8
9
|
|
9
10
|
**This document discusses Trailblazer 2.1.** An overview about the additions are [on our website](http://trailblazer.to/blog/2017-12-trailblazer-2-1-what-you-need-to-know.html).
|
10
11
|
|
@@ -29,12 +29,12 @@ class Trailblazer::Operation
|
|
29
29
|
|
30
30
|
def define_call
|
31
31
|
class_mod.class_exec(container, dependency_map) do |container, dependency_map|
|
32
|
-
define_method :call do |
|
33
|
-
|
34
|
-
obj[name] =
|
35
|
-
}.merge(
|
32
|
+
define_method :call do |ctx={}, *dependencies|
|
33
|
+
ctx_with_deps = dependency_map.to_h.each_with_object({}) { |(name, identifier), obj|
|
34
|
+
obj[name] = ctx[name] || container[identifier]
|
35
|
+
}.merge(ctx)
|
36
36
|
|
37
|
-
super(
|
37
|
+
super(ctx_with_deps, *dependencies)
|
38
38
|
end
|
39
39
|
end
|
40
40
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# per default, everything we pass into a circuit is immutable. it's the ops/act's job to allow writing (via a Context)
|
2
2
|
module Trailblazer
|
3
3
|
class Operation
|
4
|
+
# {Nested} macro.
|
4
5
|
def self.Nested(callable, input:nil, output:nil, id: "Nested(#{callable})")
|
5
6
|
task_wrap_extensions = Module.new do
|
6
7
|
extend Activity::Path::Plan()
|
@@ -35,7 +36,7 @@ module Trailblazer
|
|
35
36
|
# The returned {Nested} instance is a valid circuit element and will be `call`ed in the circuit.
|
36
37
|
# It simply returns the nested activity's `signal,options,flow_options` return set.
|
37
38
|
# The actual wiring - where to go with that - is done by the step DSL.
|
38
|
-
return Trailblazer::
|
39
|
+
return Trailblazer::Operation::Callable(nested_operation, call: :__call__), nested_operation, false
|
39
40
|
end
|
40
41
|
|
41
42
|
def self.nestable_object?(object)
|
@@ -71,7 +72,7 @@ module Trailblazer
|
|
71
72
|
|
72
73
|
# overwrite :task so task_wrap.call_task will call this activity. This is a trick so we don't have to repeat
|
73
74
|
# logic from #call_task here.
|
74
|
-
wrap_ctx[:task] = Trailblazer::
|
75
|
+
wrap_ctx[:task] = Trailblazer::Operation::Callable( activity, call: :__call__ )
|
75
76
|
|
76
77
|
return Activity::Right, [ wrap_ctx, original_args ]
|
77
78
|
end
|
@@ -46,6 +46,8 @@ class Trailblazer::Operation
|
|
46
46
|
# FIXME: we *might* return some "older version" of options here!
|
47
47
|
if returned === false
|
48
48
|
return @operation.outputs[:failure].signal, [options, flow_options]
|
49
|
+
elsif returned === true
|
50
|
+
return @operation.outputs[:success].signal, [options, flow_options]
|
49
51
|
end
|
50
52
|
|
51
53
|
returned # let's hope returned is one of activity's Ends.
|
data/lib/trailblazer/version.rb
CHANGED
@@ -10,15 +10,22 @@ class DryAutoInjectTest < Minitest::Spec
|
|
10
10
|
|
11
11
|
class Create < Trailblazer::Operation
|
12
12
|
include AutoInject[:user_repository]
|
13
|
+
|
14
|
+
pass :use_it!
|
15
|
+
|
16
|
+
def use_it!(ctx, user_repository:, **)
|
17
|
+
ctx[:my_repo] = user_repository
|
18
|
+
end
|
13
19
|
end
|
14
20
|
|
15
21
|
it "auto-injects user_repository" do
|
16
|
-
res = Create.({})
|
22
|
+
res = Create.(params: {})
|
17
23
|
res[:user_repository].must_equal Object
|
24
|
+
res[:my_repo].must_equal Object
|
18
25
|
end
|
19
26
|
|
20
27
|
it "allows dependency injection via ::call" do
|
21
|
-
Create.({}, user_repository: String)[:user_repository].must_equal String
|
28
|
+
Create.(params: {}, user_repository: String)[:user_repository].must_equal String
|
22
29
|
end
|
23
30
|
|
24
31
|
describe "inheritance" do
|
data/test/docs/fast_test.rb
CHANGED
@@ -231,7 +231,7 @@ class FastTrackWithNestedTest < Minitest::Spec
|
|
231
231
|
#:ft-rewire
|
232
232
|
class Memo::Create < Trailblazer::Operation
|
233
233
|
step :validate
|
234
|
-
step Nested( Lib::Authenticate ), Output(:fail_fast) => :failure
|
234
|
+
step Nested( Lib::Authenticate ), Output(:fail_fast) => Track(:failure)
|
235
235
|
step :create_model
|
236
236
|
step :save
|
237
237
|
#~ignrw
|
data/test/docs/pundit_test.rb
CHANGED
@@ -122,9 +122,9 @@ end
|
|
122
122
|
# end
|
123
123
|
# #:class-level end
|
124
124
|
|
125
|
-
# it { Create.(); Create["result.policy"].
|
125
|
+
# it { Create.(); Create["result.policy"].must_be_nil }
|
126
126
|
# it { Create.(params: {}, current_user: Module)["x"].must_equal true }
|
127
|
-
# it { Create.(params: {} )["x"].
|
127
|
+
# it { Create.(params: {} )["x"].must_be_nil }
|
128
128
|
# end
|
129
129
|
|
130
130
|
|
data/test/docs/rescue_test.rb
CHANGED
@@ -118,7 +118,7 @@ class RescueTest < Minitest::Spec
|
|
118
118
|
end
|
119
119
|
|
120
120
|
step Rescue( RecordNotFound, handler: :rollback! ) {
|
121
|
-
step Wrap ->(*, &block) { Sequel.transaction do block.call end } {
|
121
|
+
step Wrap (->(*, &block) { Sequel.transaction do block.call end }) {
|
122
122
|
step Model( Song, :find )
|
123
123
|
step ->(options, *) { options[:model].lock! } # lock the model.
|
124
124
|
step Contract::Build( constant: MyContract )
|
data/test/docs/wrap_test.rb
CHANGED
@@ -37,18 +37,21 @@ class WrapTest < Minitest::Spec
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
+
# it allows returning legacy true/false
|
40
41
|
class Create < Trailblazer::Operation
|
41
42
|
class MyContract < Reform::Form
|
42
43
|
property :title
|
43
44
|
end
|
44
45
|
|
45
|
-
step Wrap ->(options, *, &block) {
|
46
|
+
step Wrap( ->(options, *, &block) {
|
46
47
|
begin
|
47
48
|
block.call
|
48
49
|
rescue => exception
|
49
50
|
options["result.model.find"] = "argh! because #{exception.class}"
|
50
|
-
false
|
51
|
-
end
|
51
|
+
return false
|
52
|
+
end
|
53
|
+
true
|
54
|
+
}) {
|
52
55
|
step Model( Song, :find )
|
53
56
|
step Contract::Build( constant: MyContract )
|
54
57
|
}
|
@@ -63,7 +66,7 @@ class WrapTest < Minitest::Spec
|
|
63
66
|
# Wrap return
|
64
67
|
class WrapReturnTest < Minitest::Spec
|
65
68
|
class Create < Trailblazer::Operation
|
66
|
-
step Wrap ->(options, *, &block) { options["yield?"] ? block.call : false } {
|
69
|
+
step Wrap( ->(options, *, &block) { options["yield?"] ? block.call : false }) {
|
67
70
|
step ->(options, **) { options["x"] = true }
|
68
71
|
success :noop!
|
69
72
|
# ...
|
@@ -118,7 +121,7 @@ class WrapTest < Minitest::Spec
|
|
118
121
|
end
|
119
122
|
|
120
123
|
#~wrap-only end
|
121
|
-
step Wrap ->(*, &block) { Sequel.transaction do block.call end } {
|
124
|
+
step Wrap( ->(*, &block) { Sequel.transaction do block.call end } ) {
|
122
125
|
step Model( Song, :new )
|
123
126
|
#~wrap-only
|
124
127
|
step Contract::Build( constant: MyContract )
|
@@ -200,7 +203,7 @@ class WrapTest < Minitest::Spec
|
|
200
203
|
class WrapWithMethodTest < Minitest::Spec
|
201
204
|
class Create < Trailblazer::Operation
|
202
205
|
step Model( Song, :new )
|
203
|
-
step Wrap ->(options, *, &block) { block.call } {
|
206
|
+
step Wrap( ->(options, *, &block) { block.call } ) {
|
204
207
|
step :check_model!
|
205
208
|
|
206
209
|
}
|
data/test/module_test.rb
CHANGED
@@ -86,7 +86,7 @@
|
|
86
86
|
# op["dispatched"].must_equal [:notify_me!]
|
87
87
|
# op["model"].name.must_equal "Feelings"
|
88
88
|
# op["model"].artist.id.must_equal 1
|
89
|
-
# op["model"].artist.full_name.
|
89
|
+
# op["model"].artist.full_name.must_be_nil # property not declared.
|
90
90
|
# end
|
91
91
|
|
92
92
|
# it do
|
data/test/nested_test.rb
CHANGED
@@ -169,7 +169,7 @@ class NestedTest < Minitest::Spec
|
|
169
169
|
result["can.B.see.params?"].must_be_nil
|
170
170
|
if is_successful
|
171
171
|
result["can.B.see.A.mutable.data?"].must_equal "from A!"
|
172
|
-
result["can.B.see.A.class.data?"].
|
172
|
+
result["can.B.see.A.class.data?"].must_be_nil # we don't look for it.
|
173
173
|
result["can.A.see.B.mutable.data?"].must_equal "from AlmostB!"
|
174
174
|
else
|
175
175
|
result["can.B.see.A.mutable.data?"].must_be_nil
|
@@ -267,7 +267,7 @@ class NestedWithFastTrackTest < Minitest::Spec
|
|
267
267
|
#- Nested, :pass_fast => :failure
|
268
268
|
it "attaches :pass_fast => :failure" do
|
269
269
|
op = Class.new(Trailblazer::Operation) do
|
270
|
-
step Nested( Edit ), Output(:pass_fast) => :failure
|
270
|
+
step Nested( Edit ), Output(:pass_fast) => Track(:failure)
|
271
271
|
step :b
|
272
272
|
fail :f
|
273
273
|
|
@@ -38,7 +38,7 @@ class DslContractTest < MiniTest::Spec
|
|
38
38
|
end
|
39
39
|
|
40
40
|
# no inheritance with setter.
|
41
|
-
it { CreateOrFind["contract.default.class"].
|
41
|
+
it { CreateOrFind["contract.default.class"].must_be_nil }
|
42
42
|
|
43
43
|
# ---
|
44
44
|
# Op::contract Constant
|
@@ -197,7 +197,7 @@ class DslContractTest < MiniTest::Spec
|
|
197
197
|
form.sync
|
198
198
|
|
199
199
|
song.genre.must_equal "Punkrock"
|
200
|
-
song.band.
|
200
|
+
song.band.must_be_nil
|
201
201
|
end
|
202
202
|
end
|
203
203
|
|
data/test/test_helper.rb
CHANGED
data/trailblazer.gemspec
CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
|
-
spec.add_dependency "trailblazer-operation", ">= 0.2.
|
20
|
+
spec.add_dependency "trailblazer-operation", ">= 0.2.3", "< 0.3.0"
|
21
21
|
spec.add_dependency "trailblazer-activity", ">= 0.4.3", "< 0.6.0"
|
22
22
|
|
23
23
|
spec.add_dependency "reform", ">= 2.2.0", "< 3.0.0"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trailblazer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.0.
|
4
|
+
version: 2.1.0.beta4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Sutterer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-03-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: trailblazer-operation
|
@@ -16,7 +16,7 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.2.
|
19
|
+
version: 0.2.3
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: 0.3.0
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.2.
|
29
|
+
version: 0.2.3
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 0.3.0
|
@@ -220,6 +220,7 @@ files:
|
|
220
220
|
- test/docs/dry_test.rb
|
221
221
|
- test/docs/fast_test.rb
|
222
222
|
- test/docs/guard_test.rb
|
223
|
+
- test/docs/input_output_test.rb
|
223
224
|
- test/docs/macro_test.rb
|
224
225
|
- test/docs/model_test.rb
|
225
226
|
- test/docs/nested_test.rb
|
@@ -266,7 +267,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
266
267
|
version: 1.3.1
|
267
268
|
requirements: []
|
268
269
|
rubyforge_project:
|
269
|
-
rubygems_version: 2.
|
270
|
+
rubygems_version: 2.7.3
|
270
271
|
signing_key:
|
271
272
|
specification_version: 4
|
272
273
|
summary: A high-level architecture for Ruby and Rails.
|
@@ -279,6 +280,7 @@ test_files:
|
|
279
280
|
- test/docs/dry_test.rb
|
280
281
|
- test/docs/fast_test.rb
|
281
282
|
- test/docs/guard_test.rb
|
283
|
+
- test/docs/input_output_test.rb
|
282
284
|
- test/docs/macro_test.rb
|
283
285
|
- test/docs/model_test.rb
|
284
286
|
- test/docs/nested_test.rb
|