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