trailblazer-activity-dsl-linear 1.2.5 → 1.2.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: b99e0c72f1c402fc56bf48c302d04d5749e47f159ce9d7b10a2537665a0af62e
4
- data.tar.gz: f3c35842ae2631b358a1decaad27bb32785e578f0f99cf2597757c2e4485a120
3
+ metadata.gz: e586cfffe36a34eb165699f525802629709dc0934d193a8bcbc460c33e63a4a0
4
+ data.tar.gz: 965ee6e76f86fa2e57fb11fff9c9e511ce655e72e01e431ed72a9bc338aeedd7
5
5
  SHA512:
6
- metadata.gz: 2035d707ca689d84923de40eaccd48b08c355be9351172804dc45d80ded9a141088b26b2d7a464727c5b9c49082018d02085aa3754d0bdca19ad13c6bf70a161
7
- data.tar.gz: cfdf092b175fdefd34a0321248aa95f4a5a8c768b18e3f23f9285be10c0f1c720dd633e061b9d079a60d610ef743ad6544597af0bf5adb3cf7cb53b6b9b91502
6
+ metadata.gz: 354cd6aa6b514f1b5e43b7b3b04a39f237e7d0dbb7b0ee4ffff876e7ed381fca59393e78b945b1a6d558678d770c84150770273164357d45a6b698d8f040952d
7
+ data.tar.gz: 1cebc503caa1c55d6753e233c519eeb0337583dc3216fa5fb5829bc7286dde95ad3b752bef876b762f94846d07ff21dd06d68306d5e72133d226f80819d64b9a
@@ -5,10 +5,10 @@ jobs:
5
5
  strategy:
6
6
  fail-fast: false
7
7
  matrix:
8
- ruby: [2.5, 2.6, 2.7, '3.0', '3.1', '3.2', 'head', 'jruby']
8
+ ruby: [2.5, 2.6, 2.7, '3.0', '3.1', '3.2', "3.3", 'head', 'jruby']
9
9
  runs-on: ubuntu-latest
10
10
  steps:
11
- - uses: actions/checkout@v3
11
+ - uses: actions/checkout@v4
12
12
  - uses: ruby/setup-ruby@v1
13
13
  with:
14
14
  ruby-version: ${{ matrix.ruby }}
data/CHANGES.md CHANGED
@@ -1,3 +1,9 @@
1
+ # 1.2.6
2
+
3
+ * Speed up compile time of activities by ~ 1.3x by not using `Intermediate::Compiler`
4
+ but compiling the `Activity::Circuit` and `Schema` directly. This also saves runtime
5
+ memory.
6
+
1
7
  # 1.2.5
2
8
 
3
9
  * Fix a bug where, within a helper `Path()`, the last step couldn't
data/Gemfile CHANGED
@@ -5,7 +5,7 @@ gemspec
5
5
 
6
6
  gem "minitest-line"
7
7
 
8
- gem "trailblazer-developer", path: "../trailblazer-developer"
8
+ # gem "trailblazer-developer", path: "../trailblazer-developer"
9
9
  # gem "trailblazer-developer", github: "trailblazer/trailblazer-developer"
10
10
  # gem "trailblazer-declarative", path: "../trailblazer-declarative"
11
11
  # gem "trailblazer-activity", path: "../trailblazer-activity"
@@ -15,4 +15,4 @@ gem "trailblazer-developer", path: "../trailblazer-developer"
15
15
  # gem "benchmark-ips"
16
16
  # gem "stackprof"
17
17
  # gem "standard"
18
- gem "trailblazer-core-utils", path: "../trailblazer-core-utils"
18
+ # gem "trailblazer-core-utils", path: "../trailblazer-core-utils"
@@ -3,7 +3,8 @@ module Trailblazer
3
3
  module DSL
4
4
  module Linear
5
5
  class Sequence
6
- # Implements a DSL Builder pattern.
6
+ # Run a normalizer for a user DSL input, and then apply the new step using the ADDS interface
7
+ # to the sequence.
7
8
  module Builder
8
9
  # @return Sequence
9
10
  def self.call(method, argument, options, **kws, &block)
@@ -8,51 +8,68 @@ module Trailblazer
8
8
  module_function
9
9
 
10
10
  # Default strategy to find out what's a stop event is to inspect the TaskRef's {data[:stop_event]}.
11
- def find_termini(intermediate_wiring)
12
- intermediate_wiring
13
- .find_all { |task_ref, _| task_ref.data[:stop_event] }
14
- .collect { |task_ref, _| [task_ref.id, task_ref.data.fetch(:semantic)] }
11
+ def find_termini(sequence)
12
+ sequence
13
+ .find_all { |_, _, _, data| data[:stop_event] }
14
+ .collect { |_, task, _, data| [task, data.fetch(:semantic)] }
15
15
  .to_h
16
16
  end
17
17
 
18
- # The first task in the wiring is the default start task.
19
- def find_start_task_id(intermediate_wiring) # FIXME: shouldn't we use sequence here? and Row#id?
20
- intermediate_wiring.first.first.id
18
+ def find_start_task(sequence)
19
+ sequence[0][1]
21
20
  end
22
21
 
23
- def call(sequence, find_stops: method(:find_termini), find_start: method(:find_start_task_id))
24
- _implementations, intermediate_wiring =
25
- sequence.inject([[], []]) do |(implementations, intermediates), seq_row|
26
- _magnetic_to, task, connections, data = seq_row
27
- id = data[:id]
22
+ def call(sequence, find_stops: Compiler.method(:find_termini), find_start: method(:find_start_task))
23
+ config = Activity::Schema::Intermediate::Compiler::DEFAULT_CONFIG
28
24
 
29
- # execute all {Search}s for one sequence row.
30
- connections = find_connections(seq_row, connections, sequence)
25
+ nodes_attributes = []
31
26
 
32
- # FIXME: {:extensions} should be initialized
33
- implementations += [[id, Schema::Implementation::Task(task, connections.collect { |output, _| output }, data[:extensions] || [])]]
27
+ wiring = sequence.collect do |seq_row|
28
+ _magnetic_to, task, connections, data = seq_row
34
29
 
35
- intermediates += [
36
- [
37
- Schema::Intermediate::TaskRef(id, data),
38
- # Compute outputs.
39
- connections.collect { |output, target_id| Schema::Intermediate::Out(output.semantic, target_id) }
40
- ]
41
- ]
30
+ id = data[:id]
42
31
 
43
- [implementations, intermediates]
44
- end
32
+ # execute all {Search}s for one sequence row.
33
+ connections = find_connections(seq_row, connections, sequence)
45
34
 
46
- start_task_id = find_start.(intermediate_wiring)
47
- terminus_to_semantic = find_stops.(intermediate_wiring)
35
+ circuit_connections = connections.collect { |output, target_task| [output.signal, target_task] }.to_h
48
36
 
49
- intermediate = Schema::Intermediate.new(intermediate_wiring.to_h, terminus_to_semantic, start_task_id)
50
- implementation = _implementations.to_h
37
+ extensions = (seq_row[3][:extensions] || [])
38
+ # FIXME: move that to {Intermediate::Compiler}?
39
+ config = extensions.inject(config) { |cfg, ext| ext.(config: cfg, id: id, task: task) } # {ext} must return new config hash.
51
40
 
52
- Schema::Intermediate::Compiler.(intermediate, implementation) # implemented in the generic {trailblazer-activity} gem.
53
- end
41
+ # nodes_attributes:
42
+ outputs = connections.keys
43
+ nodes_attributes << [
44
+ id,
45
+ task,
46
+ data,
47
+ outputs
48
+ ]
49
+
50
+ [
51
+ task,
52
+ circuit_connections
53
+ ]
54
+ end.to_h
55
+
56
+ termini = find_stops.(sequence) # {task => semantic}
57
+ start_task = find_start.(sequence)
54
58
 
55
- # private
59
+ circuit = Trailblazer::Activity::Circuit.new(
60
+ wiring,
61
+ termini.keys, # termini
62
+ start_task: start_task
63
+ )
64
+
65
+ # activity_outputs = [Activity::Output(steps[last_step_i], :success)]
66
+ activity_outputs = termini.collect { |terminus, semantic| Activity::Output(terminus, semantic) }
67
+
68
+
69
+ nodes = Schema::Nodes(nodes_attributes)
70
+
71
+ Schema.new(circuit, activity_outputs, nodes, config)
72
+ end
56
73
 
57
74
  # Execute all search strategies for a row, retrieve outputs and
58
75
  # their respective target IDs.
@@ -64,9 +81,9 @@ module Trailblazer
64
81
 
65
82
  [
66
83
  output,
67
- target_seq_row.id
84
+ target_seq_row[1]
68
85
  ]
69
- end
86
+ end.to_h
70
87
  end
71
88
  end # Compiler
72
89
  end # Sequence
@@ -62,6 +62,7 @@ module Trailblazer
62
62
 
63
63
  private def recompile_activity(sequence)
64
64
  schema = Sequence::Compiler.(sequence)
65
+
65
66
  Activity.new(schema)
66
67
  end
67
68
 
@@ -3,7 +3,7 @@ module Trailblazer
3
3
  module Activity
4
4
  module DSL
5
5
  module Linear
6
- VERSION = "1.2.5"
6
+ VERSION = "1.2.6"
7
7
  end
8
8
  end
9
9
  end
@@ -0,0 +1,34 @@
1
+ module Trailblazer::Activity::DSL::Linear
2
+ module Zeitwerk
3
+ module Strategy
4
+ # DISCUSS: rename to {Finalize}?
5
+ # Don't recompile, just collect sequence steps.
6
+ private def recompile_activity_for(type, *args, &block)
7
+ sequence = apply_step_on_sequence_builder(type, *args, &block)
8
+
9
+ @state.update!(:sequence) { |*| sequence }
10
+ end
11
+
12
+ # Compile the final {Activity} via the sequence.
13
+ def finalize!
14
+ sequence = @state.get(:sequence)
15
+ # puts "~~~~~~~~~ finalizing #{self.inspect}"
16
+ recompile!(sequence)
17
+ end
18
+ end
19
+
20
+ module DSL
21
+ module Build
22
+ module_function
23
+ def Build(strategy, **options, &block)
24
+ activity_class = super
25
+ puts "yoo"
26
+ activity_class.finalize!
27
+
28
+ activity_class
29
+ end
30
+ end
31
+
32
+ end
33
+ end # Zeitwerk
34
+ end
@@ -17,13 +17,13 @@ Gem::Specification.new do |spec|
17
17
  end
18
18
  spec.require_paths = ["lib"]
19
19
 
20
- spec.add_dependency "trailblazer-activity", ">= 0.16.0", "< 0.17.0"
20
+ spec.add_dependency "trailblazer-activity", ">= 0.17.0", "< 0.18.0"
21
21
  spec.add_dependency "trailblazer-declarative", ">= 0.0.1", "< 0.1.0"
22
22
 
23
23
  spec.add_development_dependency "bundler"
24
- spec.add_development_dependency "minitest", ">= 5.15.0", "< 5.16.0"
24
+ spec.add_development_dependency "minitest"#, ">= 5.15.0", "< 5.16.0"
25
25
  spec.add_development_dependency "rake"
26
- spec.add_development_dependency "trailblazer-core-utils", "0.0.2"
26
+ spec.add_development_dependency "trailblazer-core-utils", "0.0.4"
27
27
 
28
28
  spec.required_ruby_version = ">= 2.5.0"
29
29
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trailblazer-activity-dsl-linear
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.5
4
+ version: 1.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Sutterer
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-03-05 00:00:00.000000000 Z
10
+ date: 2024-11-14 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: trailblazer-activity
@@ -16,20 +15,20 @@ dependencies:
16
15
  requirements:
17
16
  - - ">="
18
17
  - !ruby/object:Gem::Version
19
- version: 0.16.0
18
+ version: 0.17.0
20
19
  - - "<"
21
20
  - !ruby/object:Gem::Version
22
- version: 0.17.0
21
+ version: 0.18.0
23
22
  type: :runtime
24
23
  prerelease: false
25
24
  version_requirements: !ruby/object:Gem::Requirement
26
25
  requirements:
27
26
  - - ">="
28
27
  - !ruby/object:Gem::Version
29
- version: 0.16.0
28
+ version: 0.17.0
30
29
  - - "<"
31
30
  - !ruby/object:Gem::Version
32
- version: 0.17.0
31
+ version: 0.18.0
33
32
  - !ruby/object:Gem::Dependency
34
33
  name: trailblazer-declarative
35
34
  requirement: !ruby/object:Gem::Requirement
@@ -70,20 +69,14 @@ dependencies:
70
69
  requirements:
71
70
  - - ">="
72
71
  - !ruby/object:Gem::Version
73
- version: 5.15.0
74
- - - "<"
75
- - !ruby/object:Gem::Version
76
- version: 5.16.0
72
+ version: '0'
77
73
  type: :development
78
74
  prerelease: false
79
75
  version_requirements: !ruby/object:Gem::Requirement
80
76
  requirements:
81
77
  - - ">="
82
78
  - !ruby/object:Gem::Version
83
- version: 5.15.0
84
- - - "<"
85
- - !ruby/object:Gem::Version
86
- version: 5.16.0
79
+ version: '0'
87
80
  - !ruby/object:Gem::Dependency
88
81
  name: rake
89
82
  requirement: !ruby/object:Gem::Requirement
@@ -104,15 +97,14 @@ dependencies:
104
97
  requirements:
105
98
  - - '='
106
99
  - !ruby/object:Gem::Version
107
- version: 0.0.2
100
+ version: 0.0.4
108
101
  type: :development
109
102
  prerelease: false
110
103
  version_requirements: !ruby/object:Gem::Requirement
111
104
  requirements:
112
105
  - - '='
113
106
  - !ruby/object:Gem::Version
114
- version: 0.0.2
115
- description:
107
+ version: 0.0.4
116
108
  email:
117
109
  - apotonick@gmail.com
118
110
  executables: []
@@ -147,6 +139,7 @@ files:
147
139
  - lib/trailblazer/activity/dsl/linear/sequence/search.rb
148
140
  - lib/trailblazer/activity/dsl/linear/strategy.rb
149
141
  - lib/trailblazer/activity/dsl/linear/version.rb
142
+ - lib/trailblazer/activity/dsl/linear/zeitwerk.rb
150
143
  - lib/trailblazer/activity/fast_track.rb
151
144
  - lib/trailblazer/activity/path.rb
152
145
  - lib/trailblazer/activity/railway.rb
@@ -155,7 +148,6 @@ homepage: https://trailblazer.to/2.1/docs/activity
155
148
  licenses:
156
149
  - LGPL-3.0
157
150
  metadata: {}
158
- post_install_message:
159
151
  rdoc_options: []
160
152
  require_paths:
161
153
  - lib
@@ -170,8 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
170
162
  - !ruby/object:Gem::Version
171
163
  version: '0'
172
164
  requirements: []
173
- rubygems_version: 3.2.3
174
- signing_key:
165
+ rubygems_version: 3.6.0.dev
175
166
  specification_version: 4
176
167
  summary: 'The #step DSL for Trailblazer activities.'
177
168
  test_files: []