Sha256: 26eccca253b1fdc13bdfd8afb0f3b076f7104d82327eef72f5977414c106e9cb

Contents?: true

Size: 926 Bytes

Versions: 6

Compression:

Stored size: 926 Bytes

Contents

class AASM::SupportingClasses::StateTransition
  attr_reader :from, :to, :opts
  alias_method :options, :opts

  def initialize(opts)
    @from, @to, @guard, @on_transition = opts[:from], opts[:to], opts[:guard], opts[:on_transition]
    @opts = opts
  end

  def perform(obj)
    case @guard
      when Symbol, String
        obj.send(@guard)
      when Proc
        @guard.call(obj)
      else
        true
    end
  end

  def execute(obj, *args)
    @on_transition.is_a?(Array) ?
            @on_transition.each {|ot| _execute(obj, ot, *args)} :
            _execute(obj, @on_transition, *args)
  end

  def ==(obj)
    @from == obj.from && @to == obj.to
  end

  def from?(value)
    @from == value
  end

  private

  def _execute(obj, on_transition, *args)
    case on_transition
      when Symbol, String
        obj.send(on_transition, *args)
      when Proc
        on_transition.call(obj, *args)
    end
  end

end

Version data entries

6 entries across 6 versions & 4 rubygems

Version Path
aasm-2.2.0 lib/aasm/state_transition.rb
mylescarrick-aasm-2.1.5 lib/aasm/state_transition.rb
fcoury-aasm-2.1.5 lib/aasm/state_transition.rb
r38y-aasm-2.1.5 lib/aasm/state_transition.rb
aasm-2.1.5 lib/aasm/state_transition.rb
aasm-2.1.4 lib/aasm/state_transition.rb