Module: Workflow::Join
- Defined in:
- lib/workflow/join.rb,
lib/workflow/join/simple.rb,
lib/workflow/join/version.rb,
lib/workflow/join/active_record.rb,
lib/workflow/join/simple/pending_callbacks.rb,
lib/workflow/join/simple/pending_transitions.rb,
lib/workflow/join/active_record/pending_callbacks.rb,
lib/workflow/join/active_record/pending_transitions.rb
Defined Under Namespace
Modules: ActiveRecord, Simple
Constant Summary
collapse
- GUARD_PARAMS_ERROR =
'Either guard instance variable name or a code block is required'.freeze
- GUARD_POINTCUT_ERROR =
'Both :inner and :outer states are required'.freeze
- GUARD_IS_NOT_WORKFLOW =
'Guard given must be a workflow instance, was: “%s”'.freeze
- VERSION =
"0.2.1"
Instance Method Summary
collapse
Instance Method Details
#guard(getter = nil, inner: nil, outer: nil) ⇒ Object
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
# File 'lib/workflow/join.rb', line 92
def guard(getter = nil, inner: nil, outer: nil)
fail Workflow::WorkflowDefinitionError, GUARD_PARAMS_ERROR unless !getter.nil? ^ block_given?
fail Workflow::WorkflowDefinitionError, GUARD_POINTCUT_ERROR unless inner && outer
guard = if block_given?
Proc.new
else
g = getter.to_sym
lambda do |host|
case
when /\A@/ =~ g.to_s && host.instance_variable_defined?(g)
host.instance_variable_get(g)
when host.methods.include?(g) && host.method(g).arity <= 0
host.send g
end.tap do |guard_instance|
fail Workflow::WorkflowDefinitionError, GUARD_IS_NOT_WORKFLOW % guard_instance \
unless guard_instance.nil? || guard_instance.is_a?(Workflow)
end
end
end
(guards[inner.to_sym] ||= []) << [guard, outer.to_sym]
end
|
#guards ⇒ Object
88
89
90
|
# File 'lib/workflow/join.rb', line 88
def guards
@guards ||= {}
end
|