class Mushy::Runner

Attributes

runner[RW]

Public Class Methods

new(runner = nil) click to toggle source
# File lib/mushy/runner.rb, line 7
def initialize runner = nil
  self.runner = runner || self
end

Public Instance Methods

build_event(event_data, flow_id, run_id, flux_id) click to toggle source
# File lib/mushy/runner.rb, line 46
def build_event event_data, flow_id, run_id, flux_id
  event = Mushy::Event.new
  event.id = SecureRandom.uuid
  event.run_id = run_id
  event.flow_id = flow_id
  event.flux_id = flux_id
  event.data = event_data
  event
end
find_run(flux, flow) click to toggle source
# File lib/mushy/runner.rb, line 39
def find_run flux, flow
  run = Mushy::Run.new
  run.id = SecureRandom.uuid
  run.flow_id = flow.id
  run
end
run_event_in_flow(event, flow) click to toggle source
# File lib/mushy/runner.rb, line 24
def run_event_in_flow event, flow
  flow.fluxs_for(event)
    .map { |s| runner.run_event_with_flux event, s, flow }
    .flatten
end
run_event_with_flux(event, flux, flow) click to toggle source
# File lib/mushy/runner.rb, line 30
def run_event_with_flux event, flux, flow
  data = event.data
  data = flow.adjust_data data
  [flux.execute(data)]
    .flatten
    .reject { |x| x.nil? }
    .map { |x| x.is_a?(Hash) ? build_event(x, event.flow_id, event.run_id, flux.id) : x }
end
start(event_data, flux, flow) click to toggle source
# File lib/mushy/runner.rb, line 11
def start event_data, flux, flow
  run = find_run flux, flow
  starting_event = build_event event_data, flow.id, run.id, flux.id

  events = run_event_with_flux starting_event, flux, flow

  while events.any?
    events = events.map { |e| runner.run_event_in_flow e, flow }.flatten
  end

  run
end