class Trailblazer::Activity::Introspect::Graph

@private This API is still under construction.

Constants

Node
Outgoing

Public Class Methods

new(activity) click to toggle source
# File lib/trailblazer/activity/introspect.rb, line 11
def initialize(activity)
  @activity = activity
  @schema   = activity.to_h or raise
  @circuit  = @schema[:circuit]
  @map      = @circuit.to_h[:map]
  @configs  = @schema[:nodes]
end

Public Instance Methods

collect(strategy: :circuit) { |find_with_block { |node| task == task }| ... } click to toggle source
# File lib/trailblazer/activity/introspect.rb, line 25
def collect(strategy: :circuit)
  @map.keys.each_with_index.collect { |task, i| yield find_with_block { |node| node.task == task }, i }
end
find(id = nil, &block) click to toggle source
# File lib/trailblazer/activity/introspect.rb, line 19
def find(id = nil, &block)
  return find_by_id(id) unless block_given?

  find_with_block(&block)
end
stop_events() click to toggle source
# File lib/trailblazer/activity/introspect.rb, line 29
def stop_events
  @circuit.to_h[:end_events]
end

Private Instance Methods

Node(*args) click to toggle source
# File lib/trailblazer/activity/introspect.rb, line 50
def Node(*args)
  Node.new(*args).freeze
end
find_by_id(id) click to toggle source
# File lib/trailblazer/activity/introspect.rb, line 35
def find_by_id(id)
  node = @configs.find { |_node| _node.id == id } or return
  node_for(node)
end
find_with_block() { |Node(task, id, outputs, data)| ... } click to toggle source
# File lib/trailblazer/activity/introspect.rb, line 40
def find_with_block
  existing = @configs.find { |node| yield Node(node.task, node.id, node.outputs, node.data) } or return

  node_for(existing)
end
node_for(node_attributes) click to toggle source
# File lib/trailblazer/activity/introspect.rb, line 46
def node_for(node_attributes)
  Node(node_attributes.task, node_attributes.id, node_attributes.outputs, outgoings_for(node_attributes), node_attributes.data)
end
outgoings_for(node) click to toggle source
# File lib/trailblazer/activity/introspect.rb, line 57
def outgoings_for(node)
  outputs     = node.outputs
  connections = @map[node.task]

  connections.collect do |signal, target|
    output = outputs.find { |out| out.signal == signal }
    Outgoing.new(output, target)
  end
end