trailblazer-operation 0.6.1 → 0.6.6

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: 569ffef484d0783c9f16d35ce6848f8506687140e3fede28f15ab506d832ad5c
4
- data.tar.gz: e646b0c9b05dbaba40c136d8345c896727b30cfeba1ee62b5f180e87ff6c05b8
3
+ metadata.gz: bf82f1aa3080dfea1c9165859fdd6de207c9333cc3af7fb8c2e52fff55811ba2
4
+ data.tar.gz: c53369fe71b53e3ac3be42746d438c648b312a4d03956f483abd2d1e7e39cebb
5
5
  SHA512:
6
- metadata.gz: 4d1f804fb97272a858374a5204b033e4ef3ee0a8fe29e29a36e6c3c9f0314b1059b4731b32e9aaf35a9e921b3158cfed53302e6b58fa3070bd3b89b239e49365
7
- data.tar.gz: 03353eadeaa413e25ba9deb4847ddedf07827f8b71d16f943a5bf980c499eed231fa8158e60e4492bf449bdbc341c711c109c4fbbb77ade2c858e816a7aff0c9
6
+ metadata.gz: 98b29781915fdb5b40921dfd621a59dc580ce708e7ddaaf44b3123ee5a838ffde6a96cbe9b2d0cb24b15b60db3d2f5e166339253612786b96ebf5c5073e28fe6
7
+ data.tar.gz: 1481d504865240aeeee2bd254cfbc927156da7d465a408e42fc8936579984a95a80926356e6b5757d67ce8d814879f6aa22fc1678cd869345ac7be38b40d2e68
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ test/tmp
15
15
  test/version_tmp
16
16
  tmp
17
17
  /**/*.log
18
+ .rubocop-*yml
@@ -1,16 +1,13 @@
1
1
  language: ruby
2
2
  before_install:
3
3
  - gem install bundler -v 1.17.3
4
- matrix:
5
- include:
6
- # - rvm: 2.1.0
7
- # gemfile: Gemfile
8
- - rvm: 2.2.4
9
- gemfile: Gemfile
10
- - rvm: 2.3.3
11
- gemfile: Gemfile
12
- - rvm: 2.4.0
13
- gemfile: Gemfile
14
- - rvm: 2.5.0
15
- gemfile: Gemfile
16
- script: bundle exec rake test
4
+ rvm:
5
+ - ruby-head
6
+ - 2.7
7
+ - 2.6
8
+ - 2.5
9
+ - 2.4
10
+ jobs:
11
+ allow_failures:
12
+ - rvm: ruby-head
13
+ - rvm: 2.7
data/CHANGES.md CHANGED
@@ -1,3 +1,24 @@
1
+ ## 0.6.6
2
+
3
+ * Rename `Operation.flow_options` to `Operation.flow_options_for_public_call`.
4
+ * Operations can also accept `flow_options` at run-time now :beers:, giving them precedence over `Operation.flow_options_for_public_call`.
5
+
6
+ ## 0.6.5
7
+
8
+ * Upgrade `trailblazer-activity` & `trailblazer-activity-dsl-linear` versions to utilise new `trailblazer-context` :drum:
9
+
10
+ ## 0.6.4
11
+
12
+ * Remove container support. Containers should be part of `ctx` itself
13
+
14
+ ## 0.6.3
15
+
16
+ * Require forwardable module from standard lib.
17
+
18
+ ## 0.6.2
19
+
20
+ * Fix Trace so it works with Ruby <= 2.4
21
+
1
22
  ## 0.6.1
2
23
 
3
24
  * Reintroduce `ClassDependencies` by leveraging `State.fields`.
data/README.md CHANGED
@@ -15,6 +15,6 @@ An operation can be used exaclty like an activity, including nesting, tracing, e
15
15
 
16
16
  ## Copyright
17
17
 
18
- Copyright (c) 2016 Nick Sutterer <apotonick@gmail.com>
18
+ Copyright (c) 2016-2020 Nick Sutterer <apotonick@gmail.com>
19
19
 
20
20
  `trailblazer-operation` is released under the [MIT License](http://www.opensource.org/licenses/MIT).
@@ -1,10 +1,10 @@
1
+ require 'forwardable'
2
+ require 'trailblazer/operation/version'
1
3
  require "trailblazer/option"
2
4
  require "trailblazer/context"
3
- require "trailblazer/container_chain"
4
5
 
5
6
  require "trailblazer/activity/dsl/linear"
6
7
 
7
-
8
8
  module Trailblazer
9
9
  # DISCUSS: I don't know where else to put this. It's not part of the {Activity} concept
10
10
  class Activity
@@ -51,13 +51,6 @@ module Trailblazer
51
51
 
52
52
  require "trailblazer/operation/trace"
53
53
  extend Trace # ::trace
54
-
55
- module Railway
56
- def self.fail! ; Activity::Left end
57
- def self.pass! ; Activity::Right end
58
- def self.fail_fast!; Activity::FastTrack::FailFast end
59
- def self.pass_fast!; Activity::FastTrack::PassFast end
60
- end
61
54
  end
62
55
  end
63
56
 
@@ -67,9 +60,4 @@ require "trailblazer/operation/deprecated_macro" # TODO: remove in 2.2.
67
60
  require "trailblazer/operation/result"
68
61
  require "trailblazer/operation/railway"
69
62
 
70
- require "trailblazer/developer"
71
- require "trailblazer/operation/trace"
72
-
73
63
  require "trailblazer/operation/railway/macaroni"
74
-
75
- require "trailblazer/operation/container"
@@ -12,21 +12,21 @@ class Trailblazer::Operation
12
12
  @state.update_options(options)
13
13
  end
14
14
 
15
- def options_for_public_call(options, *)
15
+ def options_for_public_call(options, **flow_options)
16
16
  ctx = super
17
- context_for_fields(class_fields, ctx)
17
+ context_for_fields(class_fields, [ctx, flow_options], {})
18
18
  end
19
19
 
20
20
  private def class_fields
21
21
  @state.to_h[:fields]
22
22
  end
23
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?
24
+ private def context_for_fields(fields, (ctx, flow_options), **)
25
+ ctx_with_fields = Trailblazer::Context(fields, ctx, flow_options[:context_options]) # TODO: redundant to otions_for_public_call.
26
26
  end
27
27
 
28
28
  def call_with_circuit_interface((ctx, flow_options), **circuit_options)
29
- ctx_with_fields = context_for_fields(class_fields, ctx)
29
+ ctx_with_fields = context_for_fields(class_fields, [ctx, flow_options], circuit_options)
30
30
 
31
31
  super([ctx_with_fields, flow_options], circuit_options) # FIXME: should we unwrap here?
32
32
  end
@@ -19,15 +19,23 @@ module Trailblazer
19
19
  call_with_public_interface(options, *args)
20
20
  end
21
21
 
22
- def call_with_public_interface(*args)
23
- ctx = options_for_public_call(*args, flow_options())
22
+ # Default {@activity} call interface which doesn't accept {circuit_options}
23
+ #
24
+ # @param [Array] args => [ctx, flow_options]
25
+ #
26
+ # @return [Operation::Railway::Result]
27
+ #
28
+ # @private
29
+ def call_with_public_interface(options, flow_options = {})
30
+ flow_options = flow_options_for_public_call(flow_options)
31
+ ctx = options_for_public_call(options, flow_options)
24
32
 
25
33
  # call the activity.
26
34
  # This will result in invoking {::call_with_circuit_interface}.
27
35
  # last_signal, (options, flow_options) = Activity::TaskWrap.invoke(self, [ctx, {}], {})
28
36
  signal, (ctx, flow_options) = Activity::TaskWrap.invoke(
29
37
  @activity,
30
- [ctx, flow_options()],
38
+ [ctx, flow_options],
31
39
  exec_context: new
32
40
  )
33
41
 
@@ -36,6 +44,13 @@ module Trailblazer
36
44
  end
37
45
 
38
46
  # This interface is used for all nested OPs (and the outer-most, too).
47
+ #
48
+ # @param [Array] args - Contains [ctx, flow_options]
49
+ # @param [Hash] circuit_options - Options to configure activity circuit
50
+ #
51
+ # @return [signal, [ctx, flow_options]]
52
+ #
53
+ # @private
39
54
  def call_with_circuit_interface(args, circuit_options)
40
55
  strategy_call(args, circuit_options) # FastTrack#call
41
56
  end
@@ -46,13 +61,13 @@ module Trailblazer
46
61
 
47
62
  # Compile a Context object to be passed into the Activity::call.
48
63
  # @private
49
- def self.options_for_public_call(options, **flow_options)
50
- Trailblazer::Context.for_circuit(options, {}, [options, flow_options], {})
64
+ def self.options_for_public_call(options, flow_options = {})
65
+ Trailblazer::Context(options, {}, flow_options[:context_options])
51
66
  end
52
67
 
53
68
  # @semi=public
54
- def flow_options
55
- {context_alias: {}}
69
+ def flow_options_for_public_call(options = {})
70
+ options
56
71
  end
57
72
  end
58
73
  end
@@ -5,6 +5,10 @@ module Trailblazer
5
5
  class Operation
6
6
  # End event: All subclasses of End:::Success are interpreted as "success".
7
7
  module Railway
8
+ def self.fail! ; Activity::Left end
9
+ def self.pass! ; Activity::Right end
10
+ def self.fail_fast!; Activity::FastTrack::FailFast end
11
+ def self.pass_fast!; Activity::FastTrack::PassFast end
8
12
  # @param options Context
9
13
  # @param end_event The last emitted signal in a circuit is usually the end event.
10
14
  def self.Result(end_event, options, *)
@@ -1,3 +1,6 @@
1
+ require 'delegate'
2
+ require "trailblazer/developer"
3
+
1
4
  module Trailblazer
2
5
  class Operation
3
6
  module Trace
@@ -31,7 +34,7 @@ module Trailblazer
31
34
  end
32
35
 
33
36
  def wtf
34
- Trailblazer::Developer::Trace::Present.(@stack)
37
+ Developer::Trace::Present.(@stack)
35
38
  end
36
39
 
37
40
  def wtf?
@@ -1,7 +1,7 @@
1
1
  module Trailblazer
2
2
  module Version
3
3
  module Operation
4
- VERSION = "0.6.1"
4
+ VERSION = "0.6.6"
5
5
  end
6
6
  end
7
7
  end
@@ -24,7 +24,6 @@ class DocsActivityTest < Minitest::Spec
24
24
  signal.inspect.must_equal %{#<Trailblazer::Activity::Railway::End::Success semantic=:success>}
25
25
  end
26
26
 
27
- #:describe
28
27
  describe Memo::Create do
29
28
  it "creates a sane Memo instance" do
30
29
  #:call-public
@@ -39,8 +38,64 @@ class DocsActivityTest < Minitest::Spec
39
38
  result.success?.must_equal true
40
39
  result[:model].text.must_equal "Enjoy an IPA"
41
40
  end
41
+
42
+ it "allows indifferent access for ctx keys" do
43
+ #:ctx-indifferent-access
44
+ result = Memo::Create.(params: { text: "Enjoy an IPA" })
45
+
46
+ result[:params] # => { text: "Enjoy an IPA" }
47
+ result['params'] # => { text: "Enjoy an IPA" }
48
+ #:ctx-indifferent-access end
49
+
50
+ result.success?.must_equal true
51
+ result[:params].must_equal({ text: "Enjoy an IPA" })
52
+ result['params'].must_equal({ text: "Enjoy an IPA" })
53
+ end
54
+
55
+ it "allows defining aliases for ctx keys" do
56
+ module AliasesExample
57
+ Memo = Struct.new(:text)
58
+
59
+ module Memo::Contract
60
+ Create = Struct.new(:sync)
61
+ end
62
+
63
+ #:ctx-aliases-step
64
+ class Memo::Create < Trailblazer::Operation
65
+ #~flow
66
+ step ->(ctx, **) { ctx[:'contract.default'] = Memo::Contract::Create.new }
67
+ #~flow end
68
+
69
+ pass :sync
70
+
71
+ def sync(ctx, contract:, **)
72
+ # ctx['contract.default'] == ctx[:contract]
73
+ contract.sync
74
+ end
75
+ end
76
+ #:ctx-aliases-step end
77
+ end
78
+
79
+ #:ctx-aliases
80
+ options = { params: { text: "Enjoy an IPA" } }
81
+ flow_options = {
82
+ context_options: {
83
+ aliases: { 'contract.default': :contract, 'policy.default': :policy },
84
+ container_class: Trailblazer::Context::Container::WithAliases,
85
+ }
86
+ }
87
+
88
+ result = AliasesExample::Memo::Create.(options, flow_options)
89
+
90
+ result['contract.default'] # => Memo::Contract::Create
91
+ result[:contract] # => Memo::Contract::Create
92
+ #:ctx-aliases end
93
+
94
+ result.success?.must_equal true
95
+ _(result[:contract].class).must_equal AliasesExample::Memo::Contract::Create
96
+ _(result['contract.default']).must_equal result[:contract]
97
+ end
42
98
  end
43
- #:describe end
44
99
 
45
100
  it do
46
101
  module J
@@ -245,9 +245,8 @@ describe all options :pass_fast, :fast_track and emiting signals directly, like
245
245
  end
246
246
 
247
247
  it "runs #create_model, only" do
248
- Memo = FastTrack::Memo
249
248
  #:ft-call
250
- result = Memo::Create.(create_empty_model: true)
249
+ result = FastTrack::Memo::Create.(create_empty_model: true)
251
250
  puts result.success? #=> true
252
251
  puts result[:model].inspect #=> #<Memo text=nil>
253
252
  #:ft-call end
@@ -257,9 +256,8 @@ describe all options :pass_fast, :fast_track and emiting signals directly, like
257
256
  end
258
257
 
259
258
  it "fast-tracks in #assign_errors" do
260
- Memo = FastTrack::Memo
261
259
  #:ft-call-err
262
- result = Memo::Create.({})
260
+ result = FastTrack::Memo::Create.({})
263
261
  puts result.success? #=> false
264
262
  puts result[:model].inspect #=> #<Memo text=nil>
265
263
  puts result[:errors].inspect #=> "Something went wrong!"
@@ -271,16 +269,15 @@ describe all options :pass_fast, :fast_track and emiting signals directly, like
271
269
  end
272
270
 
273
271
  it "goes till #save by emitting signals directly" do
274
- Memo = FastTrack::Memo
275
- result = Memo::Create.(params: {text: "Punk is not dead!"})
272
+ result = FastTrack::Memo::Create.(params: {text: "Punk is not dead!"})
276
273
  result.success?.must_equal true
277
274
  result[:model].id.must_equal 1
278
275
  result[:errors].must_be_nil
279
276
  end
280
277
 
278
+
281
279
  it "goes till #save by using signal helper" do
282
- Memo = FastTrack::Memo
283
- result = Memo::Create2.(params: {text: "Punk is not dead!"})
280
+ result = FastTrack::Memo::Create2.(params: {text: "Punk is not dead!"})
284
281
  result.success?.must_equal true
285
282
  result[:model].id.must_equal 1
286
283
  result[:errors].must_be_nil
@@ -79,8 +79,51 @@ class DeclarativeApiTest < Minitest::Spec
79
79
  step ->(options, **) { options["e"] = 2 }
80
80
  end
81
81
 
82
+ class Aliases < Update
83
+ def self.flow_options_for_public_call(*)
84
+ {
85
+ context_options: {
86
+ aliases: { 'b' => :settle },
87
+ container_class: Trailblazer::Context::Container::WithAliases,
88
+ }
89
+ }
90
+ end
91
+ end
92
+
82
93
  it "allows to inherit" do
83
94
  Upsert.("params" => {decide: true}).inspect("a", "b", "c", "d", "e").must_equal %{<Result:true [false, true, nil, 1, nil] >}
84
95
  Unset. ("params" => {decide: true}).inspect("a", "b", "c", "d", "e").must_equal %{<Result:true [false, true, nil, 1, 2] >}
85
96
  end
97
+
98
+ #---
99
+ #- ctx container
100
+ it do
101
+ options = { "params" => {decide: true} }
102
+
103
+ # Default call
104
+ result = Update.(options)
105
+ result.inspect("a", "b", "c").must_equal %{<Result:true [false, true, nil] >}
106
+
107
+ # Circuit interface call
108
+ signal, (ctx, _) = Update.([Update.options_for_public_call(options), {}], {})
109
+
110
+ signal.inspect.must_equal %{#<Trailblazer::Activity::Railway::End::Success semantic=:success>}
111
+ ctx.inspect.must_equal %{#<Trailblazer::Context::Container wrapped_options={\"params\"=>{:decide=>true}} mutable_options={\"a\"=>false, \"b\"=>true}>}
112
+
113
+ # Call by passing aliases as an argument.
114
+ result = Update.(
115
+ options,
116
+ {
117
+ context_options: {
118
+ aliases: { 'b' => :settle },
119
+ container_class: Trailblazer::Context::Container::WithAliases,
120
+ }
121
+ }
122
+ )
123
+ result[:settle].must_equal true
124
+
125
+ # Set aliases by overriding `flow_options` at the compile time.
126
+ result = Aliases.(options)
127
+ result[:settle].must_equal true
128
+ end
86
129
  end
@@ -173,11 +173,12 @@ class StepTest < Minitest::Spec
173
173
  #-
174
174
  # not existent :name
175
175
  it do
176
- assert_raises Trailblazer::Activity::DSL::Linear::Sequence::IndexError do
176
+ op = assert_raises Trailblazer::Activity::DSL::Linear::Sequence::IndexError do
177
177
  Class.new(Trailblazer::Operation) do
178
178
  step :a, before: "I don't exist!"
179
179
  end
180
- end.inspect.must_equal %{#<Trailblazer::Activity::DSL::Linear::Sequence::IndexError: "I don't exist!">}
180
+ end
181
+ assert_match /<Trailblazer::Activity::DSL::Linear::Sequence::IndexError: "I don't exist!" is not a valid step ID. Did you mean any of these ?/, op.inspect
181
182
  end
182
183
 
183
184
  #---
@@ -1,7 +1,9 @@
1
+ $LOAD_PATH.unshift File.expand_path("../lib", __dir__)
2
+ require "trailblazer/operation"
3
+
1
4
  require "pp"
2
5
 
3
6
  require "minitest/autorun"
4
- require "trailblazer/operation"
5
7
  require "trailblazer/activity/testing"
6
8
  require "trailblazer/developer/render/linear"
7
9
 
@@ -14,18 +14,13 @@ class TraceTest < Minitest::Spec
14
14
  end
15
15
  # raise Create["__task_wraps__"].inspect
16
16
 
17
- it "allows using low-level Activity::Trace" do
18
- ->(*args) { puts "@@@@@ #{args.last.inspect}"; Create.__call__(*args) }
19
-
20
- stack, = Trailblazer::Developer::Trace.(
17
+ it "allows using low-level Operation::Trace" do
18
+ result = Trailblazer::Operation::Trace.(
21
19
  Create,
22
- [
23
- {a_return: true, params: {}},
24
- {}
25
- ]
20
+ { a_return: true, params: {} },
26
21
  )
27
22
 
28
- puts output = Trailblazer::Developer::Trace::Present.(stack)
23
+ output = result.wtf
29
24
 
30
25
  output.gsub(/0x\w+/, "").gsub(/@.+_test/, "").must_equal %{`-- TraceTest::Create
31
26
  |-- Start.default
@@ -14,11 +14,11 @@ Gem::Specification.new do |spec|
14
14
 
15
15
  spec.files = `git ls-files`.split($/)
16
16
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
+ spec.test_files = spec.files.grep(%r{^(test)/})
18
18
  spec.require_paths = ["lib"]
19
19
 
20
- spec.add_dependency "trailblazer-activity-dsl-linear", ">= 0.2.6", "< 1.0.0"
21
- spec.add_dependency "trailblazer-activity", ">= 0.10.0", "< 1.0.0"
20
+ spec.add_dependency "trailblazer-activity-dsl-linear", ">= 0.3.2", "< 1.0.0"
21
+ spec.add_dependency "trailblazer-activity", ">= 0.11.2", "< 1.0.0"
22
22
  spec.add_dependency "trailblazer-developer", ">= 0.0.8"
23
23
 
24
24
  spec.add_development_dependency "bundler"
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.1
4
+ version: 0.6.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Sutterer
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-17 00:00:00.000000000 Z
11
+ date: 2021-01-27 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.6
19
+ version: 0.3.2
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.6
29
+ version: 0.3.2
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: 1.0.0
@@ -36,7 +36,7 @@ dependencies:
36
36
  requirements:
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: 0.10.0
39
+ version: 0.11.2
40
40
  - - "<"
41
41
  - !ruby/object:Gem::Version
42
42
  version: 1.0.0
@@ -46,7 +46,7 @@ dependencies:
46
46
  requirements:
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: 0.10.0
49
+ version: 0.11.2
50
50
  - - "<"
51
51
  - !ruby/object:Gem::Version
52
52
  version: 1.0.0
@@ -138,7 +138,6 @@ files:
138
138
  - lib/trailblazer/operation.rb
139
139
  - lib/trailblazer/operation/callable.rb
140
140
  - lib/trailblazer/operation/class_dependencies.rb
141
- - lib/trailblazer/operation/container.rb
142
141
  - lib/trailblazer/operation/deprecated_macro.rb
143
142
  - lib/trailblazer/operation/public_call.rb
144
143
  - lib/trailblazer/operation/railway.rb
@@ -155,7 +154,6 @@ files:
155
154
  - test/docs/macaroni_test.rb
156
155
  - test/docs/operation_test.rb
157
156
  - test/docs/wiring_test.rb
158
- - test/dry_container_test.rb
159
157
  - test/fast_track_test.rb
160
158
  - test/gemfiles/Gemfile.ruby-1.9
161
159
  - test/gemfiles/Gemfile.ruby-2.0
@@ -179,7 +177,7 @@ homepage: http://trailblazer.to
179
177
  licenses:
180
178
  - MIT
181
179
  metadata: {}
182
- post_install_message:
180
+ post_install_message:
183
181
  rdoc_options: []
184
182
  require_paths:
185
183
  - lib
@@ -195,7 +193,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
195
193
  version: '0'
196
194
  requirements: []
197
195
  rubygems_version: 3.0.8
198
- signing_key:
196
+ signing_key:
199
197
  specification_version: 4
200
198
  summary: Trailblazer's operation object with railway flow and integrated error handling.
201
199
  test_files:
@@ -208,7 +206,6 @@ test_files:
208
206
  - test/docs/macaroni_test.rb
209
207
  - test/docs/operation_test.rb
210
208
  - test/docs/wiring_test.rb
211
- - test/dry_container_test.rb
212
209
  - test/fast_track_test.rb
213
210
  - test/gemfiles/Gemfile.ruby-1.9
214
211
  - test/gemfiles/Gemfile.ruby-2.0
@@ -1,14 +0,0 @@
1
- module Trailblazer
2
- module Operation::Container
3
- def options_for_public_call(options={}, *containers)
4
- # generate the skill hash that embraces runtime options plus potential containers, the so called Runtime options.
5
- # This wrapping is supposed to happen once in the entire system.
6
-
7
- hash_transformer = ->(containers) { containers[0].to_hash } # FIXME: don't transform any containers into kw args.
8
-
9
- immutable_options = Trailblazer::Context::ContainerChain.new([options, *containers], to_hash: hash_transformer)
10
-
11
- Trailblazer::Context(immutable_options)
12
- end
13
- end
14
- end
@@ -1,25 +0,0 @@
1
- require "test_helper"
2
- require "dry/container"
3
-
4
- class DryContainerTest < Minitest::Spec
5
- my_container = Dry::Container.new
6
- my_container.register("user_repository", -> { Object })
7
- my_container.namespace("contract") do
8
- register("create") { Array }
9
- end
10
-
11
- class Create < Trailblazer::Operation
12
- extend Trailblazer::Operation::Container
13
- end
14
-
15
- it "allows 2.2 call style" do
16
- Create.({}, my_container)["user_repository"].must_equal Object
17
- end
18
-
19
- it { Create.({}, {}, my_container)["user_repository"].must_equal Object }
20
- it { Create.({}, {}, my_container)["contract.create"].must_equal Array }
21
- # also allows our own options PLUS containers.
22
- it { Create.({}, {"model" => String}, my_container)["model"].must_equal String }
23
- it { Create.({}, {"model" => String}, my_container)["user_repository"].must_equal Object }
24
- it { Create.({}, {"user_repository" => Integer}, my_container)["user_repository"].must_equal Integer }
25
- end