class Bumbleworks::Process

Attributes

id[R]
wfid[R]

Public Class Methods

all(options = {}) click to toggle source
# File lib/bumbleworks/process.rb, line 14
def all(options = {})
  ids(options).map do |wfid|
    new(wfid)
  end
end
count() click to toggle source
# File lib/bumbleworks/process.rb, line 28
def count
  ids.count
end
ids(options = {}) click to toggle source
# File lib/bumbleworks/process.rb, line 20
def ids(options = {})
  wfids = Bumbleworks.dashboard.process_wfids
  wfids.reverse! if options[:reverse]
  limit = options[:limit] || wfids.count
  offset = options[:offset] || 0
  wfids[offset, limit]
end
new(wfid) click to toggle source
# File lib/bumbleworks/process.rb, line 33
def initialize(wfid)
  @id = wfid
end

Public Instance Methods

<=>(other) click to toggle source
# File lib/bumbleworks/process.rb, line 50
def <=>(other)
  unless other.is_a?(self.class)
    raise ArgumentError, "comparison of Bumbleworks::Process with #{other.class} failed"
  end
  wfid <=> other.wfid
end
all_subscribed_tags() click to toggle source
# File lib/bumbleworks/process.rb, line 117
def all_subscribed_tags
  @all_subscribed_tags ||= trackers.inject({ :global => [] }) do |memo, t|
    if t.global?
      memo[:global].concat t.tags
    else
      (memo[t.wfid] ||= []).concat t.tags
    end
    memo
  end
end
cancel!(options = {}) click to toggle source
# File lib/bumbleworks/process.rb, line 140
def cancel!(options = {})
  Bumbleworks.cancel_process!(wfid, options)
end
definition_name() click to toggle source
# File lib/bumbleworks/process.rb, line 148
def definition_name
  root_ruote_expression.attribute('name') ||
    root_ruote_expression.attribute_text
end
entity_storage_workitem() click to toggle source
# File lib/bumbleworks/process.rb, line 65
def entity_storage_workitem
  super(entity_workitem)
end
entity_workitem() click to toggle source
# File lib/bumbleworks/process.rb, line 57
def entity_workitem
  @entity_workitem ||= if workitems.map(&:entity_fields).uniq.length <= 1
    workitems.first
  else
    raise EntityConflict
  end
end
errors() click to toggle source
# File lib/bumbleworks/process.rb, line 79
def errors
  @errors ||= Bumbleworks.dashboard.context.storage.get_many('errors', [wfid]).map { |err|
    Bumbleworks::Process::ErrorRecord.new(
      ::Ruote::ProcessError.new(err)
    )
  }
end
expression_at_position(position) click to toggle source
# File lib/bumbleworks/process.rb, line 75
def expression_at_position(position)
  expressions.detect { |exp| exp.expid == position }
end
expressions() click to toggle source
# File lib/bumbleworks/process.rb, line 69
def expressions
  @expressions ||= ruote_expressions.map { |rexp|
    Bumbleworks::Expression.new(rexp)
  }
end
is_waiting_for?(event) click to toggle source
# File lib/bumbleworks/process.rb, line 132
def is_waiting_for?(event)
  subscribed_events.include? event.to_s
end
kill!(options = {}) click to toggle source
# File lib/bumbleworks/process.rb, line 136
def kill!(options = {})
  Bumbleworks.kill_process!(wfid, options)
end
leaves() click to toggle source
# File lib/bumbleworks/process.rb, line 87
def leaves
  @leaves ||= ruote_expressions.inject([]) { |a, exp|
    a.select { |e| ! exp.ancestor?(e.fei) } + [ exp ]
  }.map { |leaf|
    Bumbleworks::Expression.new(leaf)
  }
end
method_missing(method, *args) click to toggle source
Calls superclass method
# File lib/bumbleworks/process.rb, line 153
def method_missing(method, *args)
  ps = process_status
  if ps.respond_to?(method)
    return ps.send(method, *args)
  end
  super
end
process_status() click to toggle source
# File lib/bumbleworks/process.rb, line 144
def process_status
  @process_status ||= Bumbleworks.dashboard.process(id)
end
reload() click to toggle source
# File lib/bumbleworks/process.rb, line 37
def reload
  (instance_variables - [:@id]).each do |memo|
    instance_variable_set(memo, nil)
  end
  self
end
running?() click to toggle source
# File lib/bumbleworks/process.rb, line 44
def running?
  !process_status.nil?
end
schedules() click to toggle source
# File lib/bumbleworks/process.rb, line 111
def schedules
  @schedules ||= Bumbleworks.dashboard.schedules(id).map { |schedule_hash|
    Bumbleworks::Schedule.new(schedule_hash)
  }
end
subscribed_events() click to toggle source
# File lib/bumbleworks/process.rb, line 128
def subscribed_events
  all_subscribed_tags[:global]
end
tasks() click to toggle source
# File lib/bumbleworks/process.rb, line 99
def tasks
  @tasks ||= Bumbleworks::Task.for_process(wfid)
end
trackers() click to toggle source
# File lib/bumbleworks/process.rb, line 103
def trackers
  @trackers ||= Bumbleworks.dashboard.get_trackers.select { |tid, attrs|
    attrs['msg']['fei'] && attrs['msg']['fei']['wfid'] == id
  }.map { |tid, original_hash|
    Bumbleworks::Tracker.new(tid, original_hash)
  }
end
workitems() click to toggle source
# File lib/bumbleworks/process.rb, line 95
def workitems
  @workitems ||= leaves.map(&:workitem)
end

Private Instance Methods

root_ruote_expression() click to toggle source
# File lib/bumbleworks/process.rb, line 163
def root_ruote_expression
  @root_ruote_expression ||= ruote_expressions.first
end
ruote_expressions() click to toggle source
# File lib/bumbleworks/process.rb, line 167
def ruote_expressions
  @ruote_expressions ||= begin
    context = Bumbleworks.dashboard.context
    raw_expressions = context.storage.get_many('expressions', [wfid])
    raw_expressions.collect { |e|
      ::Ruote::Exp::FlowExpression.from_h(context, e)
    }.sort_by { |e|
      e.fei.expid
    }
  end
end