module Trailblazer::Developer::Generate
Computes an {Intermediate} data structure from a TRB-editor.js file.
Constants
- Arrow
- Element
Public Instance Methods
call(hash)
click to toggle source
# File lib/trailblazer/developer/generate.rb, line 34 def call(hash) _, (ctx, _) = Activity::TaskWrap.invoke(Pipeline, [{hash: hash}, {}]) ctx[:intermediate] end
compute_intermediate(ctx, elements:, start_events:, **)
click to toggle source
# File lib/trailblazer/developer/generate.rb, line 47 def compute_intermediate(ctx, elements:, start_events:, **) end_events = elements.find_all { |el| el.type == "EndEventTerminate" } # DISCUSS: is it really called TERMINATE? inter = Activity::Schema::Intermediate wiring = elements.collect { |el| data = data_for(el) [inter.TaskRef(el.id, data), el.linksTo.collect { |arrow| inter.Out(semantic_for(**arrow.to_h), arrow.target) } ] } wiring = Hash[wiring] # end events need this stupid special handling # DISCUSS: currently, the END-SEMANTIC is read from the event's label. wiring = wiring.merge(Hash[ end_events.collect do |_end| ref, = wiring.find { |ref, _| ref.id == _end.id } [ref, [inter.Out(semantic_for(**_end.to_h)|| raise, nil)]] # TODO: test the raise, happens when the semantic of an End can't be distinguished. # TODO: don't extract semantic from :label but from :data. end ]) # pp wiring ctx[:intermediate] = inter.new(wiring, end_events.collect(&:id), start_events.collect(&:id)) end
data_for(element)
click to toggle source
private
# File lib/trailblazer/developer/generate.rb, line 74 def data_for(element) {type: element.type}.merge(element.data) end
extract_semantic(label)
click to toggle source
# File lib/trailblazer/developer/generate.rb, line 86 def extract_semantic(label) label.to_sym end
find_start_events(ctx, elements:, **)
click to toggle source
# File lib/trailblazer/developer/generate.rb, line 43 def find_start_events(ctx, elements:, **) ctx[:start_events] = elements.find_all { |el| el.type == "Event" } end
semantic_for(label:nil, **)
click to toggle source
We currently use the {:label} field of an arrow to encode an output semantic. The {:symbol_style} part will be filtered out as semantic. Defaults to {:success}.
# File lib/trailblazer/developer/generate.rb, line 80 def semantic_for(label:nil, **) return :success unless label extract_semantic(label) end
transform_from_hash(ctx, hash:, parser: Representer::Activity, **)
click to toggle source
# File lib/trailblazer/developer/generate.rb, line 39 def transform_from_hash(ctx, hash:, parser: Representer::Activity, **) ctx[:elements] = parser.new(OpenStruct.new).from_hash(hash).elements end