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