module Bumbleworks::Entity

Public Class Methods

included(klass) click to toggle source
# File lib/bumbleworks/entity.rb, line 5
def self.included(klass)
  unless Bumbleworks.entity_classes.include? klass
    Bumbleworks.entity_classes << klass
  end
  klass.extend ClassMethods
end

Public Instance Methods

attribute_for_process_name(name) click to toggle source
# File lib/bumbleworks/entity.rb, line 72
def attribute_for_process_name(name)
  process_config = self.class.processes[name]
  raise ProcessNotRegistered.new(name) unless process_config
  process_config && process_config[:attribute]
end
cancel_all_processes!(options = {}) click to toggle source
# File lib/bumbleworks/entity.rb, line 66
def cancel_all_processes!(options = {})
  processes_by_name.keys.each do |process_name|
    cancel_process!(process_name, options)
  end
end
cancel_process!(process_name, options = {}) click to toggle source
# File lib/bumbleworks/entity.rb, line 53
def cancel_process!(process_name, options = {})
  process = processes_by_name[process_name.to_sym]
  return nil unless process

  options = options.dup
  clear_identifiers = options.delete(:clear_identifiers)
  process.cancel!(options)
  unless clear_identifiers == false
    identifier_attribute = attribute_for_process_name(process_name.to_sym)
    persist_process_identifier(identifier_attribute, nil)
  end
end
identifier() click to toggle source
# File lib/bumbleworks/entity.rb, line 12
def identifier
  id
end
is_waiting_for?(event) click to toggle source
# File lib/bumbleworks/entity.rb, line 96
def is_waiting_for?(event)
  subscribed_events.include? event.to_s
end
launch_process(process_name, options = {}) click to toggle source
# File lib/bumbleworks/entity.rb, line 20
def launch_process(process_name, options = {})
  identifier_attribute = attribute_for_process_name(process_name.to_sym)
  if (options[:force] == true || (process_identifier = self.send(identifier_attribute)).nil?)
    workitem_fields = process_fields(process_name.to_sym).merge(options[:fields] || {})
    variables = process_variables(process_name.to_sym).merge(options[:variables] || {})
    process_identifier = Bumbleworks.launch!(process_name.to_s, workitem_fields, variables).wfid
    persist_process_identifier(identifier_attribute.to_sym, process_identifier)
  end
  Bumbleworks::Process.new(process_identifier)
end
persist_process_identifier(identifier_attribute, process_identifier) click to toggle source
# File lib/bumbleworks/entity.rb, line 31
def persist_process_identifier(identifier_attribute, process_identifier)
  if self.respond_to?(:update)
    update(identifier_attribute => process_identifier)
  else
    raise "Entity must define #persist_process_identifier method if missing #update method."
  end
end
process_fields(process_name = nil) click to toggle source
# File lib/bumbleworks/entity.rb, line 84
def process_fields(process_name = nil)
  { :entity => self }
end
process_variables(process_name = nil) click to toggle source
# File lib/bumbleworks/entity.rb, line 88
def process_variables(process_name = nil)
  {}
end
processes() click to toggle source
# File lib/bumbleworks/entity.rb, line 49
def processes
  processes_by_name.values.compact
end
processes_by_name() click to toggle source
# File lib/bumbleworks/entity.rb, line 39
def processes_by_name
  return {} unless self.class.processes
  process_names = self.class.processes.keys
  process_names.inject({}) do |memo, name|
    pid = self.send(attribute_for_process_name(name))
    memo[name] = pid ? Bumbleworks::Process.new(pid) : nil
    memo
  end
end
subscribed_events() click to toggle source
# File lib/bumbleworks/entity.rb, line 92
def subscribed_events
  processes.values.compact.map(&:subscribed_events).flatten.uniq
end
tasks(nickname = nil) click to toggle source
# File lib/bumbleworks/entity.rb, line 78
def tasks(nickname = nil)
  finder = Bumbleworks::Task.for_entity(self)
  finder = finder.by_nickname(nickname) if nickname
  finder
end
to_s() click to toggle source
# File lib/bumbleworks/entity.rb, line 16
def to_s
  "#{Bumbleworks::Support.titleize(self.class.name)} #{identifier}"
end