trailblazer-operation 0.6.0 → 0.6.1

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: 228e261fc19eec5d741437141b0eae01552aaaf08caa617c2ad2a3f226e5fa94
4
- data.tar.gz: f316ca1a182fc7f8b730f89d59b0e575e9a43365b571486079f7b95e6749717d
3
+ metadata.gz: 569ffef484d0783c9f16d35ce6848f8506687140e3fede28f15ab506d832ad5c
4
+ data.tar.gz: e646b0c9b05dbaba40c136d8345c896727b30cfeba1ee62b5f180e87ff6c05b8
5
5
  SHA512:
6
- metadata.gz: ca04555c63aabc959539399ae7daf3e11b79c5ffb946326abb9abbf1db284379f4bacc19f7ee9013bacbb7735f35b350e42f2e17b38278fed9f9c259524264b1
7
- data.tar.gz: 54ba90ec3dd1f4977fffc95ab20a93a625b341fd74f110416ae4dd28cd3a9fb2e6960378e6e3deb93ac7b39decccc4011c7e5716233ab928ca70e0295206c628
6
+ metadata.gz: 4d1f804fb97272a858374a5204b033e4ef3ee0a8fe29e29a36e6c3c9f0314b1059b4731b32e9aaf35a9e921b3158cfed53302e6b58fa3070bd3b89b239e49365
7
+ data.tar.gz: 03353eadeaa413e25ba9deb4847ddedf07827f8b71d16f943a5bf980c499eed231fa8158e60e4492bf449bdbc341c711c109c4fbbb77ade2c858e816a7aff0c9
data/CHANGES.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.6.1
2
+
3
+ * Reintroduce `ClassDependencies` by leveraging `State.fields`.
4
+
1
5
  ## 0.6.0
2
6
 
3
7
  * Require newest `activity` gem.
data/Gemfile CHANGED
@@ -10,7 +10,7 @@ gem "dry-auto_inject"
10
10
  gem "benchmark-ips"
11
11
  gem "minitest-line"
12
12
 
13
- # gem "trailblazer-developer", path: "../trailblazer-developer"
13
+ # gem "trailblazer-developer", path: "../developer"
14
14
  # gem "trailblazer-developer", git: "https://github.com/trailblazer/trailblazer-developer"
15
15
  # gem "trailblazer-activity", path: "../trailblazer-activity"
16
16
  # gem "trailblazer-activity-dsl-linear", path: "../trailblazer-activity-dsl-linear"
@@ -2,7 +2,6 @@ require "trailblazer/option"
2
2
  require "trailblazer/context"
3
3
  require "trailblazer/container_chain"
4
4
 
5
- require "trailblazer/activity"
6
5
  require "trailblazer/activity/dsl/linear"
7
6
 
8
7
 
@@ -1,25 +1,34 @@
1
1
  # Dependencies can be defined on the operation. class level
2
2
  class Trailblazer::Operation
3
- module Skill
4
- # The class-level skill container: Operation::[], ::[]=.
5
- module Accessors
6
- # :private:
7
- def skills
8
- @skills ||= {}
9
- end
3
+ # The use of this module is currently not encouraged and it is only here for backward-compatibility.
4
+ # Instead, please pass dependencies via containers, locals, or macros into the respective steps.
5
+ module ClassDependencies
6
+ def [](field)
7
+ @state.to_h[:fields][field]
8
+ end
10
9
 
11
- extend Forwardable
12
- def_delegators :skills, :[], :[]=
10
+ def []=(field, value)
11
+ options = @state.to_h[:fields].merge(field => value)
12
+ @state.update_options(options)
13
+ end
14
+
15
+ def options_for_public_call(options, *)
16
+ ctx = super
17
+ context_for_fields(class_fields, ctx)
18
+ end
19
+
20
+ private def class_fields
21
+ @state.to_h[:fields]
22
+ end
23
+
24
+ private def context_for_fields(fields, ctx)
25
+ ctx_with_fields = Trailblazer::Context.implementation.build(fields, ctx, [ctx, {}], {}) # TODO: redundant to otions_for_public_call. how to inject aliasing etc?
13
26
  end
14
- end
15
27
 
16
- # The use of this module is not encouraged and it is only here for backward-compatibility.
17
- # Instead, please pass dependencies via containers, locals, or macros into the respective steps.
18
- module ClassDependencies
19
28
  def call_with_circuit_interface((ctx, flow_options), **circuit_options)
20
- @skills.each { |name, value| ctx[name] ||= value } # this resembles the behavior in 2.0. we didn't say we liked it.
29
+ ctx_with_fields = context_for_fields(class_fields, ctx)
21
30
 
22
- super
31
+ super([ctx_with_fields, flow_options], circuit_options) # FIXME: should we unwrap here?
23
32
  end
24
33
  end
25
34
  end
@@ -24,7 +24,7 @@ module Trailblazer
24
24
 
25
25
  # Presentation of the traced stack via the returned result object.
26
26
  # This object is wrapped around the original result in {Trace.call}.
27
- class Result < SimpleDelegator
27
+ class Result < ::SimpleDelegator
28
28
  def initialize(result, stack)
29
29
  super(result)
30
30
  @stack = stack
@@ -1,7 +1,7 @@
1
1
  module Trailblazer
2
2
  module Version
3
3
  module Operation
4
- VERSION = "0.6.0"
4
+ VERSION = "0.6.1"
5
5
  end
6
6
  end
7
7
  end
@@ -3,13 +3,32 @@ require "test_helper"
3
3
  class ClassDependenciesTest < Minitest::Spec
4
4
  #- Operation[] and Operation[]=
5
5
 
6
- # class Index < Trailblazer::Operation
7
- # extend ClassDependencies
6
+ class Index < Trailblazer::Operation
7
+ extend ClassDependencies
8
8
 
9
- # self["model.class"] = Module
9
+ self["model.class"] = Module
10
10
 
11
- # step ->(options, **) { options["a"] = options["model.class"] }
12
- # end
11
+ step ->(options, **) { options["a"] = options["model.class"] }
12
+ end
13
13
 
14
- it { skip "https://trello.com/c/t8bUJlqb/25-op-class-dependencies"; Index.({}).inspect("a", "model.class").must_equal %{<Result:true [Module, Module] >} }
14
+ it { Index.({}).inspect("a", "model.class").must_equal %{<Result:true [Module, Module] >} }
15
+
16
+ it "creates separate ctx for circuit interface" do
17
+ signal, (ctx, _) = Index.([{}, {}], {})
18
+
19
+ ctx["model.class"].inspect.must_equal %{Module} # FIXME: should this be here?
20
+ ctx[:a].inspect.must_equal %{Module}
21
+ end
22
+
23
+ describe "inheritance" do
24
+ it "reader/setter read from separate config" do
25
+ subclass = Class.new(Index)
26
+
27
+ subclass["model.class"].must_equal Module
28
+ subclass["model.class"] = Class
29
+ subclass["model.class"].must_equal Class
30
+ Index["model.class"].must_equal Module
31
+ end
32
+
33
+ end
15
34
  end
@@ -0,0 +1,54 @@
1
+ require "test_helper"
2
+
3
+ class DocsClassFieldsTest < Minitest::Spec
4
+ module A
5
+ class AlwaysTrue
6
+ def self.call(params)
7
+ true
8
+ end
9
+ end
10
+
11
+
12
+ class Insert < Trailblazer::Operation
13
+ extend ClassDependencies
14
+
15
+ self[:name] = :insert
16
+ end
17
+
18
+ #:create
19
+ class Create < Trailblazer::Operation
20
+ extend ClassDependencies
21
+
22
+ # Configure some dependency on class level
23
+ self[:validator] = AlwaysTrue
24
+
25
+ step :validate
26
+ step Subprocess(Insert)
27
+
28
+ #:validate
29
+ def validate(ctx, validator:, params:, **)
30
+ validator.(params)
31
+ end
32
+ #:validate end
33
+ end
34
+ #:create end
35
+ end
36
+
37
+ it "what" do
38
+ Create = A::Create
39
+
40
+ ctx = {params: {name: "Yogi"}}
41
+
42
+ #:invoke
43
+ signal, (ctx, _) = Create.([ctx, {}])
44
+
45
+ puts ctx[:validator] #=> AlwaysTrue
46
+ #:invoke end
47
+
48
+ puts ctx[:name] #=> insert
49
+
50
+ signal.inspect.must_equal %{#<Trailblazer::Activity::Railway::End::Success semantic=:success>}
51
+ ctx[:validator].inspect.must_equal %{DocsClassFieldsTest::A::AlwaysTrue}
52
+ ctx[:name].inspect.must_equal %{:insert}
53
+ end
54
+ end
@@ -28,30 +28,30 @@ class TraceTest < Minitest::Spec
28
28
  puts output = Trailblazer::Developer::Trace::Present.(stack)
29
29
 
30
30
  output.gsub(/0x\w+/, "").gsub(/@.+_test/, "").must_equal %{`-- TraceTest::Create
31
- |-- Start.default
32
- |-- Create.task.a
33
- |-- MyNested
34
- | |-- Start.default
35
- | |-- B.task.b
36
- | |-- B.task.e
37
- | `-- End.success
38
- |-- Create.task.c
39
- |-- Create.task.params
40
- `-- End.failure}
31
+ |-- Start.default
32
+ |-- Create.task.a
33
+ |-- MyNested
34
+ | |-- Start.default
35
+ | |-- B.task.b
36
+ | |-- B.task.e
37
+ | `-- End.success
38
+ |-- Create.task.c
39
+ |-- Create.task.params
40
+ `-- End.failure}
41
41
  end
42
42
 
43
43
  it "Operation::trace" do
44
44
  result = Create.trace(params: {x: 1}, a_return: true)
45
45
  result.wtf.gsub(/0x\w+/, "").gsub(/@.+_test/, "").must_equal %{`-- TraceTest::Create
46
- |-- Start.default
47
- |-- Create.task.a
48
- |-- MyNested
49
- | |-- Start.default
50
- | |-- B.task.b
51
- | |-- B.task.e
52
- | `-- End.success
53
- |-- Create.task.c
54
- |-- Create.task.params
55
- `-- End.success}
46
+ |-- Start.default
47
+ |-- Create.task.a
48
+ |-- MyNested
49
+ | |-- Start.default
50
+ | |-- B.task.b
51
+ | |-- B.task.e
52
+ | `-- End.success
53
+ |-- Create.task.c
54
+ |-- Create.task.params
55
+ `-- End.success}
56
56
  end
57
57
  end
@@ -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-activity-dsl-linear", ">= 0.2.1", "< 1.0.0"
20
+ spec.add_dependency "trailblazer-activity-dsl-linear", ">= 0.2.6", "< 1.0.0"
21
21
  spec.add_dependency "trailblazer-activity", ">= 0.10.0", "< 1.0.0"
22
22
  spec.add_dependency "trailblazer-developer", ">= 0.0.8"
23
23
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trailblazer-operation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Sutterer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-23 00:00:00.000000000 Z
11
+ date: 2020-04-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: trailblazer-activity-dsl-linear
@@ -16,7 +16,7 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.2.1
19
+ version: 0.2.6
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
22
  version: 1.0.0
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 0.2.1
29
+ version: 0.2.6
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: 1.0.0
@@ -150,6 +150,7 @@ files:
150
150
  - test/call_test.rb
151
151
  - test/callable_test.rb
152
152
  - test/class_dependencies_test.rb
153
+ - test/docs/class_dependencies_test.rb
153
154
  - test/docs/doormat_test.rb
154
155
  - test/docs/macaroni_test.rb
155
156
  - test/docs/operation_test.rb
@@ -193,8 +194,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
193
194
  - !ruby/object:Gem::Version
194
195
  version: '0'
195
196
  requirements: []
196
- rubyforge_project:
197
- rubygems_version: 2.7.6
197
+ rubygems_version: 3.0.8
198
198
  signing_key:
199
199
  specification_version: 4
200
200
  summary: Trailblazer's operation object with railway flow and integrated error handling.
@@ -203,6 +203,7 @@ test_files:
203
203
  - test/call_test.rb
204
204
  - test/callable_test.rb
205
205
  - test/class_dependencies_test.rb
206
+ - test/docs/class_dependencies_test.rb
206
207
  - test/docs/doormat_test.rb
207
208
  - test/docs/macaroni_test.rb
208
209
  - test/docs/operation_test.rb