trailblazer-activity 0.7.0 → 0.7.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: be148af716c8a5bd21b666b22bf75bf2210854b4c710cfa69a26505b1725710d
4
- data.tar.gz: 39f836d460d3dae33f9905103b4f6efdd57049ebdc9290ed21e441cefd0cb9dd
3
+ metadata.gz: 511b5b1197ad392755eaf1fb930a5b6080561ef25e85199ac1afecdeeeafc998
4
+ data.tar.gz: 58cae3a0c236f26a9f05a671b75618d51ff5075422e7eb796be3b4230a25fe17
5
5
  SHA512:
6
- metadata.gz: 1dc6d49f7436922ea378c4af9604242dec98ff08aa29d5c2f156b7569cbf2e2704380f6050a659dec7d9f28471d3194b3c2c4bd61ef4dfecf3657d1e6a98dfbc
7
- data.tar.gz: 8b214a0952c72650665bd2413254d526bbab9fce4920b3b2fa25aced774994ca49a96bed66ef1ef4d6adc09c63d78ef604abef94205d1ee5edb09bcd544d66fe
6
+ metadata.gz: 4123c5d0e4647a683f16811e36beba43ca4f88cd5abd6e325b8a340961c7a219d90aa9ba73543aa9dd0d21a4eebb7b13925d227036b5f12a30e5ca2ec1bff966
7
+ data.tar.gz: a463bcf78493d8f31f13141a66be05f260d95f7c7f55af0e7f0aa58be0a59b5585c4ffbaadee78c465ca807f9d21788f4c98dc195b19538f74c973b29b5cd2af
data/CHANGES.md CHANGED
@@ -1,3 +1,10 @@
1
+ # 0.7.1
2
+
3
+ * Alias `Trace.call` to `Trace.invoke` for consistency.
4
+ * Allow injecting your own stack into `Trace.invoke`. This enables us to provide tracing even when there's an exception (due to, well, mutability).
5
+ * Minor changes in `Trace::Present` so that "unfinished" stacks can also be rendered.
6
+ * `Trace::Present.tree` is now private and superseded by `Present.call`.
7
+
1
8
  # 0.7.0
2
9
 
3
10
  * Remove `DSL::Helper`, "helper" methods now sit directly in the `DSL` namespace.
@@ -2,38 +2,56 @@ require "hirb"
2
2
 
3
3
  module Trailblazer
4
4
  class Activity < Module
5
+
6
+ # Task < Array
7
+ # [ input, ..., output ]
8
+
5
9
  module Trace
6
10
  # TODO: make this simpler.
7
11
  module Present
8
12
  module_function
9
13
 
10
- def tree(stack, level=1, tree=[])
14
+ def call(stack, level=1, tree=[])
15
+ tree(stack.to_a, level, tree)
16
+ end
17
+
18
+ def tree(stack, level, tree)
11
19
  tree_for(stack, level, tree)
12
20
 
13
21
  Hirb::Console.format_output(tree, class: :tree, type: :directory)
14
22
  end
15
23
 
16
24
  def tree_for(stack, level, tree)
17
- stack.each do |captured, *returned|
18
- task = captured.task
25
+ stack.each do |task| # always a Stack::Task[input, ..., output]
26
+ input, output, nested = input_output_nested_for_task(task)
27
+
28
+ task = input.task
19
29
 
20
- graph = Introspect::Graph(captured.activity)
30
+ graph = Introspect::Graph(input.activity)
21
31
 
22
32
  name = (node = graph.find { |node| node[:task] == task }) ? node[:id] : task
23
33
  name ||= task # FIXME: bullshit
24
34
 
25
- if returned.size == 1 # flat
26
- tree << [ level, name ]
27
- else # nesting
28
- tree << [ level, name ]
35
+ tree << [ level, name ]
29
36
 
30
- tree_for(returned[0..-2], level + 1, tree)
37
+ if nested.any? # nesting
38
+ tree_for(nested, level + 1, tree)
31
39
  end
32
40
 
33
41
  tree
34
42
  end
35
43
  end
36
44
 
45
+ # DISCUSS: alternatively, we can have Task<input: output: data: >
46
+ def input_output_nested_for_task(task)
47
+ input = task[0]
48
+ output = task[-1]
49
+
50
+ output, nested = output.is_a?(Entity::Output) ? [output, task-[input, output]] : [nil, task[1..-1]]
51
+
52
+ return input, output, nested
53
+ end
54
+
37
55
  def to_name(debug_item)
38
56
  track = debug_item[2]
39
57
  klass = track.class == Class ? track : track.class
@@ -17,9 +17,9 @@ class Trailblazer::Activity < Module
17
17
  def capture_return((wrap_config, original_args), **circuit_options)
18
18
  (original_options, original_flow_options, _) = original_args[0]
19
19
 
20
- original_flow_options[:stack] << Trailblazer::Activity::Trace::Entity.new(
21
- wrap_config[:task], {}, :return, wrap_config[:return_signal]
22
- )
20
+ original_flow_options[:stack] << Trailblazer::Activity::Trace::Entity::Output.new(
21
+ wrap_config[:task], {}, wrap_config[:return_signal]
22
+ ).freeze
23
23
 
24
24
  original_flow_options[:stack].unindent!
25
25
 
@@ -33,9 +33,9 @@ class Trailblazer::Activity < Module
33
33
  def capture_for(task, (ctx, flow), activity:, **circuit_options)
34
34
  flow[:stack].indent!
35
35
 
36
- flow[:stack] << Trailblazer::Activity::Trace::Entity.new(
37
- task, activity, :args, nil, {}
38
- )
36
+ flow[:stack] << Trailblazer::Activity::Trace::Entity::Input.new(
37
+ task, activity
38
+ ).freeze
39
39
 
40
40
  return [ctx, flow], circuit_options.merge(activity: activity)
41
41
  end
@@ -5,47 +5,63 @@ module Trailblazer
5
5
  # stack, _ = Trailblazer::Activity::Trace.(activity, activity[:Start], { id: 1 })
6
6
  # puts Trailblazer::Activity::Present.tree(stack) # renders the trail.
7
7
  #
8
- # Hooks into the TaskWrap.
8
+ # Hooks into the taskWrap.
9
9
  module Trace
10
- # {:argumenter} API
11
- # FIXME: needs Introspect.arguments_for_call
12
- # FIXME: needs TaskWrap.arguments_for_call
13
- def self.arguments_for_call(activity, (options, flow_options), **circuit_options)
14
- tracing_flow_options = {
15
- stack: Trace::Stack.new,
16
- }
17
-
18
- tracing_circuit_options = {
19
- wrap_runtime: ::Hash.new(Trace.wirings), # FIXME: this still overrides existing :wrap_runtime.
20
- }
21
-
22
- return activity, [ options, flow_options.merge(tracing_flow_options) ], circuit_options.merge(tracing_circuit_options)
23
- end
10
+ class << self
11
+ # {:argumenter} API
12
+ # FIXME: needs Introspect.arguments_for_call
13
+ # FIXME: needs TaskWrap.arguments_for_call
14
+ def arguments_for_call(activity, (options, flow_options), **circuit_options)
15
+ tracing_flow_options = {
16
+ stack: Trace::Stack.new,
17
+ }
24
18
 
25
- def self.call(activity, (options, flow_options), circuit_options={})
26
- activity, (options, flow_options), circuit_options = Trace.arguments_for_call( activity, [options, flow_options], circuit_options ) # only run once for the entire circuit!
27
- last_signal, (options, flow_options) =
28
- Activity::TaskWrap.invoke(activity, [options, flow_options], circuit_options)
19
+ tracing_circuit_options = {
20
+ wrap_runtime: ::Hash.new(Trace.wirings), # FIXME: this still overrides existing :wrap_runtime.
21
+ }
29
22
 
30
- return flow_options[:stack].to_a, last_signal, [options, flow_options]
31
- end
23
+ return activity, [ options, tracing_flow_options.merge(flow_options) ], circuit_options.merge(tracing_circuit_options)
24
+ end
25
+
26
+ def call(activity, (options, flow_options), circuit_options={})
27
+ activity, (options, flow_options), circuit_options = Trace.arguments_for_call( activity, [options, flow_options], circuit_options ) # only run once for the entire circuit!
28
+
29
+ last_signal, (options, flow_options) =
30
+ Activity::TaskWrap.invoke(activity, [options, flow_options], circuit_options)
31
+
32
+ return flow_options[:stack], last_signal, [options, flow_options]
33
+ end
32
34
 
33
- private
35
+ alias_method :invoke, :call
34
36
 
35
- # Insertions for the trace tasks that capture the arguments just before calling the task,
36
- # and before the TaskWrap is finished.
37
- #
38
- # Note that the TaskWrap steps are implemented in Activity::TaskWrap::Trace.
39
- def self.wirings
40
- Module.new do
41
- extend Activity::Path::Plan()
37
+ # Insertions for the trace tasks that capture the arguments just before calling the task,
38
+ # and before the TaskWrap is finished.
39
+ #
40
+ # Note that the TaskWrap steps are implemented in Activity::TaskWrap::Trace.
41
+ #
42
+ # @private
43
+ def wirings
44
+ Module.new do
45
+ extend Activity::Path::Plan()
42
46
 
43
- task TaskWrap::Trace.method(:capture_args), id: "task_wrap.capture_args", before: "task_wrap.call_task"
44
- task TaskWrap::Trace.method(:capture_return), id: "task_wrap.capture_return", before: "End.success", group: :end
47
+ task TaskWrap::Trace.method(:capture_args), id: "task_wrap.capture_args", before: "task_wrap.call_task"
48
+ task TaskWrap::Trace.method(:capture_return), id: "task_wrap.capture_return", before: "End.success", group: :end
49
+ end
45
50
  end
46
51
  end
47
52
 
48
- Entity = Struct.new(:task, :activity, :type, :value, :value2)
53
+ Entity = Struct.new(:task, :activity, :data)
54
+ class Entity::Input < Entity
55
+ end
56
+
57
+ class Entity::Output < Entity
58
+ end
59
+
60
+ class Task < Array
61
+ def inspect
62
+ %{<Task>#{super}}
63
+ end
64
+ end
49
65
 
50
66
  # Mutable/stateful per design. We want a (global) stack!
51
67
  class Stack
@@ -55,7 +71,7 @@ module Trailblazer
55
71
  end
56
72
 
57
73
  def indent!
58
- current << indented = []
74
+ current << indented = Task.new
59
75
  @stack << indented
60
76
  end
61
77
 
@@ -1,5 +1,5 @@
1
1
  module Trailblazer
2
2
  class Activity < Module
3
- VERSION = "0.7.0"
3
+ VERSION = "0.7.1"
4
4
  end
5
5
  end
@@ -8,9 +8,9 @@ Gem::Specification.new do |spec|
8
8
  spec.authors = ["Nick Sutterer"]
9
9
  spec.email = ["apotonick@gmail.com"]
10
10
 
11
- spec.summary = %q{The main element for Trailblazer's BPMN-compliant workflows.}
12
- spec.description = %q{The main element for Trailblazer's BPMN-compliant workflows. Used in Trailblazer's Operation to implement the Railway.}
13
- spec.homepage = "http://trailblazer.to/gems/workflow"
11
+ spec.summary = %q{Define and run any desired circuit of business logic.}
12
+ spec.description = %q{Define and run any desired circuit of business logic. Used in Trailblazer's Operation to implement the railway.}
13
+ spec.homepage = "http://trailblazer.to"
14
14
  spec.licenses = ["MIT"]
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trailblazer-activity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Sutterer
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-05-31 00:00:00.000000000 Z
11
+ date: 2018-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hirb
@@ -94,8 +94,8 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
- description: The main element for Trailblazer's BPMN-compliant workflows. Used in
98
- Trailblazer's Operation to implement the Railway.
97
+ description: Define and run any desired circuit of business logic. Used in Trailblazer's
98
+ Operation to implement the railway.
99
99
  email:
100
100
  - apotonick@gmail.com
101
101
  executables: []
@@ -155,7 +155,7 @@ files:
155
155
  - lib/trailblazer/activity/version.rb
156
156
  - lib/trailblazer/circuit.rb
157
157
  - trailblazer-activity.gemspec
158
- homepage: http://trailblazer.to/gems/workflow
158
+ homepage: http://trailblazer.to
159
159
  licenses:
160
160
  - MIT
161
161
  metadata: {}
@@ -178,5 +178,5 @@ rubyforge_project:
178
178
  rubygems_version: 2.7.3
179
179
  signing_key:
180
180
  specification_version: 4
181
- summary: The main element for Trailblazer's BPMN-compliant workflows.
181
+ summary: Define and run any desired circuit of business logic.
182
182
  test_files: []