trailblazer-developer 0.0.27 → 0.0.28

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: 45cd9fac3c0701cd0e98573e27c59c80de31d5d91b306980c961d58f64161d71
4
- data.tar.gz: 745d4d28834261571fdbccc9949b597bb1f17f669bc238a6bbc09925001d4594
3
+ metadata.gz: 2bc71f425eee589bda27a8b681b796650443e688c3dc46ddb7d12e6daf092f08
4
+ data.tar.gz: 2f128bcf1675ba3147db4737f348b52d9a1f96562e317feeddda79846c1ca0e8
5
5
  SHA512:
6
- metadata.gz: 57bdf494ed795a80edadba06bcc011d9ee5832eb6a4f87f0c02a5a1b0a81b82be05507eb4eb593cd6476b71efb7f9a1a82eced117dcc5e41175d028f5c2c8f0e
7
- data.tar.gz: 6735f1eea27c3fa7c87d394d3d0a9baf9c2218f632f8bd2d2b5b9325366a3d5ff47a5e89668bd8146429e8ef00ad814b9593fa0e8fbea7519dbe3dd345ae14bd
6
+ metadata.gz: 3b10040b636e96bc396ec89b41db298030552b0460ad7fa88b94ebf5a767e881cdf2c219ab573522f4226cb84d6e6d5baac786d384b7ef93d2788576dea4183f
7
+ data.tar.gz: 2eb0f50c4af74ab44ea0353e61b45a4645adb0f70132be92d329dd8123d0fd20561b58047be1bd9b2a25cb9e6bd5ccd2a6ac67089c7546e0041c78c24c455c62
@@ -1,6 +1,3 @@
1
- ## This file is managed by Terraform.
2
- ## Do not modify this file directly, as it may be overwritten.
3
- ## Please open an issue instead.
4
1
  name: CI
5
2
  on: [push, pull_request]
6
3
  jobs:
@@ -8,7 +5,7 @@ jobs:
8
5
  strategy:
9
6
  fail-fast: false
10
7
  matrix:
11
- ruby: [2.7, '3.0', '3.1']
8
+ ruby: [2.6, 2.7, '3.0', '3.1', '3.2', 'jruby']
12
9
  runs-on: ubuntu-latest
13
10
  steps:
14
11
  - uses: actions/checkout@v3
data/CHANGES.md CHANGED
@@ -1,3 +1,12 @@
1
+ # 0.0.28
2
+
3
+ * Move `Introspect::Graph` over from `trailblazer-activity`. It's a data structure very specific
4
+ to rendering, which is not a part of pure runtime behavior.
5
+ * Use `Introspect.Nodes` API instead of `TaskMap`.
6
+ * Remove `:task_maps_per_activity` in `Debugger` as we don't need to cache anymore.
7
+ * Require `trailblazer-activity-dsl-linear-1.2.0`.
8
+ * Remove `Render::Circuit` as this is part of `trailblazer-activity` now.
9
+
1
10
  # 0.0.27
2
11
 
3
12
  ## Trace
data/Gemfile CHANGED
@@ -3,8 +3,11 @@ source "https://rubygems.org"
3
3
  # Specify your gem's dependencies in trailblazer-developer.gemspec
4
4
  gemspec
5
5
 
6
- # gem "trailblazer-activity", ">= 0.7.1"
7
- # gem "trailblazer-activity", path: "../trailblazer-activity"
8
- # gem "trailblazer-activity-dsl-linear", path: "../trailblazer-activity-dsl-linear"
9
- gem "trailblazer-activity-dsl-linear", github: "trailblazer/trailblazer-activity-dsl-linear"
10
- gem "trailblazer-activity", github: "trailblazer/trailblazer-activity"
6
+ # gem "trailblazer-activity", path: "../trailblazer-activity"
7
+ # gem "trailblazer-activity-dsl-linear", path: "../trailblazer-activity-dsl-linear"
8
+ # gem "trailblazer-operation", path: "../trailblazer-operation"
9
+ # gem "trailblazer-pro", path: "../trailblazer-pro"
10
+
11
+ # gem "trailblazer-activity", github: "trailblazer/trailblazer-activity"
12
+ # gem "trailblazer-activity-dsl-linear", github: "trailblazer/trailblazer-activity-dsl-linear"
13
+
@@ -0,0 +1,83 @@
1
+ # NOTE: The Graph API might get deprecated and replaced.
2
+ module Trailblazer
3
+ module Developer
4
+ module Introspect
5
+ # TODO: order of step/fail/pass in Node would be cool to have
6
+
7
+ # TODO: Remove Graph. This is only useful to render the full circuit
8
+ # Some thoughts here:
9
+ # * where do we need Schema.outputs? and where task.outputs?
10
+ #
11
+ #
12
+ # @private This API is still under construction.
13
+ class Graph
14
+ def initialize(activity)
15
+ @schema = activity.to_h or raise
16
+ @circuit = @schema[:circuit]
17
+ @map = @circuit.to_h[:map]
18
+ @configs = @schema[:nodes]
19
+ end
20
+
21
+ def find(id = nil, &block)
22
+ return find_by_id(id) unless block_given?
23
+
24
+ find_with_block(&block)
25
+ end
26
+
27
+ # TODO: convert to {#to_a}.
28
+ def collect(strategy: :circuit)
29
+ @map.keys.each_with_index.collect { |task, i| yield find_with_block { |node| node.task == task }, i }
30
+ end
31
+
32
+ def stop_events
33
+ @circuit.to_h[:end_events]
34
+ end
35
+
36
+ private
37
+
38
+ def find_by_id(id)
39
+ node = @configs.find { |_, _node| _node.id == id } or return
40
+ node_for(node[1])
41
+ end
42
+
43
+ def find_with_block
44
+ existing = @configs.find { |_, node| yield Node(node.task, node.id, node.outputs, node.data) } or return
45
+
46
+ node_for(existing[1])
47
+ end
48
+
49
+ # Build a {Graph::Node} with outputs etc.
50
+ def node_for(node_attributes)
51
+ Node(
52
+ node_attributes.task,
53
+ node_attributes.id,
54
+ node_attributes.outputs, # [#<struct Trailblazer::Activity::Output signal=Trailblazer::Activity::Right, semantic=:success>]
55
+ outgoings_for(node_attributes),
56
+ node_attributes.data,
57
+ )
58
+ end
59
+
60
+ def Node(*args)
61
+ Node.new(*args).freeze
62
+ end
63
+
64
+ Node = Struct.new(:task, :id, :outputs, :outgoings, :data)
65
+ Outgoing = Struct.new(:output, :task)
66
+
67
+ def outgoings_for(node)
68
+ outputs = node.outputs
69
+ connections = @map[node.task]
70
+
71
+ connections.collect do |signal, target|
72
+ output = outputs.find { |out| out.signal == signal }
73
+ Outgoing.new(output, target)
74
+ end
75
+ end
76
+ end
77
+
78
+ def self.Graph(*args)
79
+ Graph.new(*args)
80
+ end
81
+ end # Graph
82
+ end
83
+ end
@@ -2,61 +2,13 @@ module Trailblazer
2
2
  module Developer
3
3
  module_function
4
4
 
5
- def render(activity, **options)
6
- Render::Circuit.(activity, **options)
7
- end
8
-
9
- module Render
10
- module Circuit
11
- module_function
12
-
13
- # Render an {Activity}'s circuit as a simple hash.
14
- def call(activity, path: nil, **options)
15
- if path # TODO: move to place where all renderers can use this logic!
16
- node, _, graph = Developer::Introspect.find_path(activity, path)
17
- activity = node.task
18
- end
19
-
20
- graph = Activity::Introspect::Graph(activity)
21
-
22
- circuit_hash(graph, **options)
23
- end
24
-
25
- def circuit_hash(graph, **options)
26
- content = graph.collect do |node|
27
- conns = node.outgoings.collect do |outgoing|
28
- " {#{outgoing.output.signal}} => #{inspect_with_matcher(outgoing.task, **options)}"
29
- end
30
-
31
- [ inspect_with_matcher(node.task, **options), conns.join("\n") ]
32
- end
33
-
34
- content = content.join("\n")
35
-
36
- "\n#{content}".gsub(/0x\w+/, "0x")
37
- end
38
-
39
- # If Ruby had pattern matching, this function wasn't necessary.
40
- def inspect_with_matcher(task, inspect_task: method(:inspect_task), inspect_end: method(:inspect_end))
41
- return inspect_task.(task) unless task.kind_of?(Trailblazer::Activity::End)
42
- inspect_end.(task)
43
- end
44
-
45
- def inspect_task(task)
46
- task.inspect
47
- end
48
-
49
- def inspect_end(task)
50
- class_name = Render::Circuit.strip(task.class)
51
- options = task.to_h
52
-
53
- "#<#{class_name}/#{options[:semantic].inspect}>"
54
- end
55
-
56
- def self.strip(string)
57
- string.to_s.sub("Trailblazer::Activity::", "")
58
- end
5
+ def render(activity, path: nil, **options)
6
+ if path # TODO: move to place where all renderers can use this logic!
7
+ node, _, graph = Developer::Introspect.find_path(activity, path)
8
+ activity = node.task
59
9
  end
10
+
11
+ Activity::Introspect::Render.(activity, **options)
60
12
  end
61
13
  end
62
14
  end
@@ -15,7 +15,7 @@ module Trailblazer
15
15
  module_function
16
16
 
17
17
  def call(operation, style: :line)
18
- graph = Activity::Introspect::Graph(operation)
18
+ graph = Introspect::Graph(operation)
19
19
 
20
20
  rows = graph.collect do |node, i|
21
21
  next if node[:data][:stop_event] # DISCUSS: show this?
@@ -18,7 +18,7 @@ module Trailblazer
18
18
 
19
19
  # @param activity Activity
20
20
  def self.task_wrap_for_activity(activity, **)
21
- activity[:wrap_static]
21
+ activity.to_h[:config][:wrap_static]
22
22
  end
23
23
 
24
24
  def self.render_pipeline(pipeline, level)
@@ -23,8 +23,8 @@ module Trailblazer
23
23
 
24
24
  # Default steps for the Debugger::Node options pipeline, following the step-interface.
25
25
  module Default
26
- def self.compile_id(ctx, task_map_for_activity:, task:, **)
27
- ctx[:compile_id] = task_map_for_activity.fetch(task)[:id]
26
+ def self.compile_id(ctx, activity:, task:, **)
27
+ ctx[:compile_id] = Activity::Introspect.Nodes(activity, task: task)[:id]
28
28
  end
29
29
 
30
30
  def self.compile_path(ctx, parent_map:, captured_node:, **)
@@ -16,13 +16,8 @@ module Trailblazer
16
16
 
17
17
  container_activity = enumerable_tree[0].captured_input.activity # TODO: any other way to grab the container_activity? Maybe via {activity.container_activity}?
18
18
 
19
- # TODO: cache activity graph
20
19
  top_activity = enumerable_tree[0].captured_input.task
21
20
 
22
- task_maps_per_activity = {
23
- container_activity => {top_activity => {id: nil}} # exposes {Introspect::TaskMap}-compatible interface.
24
- }
25
-
26
21
  # DISCUSS: this might change if we introduce a new Node type for Trace.
27
22
  debugger_nodes = enumerable_tree[0..-1].collect do |node|
28
23
  activity = node.captured_input.activity
@@ -31,22 +26,18 @@ module Trailblazer
31
26
  options = node_options[node.captured_input] || {}
32
27
 
33
28
 
34
-
35
- task_map_for_activity = task_maps_per_activity[activity] || Activity::Introspect.TaskMap(activity)
36
-
37
29
  options_for_debugger_node, _ = normalizer.(
38
30
  {
39
31
  captured_node: node,
40
32
  task: task,
41
33
  activity: activity,
42
34
  parent_map: parent_map,
43
- task_map_for_activity: task_map_for_activity,
44
35
  **options
45
36
  },
46
37
  []
47
38
  )
48
39
 
49
- options_for_debugger_node = options_for_debugger_node.slice(*(options_for_debugger_node.keys - [:parent_map, :task_map_for_activity]))
40
+ options_for_debugger_node = options_for_debugger_node.slice(*(options_for_debugger_node.keys - [:parent_map]))
50
41
 
51
42
  # these attributes are not changing with the presentation
52
43
  Debugger::Node.new(
@@ -29,7 +29,7 @@ module Trailblazer
29
29
  path = []
30
30
 
31
31
  while parent = parent_map[node] # DISCUSS: what if the graphs are cached and present, already?
32
- node_id = Activity::Introspect::TaskMap(node.captured_input.activity)[node.captured_input.task][:id]
32
+ node_id = Activity::Introspect.Nodes(node.captured_input.activity, task: node.captured_input.task).id
33
33
  path << node_id
34
34
 
35
35
  node = parent
@@ -1,7 +1,7 @@
1
1
  module Trailblazer
2
2
  module Version
3
3
  module Developer
4
- VERSION = "0.0.27"
4
+ VERSION = "0.0.28"
5
5
  end
6
6
  end
7
7
  end
@@ -19,3 +19,4 @@ require "trailblazer/developer/render/linear"
19
19
  require "trailblazer/developer/render/task_wrap"
20
20
  require "trailblazer/developer/introspect" # TODO: might get removed, again.
21
21
  require "trailblazer/developer/trace/debugger/normalizer"
22
+ require "trailblazer/developer/introspect/graph"
@@ -22,9 +22,8 @@ Gem::Specification.new do |spec|
22
22
  spec.add_development_dependency "minitest"
23
23
  spec.add_development_dependency "minitest-line"
24
24
  spec.add_development_dependency "rake"
25
- spec.add_development_dependency "trailblazer-operation"
25
+ spec.add_development_dependency "trailblazer-operation", ">= 0.10.0"
26
26
 
27
- spec.add_dependency "trailblazer-activity-dsl-linear", ">= 1.1.0", "< 1.2.0"
28
- # FIXME: Activity 0.14.1
27
+ spec.add_dependency "trailblazer-activity-dsl-linear", ">= 1.2.0", "< 1.3.0"
29
28
  spec.add_dependency "hirb"
30
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trailblazer-developer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.27
4
+ version: 0.0.28
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Sutterer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-14 00:00:00.000000000 Z
11
+ date: 2023-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -72,34 +72,34 @@ dependencies:
72
72
  requirements:
73
73
  - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: 0.10.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: 0.10.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: trailblazer-activity-dsl-linear
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: 1.1.0
89
+ version: 1.2.0
90
90
  - - "<"
91
91
  - !ruby/object:Gem::Version
92
- version: 1.2.0
92
+ version: 1.3.0
93
93
  type: :runtime
94
94
  prerelease: false
95
95
  version_requirements: !ruby/object:Gem::Requirement
96
96
  requirements:
97
97
  - - ">="
98
98
  - !ruby/object:Gem::Version
99
- version: 1.1.0
99
+ version: 1.2.0
100
100
  - - "<"
101
101
  - !ruby/object:Gem::Version
102
- version: 1.2.0
102
+ version: 1.3.0
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: hirb
105
105
  requirement: !ruby/object:Gem::Requirement
@@ -122,9 +122,6 @@ extensions: []
122
122
  extra_rdoc_files: []
123
123
  files:
124
124
  - ".github/workflows/ci.yml"
125
- - ".github/workflows/ci_jruby.yml"
126
- - ".github/workflows/ci_legacy.yml"
127
- - ".github/workflows/ci_truffleruby.yml"
128
125
  - ".gitignore"
129
126
  - CHANGES.md
130
127
  - Gemfile
@@ -135,6 +132,7 @@ files:
135
132
  - bin/setup
136
133
  - lib/trailblazer/developer.rb
137
134
  - lib/trailblazer/developer/introspect.rb
135
+ - lib/trailblazer/developer/introspect/graph.rb
138
136
  - lib/trailblazer/developer/render/circuit.rb
139
137
  - lib/trailblazer/developer/render/linear.rb
140
138
  - lib/trailblazer/developer/render/task_wrap.rb
@@ -1,19 +0,0 @@
1
- ## This file is managed by Terraform.
2
- ## Do not modify this file directly, as it may be overwritten.
3
- ## Please open an issue instead.
4
- name: CI JRuby
5
- on: [push, pull_request]
6
- jobs:
7
- test:
8
- strategy:
9
- fail-fast: false
10
- matrix:
11
- ruby: [jruby, jruby-head]
12
- runs-on: ubuntu-latest
13
- steps:
14
- - uses: actions/checkout@v3
15
- - uses: ruby/setup-ruby@v1
16
- with:
17
- ruby-version: ${{ matrix.ruby }}
18
- bundler-cache: true
19
- - run: bundle exec rake
@@ -1,19 +0,0 @@
1
- ## This file is managed by Terraform.
2
- ## Do not modify this file directly, as it may be overwritten.
3
- ## Please open an issue instead.
4
- name: CI with EOL ruby versions
5
- on: [push, pull_request]
6
- jobs:
7
- test:
8
- strategy:
9
- fail-fast: false
10
- matrix:
11
- ruby: [2.5, 2.6]
12
- runs-on: ubuntu-latest
13
- steps:
14
- - uses: actions/checkout@v3
15
- - uses: ruby/setup-ruby@v1
16
- with:
17
- ruby-version: ${{ matrix.ruby }}
18
- bundler-cache: true
19
- - run: bundle exec rake
@@ -1,19 +0,0 @@
1
- ## This file is managed by Terraform.
2
- ## Do not modify this file directly, as it may be overwritten.
3
- ## Please open an issue instead.
4
- name: CI TruffleRuby
5
- on: [push, pull_request]
6
- jobs:
7
- test:
8
- strategy:
9
- fail-fast: false
10
- matrix:
11
- ruby: [truffleruby, truffleruby-head]
12
- runs-on: ubuntu-latest
13
- steps:
14
- - uses: actions/checkout@v3
15
- - uses: ruby/setup-ruby@v1
16
- with:
17
- ruby-version: ${{ matrix.ruby }}
18
- bundler-cache: true
19
- - run: bundle exec rake