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