trailblazer-activity-dsl-linear 0.3.3 → 0.3.4

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: a7741680df8be738f51b14cbebc68d19b82fea3b0464f3ab40a665c66271625d
4
- data.tar.gz: edd0e20d30c0b3ff3d89b7f87debcdeed0f6d1750e74615b77ed84e237ad5cee
3
+ metadata.gz: f64e4cda0443bb3635a41f04a79ea5f12193ace7aac22d613eb3ce0749d3d303
4
+ data.tar.gz: ade9350dfbf4475edb0a67190d4e9cd37cbca8f838b27c63c5be21780b9d466d
5
5
  SHA512:
6
- metadata.gz: 89a399c069191179de81b7ddecfb42981369e5a9fb648e058c4303fe73e2de1eed581a121a2f1aa99a34985f6616a79602ce6b5bbf0e769df82b26f08e18196f
7
- data.tar.gz: 14de736b4f569bcb2c258039b45ca100e99bc9e280d5cf7fca809ff180420d8ab6ff05041d9b12f3b3844ebb74934655f989124e08deecdb2179dd673b19a88a
6
+ metadata.gz: f2ad5a07613723c38ec2a29100b33a4b983451eca8d34884da03b6a98a3441709aa8e2f4c05d7717aebcbe3b6d47b3f3a07b389469396bea8cb6befd24ea1c1b
7
+ data.tar.gz: 1ac0b62f981d089cec84331ccb524b20f2f7aca089ed8e944ce422de126646176f0e66752a878d124cdf828d6261fd2d52e2e9ec63c2ade7eba658fa4bb9f3da
data/CHANGES.md CHANGED
@@ -1,3 +1,9 @@
1
+ # 0.3.4
2
+
3
+ * Allow DSL helpers such as `End()` in `Path()`.
4
+ * Introduce `Path(..., before: )` option to insert all path member steps before a certain element.
5
+ * Allow `Path(..., connect_to: Track(..))`.
6
+
1
7
  # 0.3.3
2
8
 
3
9
  * Fix for registering `PassFast` & `FailFast` ends in `FastTrack` to fix circuit interface callables which emits those signals.
@@ -43,33 +43,16 @@ module Trailblazer
43
43
  Id.new(id).freeze
44
44
  end
45
45
 
46
- def Path(track_color: "track_#{rand}", end_id:"path_end_#{rand}", connect_to:nil, **options, &block)
47
- # DISCUSS: here, we use the global normalizer and don't allow injection.
48
- state = Activity::Path::DSL::State.new(Activity::Path::DSL.OptionsForState(track_name: track_color, end_id: end_id, **options)) # TODO: test injecting {:normalizers}.
46
+ def Path(track_color: "track_#{rand}", connect_to: nil, before: false, **options, &block)
47
+ path = Activity::Path(track_name: track_color, **options)
48
+ activity = Class.new(path) { self.instance_exec(&block) }
49
49
 
50
- # seq = block.call(state) # state changes.
51
- state.instance_exec(&block)
52
-
53
- seq = state.to_h[:sequence]
54
-
55
- _end_id =
56
- if connect_to
57
- end_id
58
- else
59
- nil
60
- end
61
-
62
- seq = strip_start_and_ends(seq, end_id: _end_id) # don't cut off end unless {:connect_to} is set.
50
+ seq = activity.instance_variable_get(:@state).to_h[:sequence] # TODO: fix @state interface
51
+ # Strip default ends `Start.default` and `End.success` (if present).
52
+ seq = seq[1..-1].reject{ |row| row[3][:stop_event] && row[3][:id] == 'End.success' }
63
53
 
64
54
  if connect_to
65
- output, _ = seq[-1][2][0].(seq, seq[-1]) # FIXME: the Forward() proc contains the row's Output, and the only current way to retrieve it is calling the search strategy. It should be Forward#to_h
66
-
67
- searches = [Search.ById(output, connect_to.value)]
68
-
69
- row = seq[-1]
70
- row = row[0..1] + [searches] + [row[3]] # FIXME: not mutating an array is so hard: we only want to replace the "searches" element, index 2
71
-
72
- seq = seq[0..-2] + [row]
55
+ seq = connect_for_sequence(seq, connect_to: connect_to)
73
56
  end
74
57
 
75
58
  # Add the path elements before {End.success}.
@@ -80,9 +63,12 @@ module Trailblazer
80
63
  # the terminus of the path goes _after_ {End.success} into the "end group".
81
64
  insert_method = options[:stop_event] ? Insert.method(:Append) : Insert.method(:Prepend)
82
65
 
66
+ insert_target = "End.success" # insert before/after
67
+ insert_target = before if before && connect_to.instance_of?(Trailblazer::Activity::DSL::Linear::Helper::Track) # FIXME: this is a bit hacky, of course!
68
+
83
69
  {
84
70
  row: row,
85
- insert: [insert_method, "End.success"]
71
+ insert: [insert_method, insert_target]
86
72
  }
87
73
  end
88
74
 
@@ -90,6 +76,23 @@ module Trailblazer
90
76
  return Track.new(track_color, adds, {})
91
77
  end
92
78
 
79
+ # Connect last row of the {sequence} to the given step via its {Id}
80
+ # Useful when steps needs to be inserted in between {Start} and {connect Id()}.
81
+ private def connect_for_sequence(sequence, connect_to:)
82
+ output, _ = sequence[-1][2][0].(sequence, sequence[-1]) # FIXME: the Forward() proc contains the row's Output, and the only current way to retrieve it is calling the search strategy. It should be Forward#to_h
83
+
84
+ # searches = [Search.ById(output, connect_to.value)]
85
+ searches = [Search.ById(output, connect_to.value)] if connect_to.instance_of?(Trailblazer::Activity::DSL::Linear::Helper::Id)
86
+ searches = [Search.Forward(output, connect_to.color)] if connect_to.instance_of?(Trailblazer::Activity::DSL::Linear::Helper::Track) # FIXME: use existing mapping logic!
87
+
88
+ row = sequence[-1]
89
+ row = row[0..1] + [searches] + [row[3]] # FIXME: not mutating an array is so hard: we only want to replace the "searches" element, index 2
90
+
91
+ sequence = sequence[0..-2] + [row]
92
+
93
+ sequence
94
+ end
95
+
93
96
  # Computes the {:outputs} options for {activity}.
94
97
  def Subprocess(activity, patch: {})
95
98
  activity = Patch.customize(activity, options: patch)
@@ -74,7 +74,7 @@ module Trailblazer
74
74
  return args[0], options.merge(evaluated_options)
75
75
  end
76
76
 
77
- def Path(options, &block) # syntactically, we can't access the {do ... end} block here.
77
+ def Path(**options, &block) # syntactically, we can't access the {do ... end} block here.
78
78
  BlockProxy.new(options, block)
79
79
  end
80
80
 
@@ -3,7 +3,7 @@ module Trailblazer
3
3
  module Activity
4
4
  module DSL
5
5
  module Linear
6
- VERSION = "0.3.3"
6
+ VERSION = "0.3.4"
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trailblazer-activity-dsl-linear
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
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-11-24 00:00:00.000000000 Z
11
+ date: 2020-12-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: trailblazer-activity
@@ -120,7 +120,7 @@ homepage: http://trailblazer.to
120
120
  licenses:
121
121
  - LGPL-3.0
122
122
  metadata: {}
123
- post_install_message:
123
+ post_install_message:
124
124
  rdoc_options: []
125
125
  require_paths:
126
126
  - lib
@@ -135,8 +135,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
135
  - !ruby/object:Gem::Version
136
136
  version: '0'
137
137
  requirements: []
138
- rubygems_version: 3.0.8
139
- signing_key:
138
+ rubyforge_project:
139
+ rubygems_version: 2.7.3
140
+ signing_key:
140
141
  specification_version: 4
141
142
  summary: Simple DSL to define Trailblazer activities.
142
143
  test_files: []