module FlowMachine::WorkflowState::ClassMethods

Attributes

expose_to_workflow_methods[RW]
state_callbacks[RW]

Public Instance Methods

event(name, options = {}, &block) click to toggle source
# File lib/flow_machine/workflow_state.rb, line 26
def event(name, options = {}, &block)
  define_may_event(name, options)
  define_event(name, options, &block)
  define_event_bang(name)
end
expose_to_workflow(name) click to toggle source

Maintains a list of methods that should be exposed to the workflow the workflow is responsible for reading this list

# File lib/flow_machine/workflow_state.rb, line 21
def expose_to_workflow(name)
  self.expose_to_workflow_methods ||= []
  self.expose_to_workflow_methods << name
end
state_name() click to toggle source
# File lib/flow_machine/workflow_state.rb, line 15
def state_name
  name.demodulize.sub(/State\z/, "").underscore.to_sym
end

Private Instance Methods

define_event(name, _options, &block) click to toggle source
# File lib/flow_machine/workflow_state.rb, line 34
def define_event(name, _options, &block)
  define_method name do |*args|
    return false unless send("may_#{name}?")

    instance_exec(*args, &block)
  end
  expose_to_workflow name
end
define_event_bang(name) click to toggle source
# File lib/flow_machine/workflow_state.rb, line 50
def define_event_bang(name)
  define_method "#{name}!" do |*args|
    workflow.persist if send(name, *args)
  end
  expose_to_workflow "#{name}!"
end
define_may_event(name, options) click to toggle source
# File lib/flow_machine/workflow_state.rb, line 43
def define_may_event(name, options)
  define_method "may_#{name}?" do
    run_guard_methods([*options[:guard]])
  end
  expose_to_workflow "may_#{name}?"
end