class AASM::Core::Transition
Attributes
event[R]
failures[R]
from[R]
options[R]
opts[R]
to[R]
Public Class Methods
new(event, opts, &block)
click to toggle source
# File lib/aasm/core/transition.rb, line 10 def initialize(event, opts, &block) add_options_from_dsl(opts, [:on_transition, :guard, :after, :success], &block) if block @event = event @from = opts[:from] @to = opts[:to] @guards = Array(opts[:guards]) + Array(opts[:guard]) + Array(opts[:if]) @unless = Array(opts[:unless]) #TODO: This could use a better name @failures = [] if opts[:on_transition] warn '[DEPRECATION] :on_transition is deprecated, use :after instead' opts[:after] = Array(opts[:after]) + Array(opts[:on_transition]) end @after = Array(opts[:after]) @after = @after[0] if @after.size == 1 @success = Array(opts[:success]) @success = @success[0] if @success.size == 1 @opts = opts end
Public Instance Methods
==(obj)
click to toggle source
# File lib/aasm/core/transition.rb, line 52 def ==(obj) @from == obj.from && @to == obj.to end
allowed?(obj, *args)
click to toggle source
# File lib/aasm/core/transition.rb, line 42 def allowed?(obj, *args) invoke_callbacks_compatible_with_guard(@guards, obj, args, :guard => true) && invoke_callbacks_compatible_with_guard(@unless, obj, args, :unless => true) end
execute(obj, *args)
click to toggle source
# File lib/aasm/core/transition.rb, line 47 def execute(obj, *args) invoke_callbacks_compatible_with_guard(event.state_machine.global_callbacks[:after_all_transitions], obj, args) invoke_callbacks_compatible_with_guard(@after, obj, args) end
from?(value)
click to toggle source
# File lib/aasm/core/transition.rb, line 56 def from?(value) @from == value end
initialize_copy(orig)
click to toggle source
called internally by Ruby 1.9 after clone()
Calls superclass method
# File lib/aasm/core/transition.rb, line 34 def initialize_copy(orig) super @guards = @guards.dup @unless = @unless.dup @opts = {} orig.opts.each_pair { |name, setting| @opts[name] = setting.is_a?(Hash) || setting.is_a?(Array) ? setting.dup : setting } end
invoke_success_callbacks(obj, *args)
click to toggle source
# File lib/aasm/core/transition.rb, line 60 def invoke_success_callbacks(obj, *args) _fire_callbacks(@success, obj, args) end
Private Instance Methods
_fire_callbacks(code, record, args)
click to toggle source
# File lib/aasm/core/transition.rb, line 78 def _fire_callbacks(code, record, args) Invoker.new(code, record, args).invoke end
invoke_callbacks_compatible_with_guard(code, record, args, options={})
click to toggle source
# File lib/aasm/core/transition.rb, line 66 def invoke_callbacks_compatible_with_guard(code, record, args, options={}) if record.respond_to?(:aasm) record.aasm(event.state_machine.name).from_state = @from if record.aasm(event.state_machine.name).respond_to?(:from_state=) record.aasm(event.state_machine.name).to_state = @to if record.aasm(event.state_machine.name).respond_to?(:to_state=) end Invoker.new(code, record, args) .with_options(options) .with_failures(failures) .invoke end