Sha256: 45cbd4771f306b21eed57cfe436e85a4499e226cb143855928d899c97544d4f6

Contents?: true

Size: 1.96 KB

Versions: 1

Compression:

Stored size: 1.96 KB

Contents

class ComplexExample
  include AASM

  attr_accessor :activation_code, :activated_at, :deleted_at

  aasm do
    state :passive
    state :pending, :initial => true, :before_enter => :make_activation_code
    state :active,  :before_enter => :do_activate
    state :suspended
    state :deleted, :before_enter => :do_delete#, :exit => :do_undelete
    state :waiting

    event :register do
      transitions :from => :passive, :to => :pending do
        guard do
          can_register?
        end
      end
    end

    event :activate do
      transitions :from => :pending, :to => :active
    end

    event :suspend do
      transitions :from => [:passive, :pending, :active], :to => :suspended
    end

    event :delete do
      transitions :from => [:passive, :pending, :active, :suspended], :to => :deleted
    end

    # a dummy event that can never happen
    event :unpassify do
      transitions :from => :passive, :to => :active, :guard => Proc.new {|u| false }
    end

    event :unsuspend do
      transitions :from => :suspended, :to => :active,  :guard => Proc.new { has_activated? }
      transitions :from => :suspended, :to => :pending, :guard => :has_activation_code?
      transitions :from => :suspended, :to => :passive
    end

    event :wait do
      transitions :from => :suspended, :to => :waiting, :guard => :if_polite?
    end
  end

  def initialize
    # the AR backend uses a before_validate_on_create :aasm_ensure_initial_state
    # lets do something similar here for testing purposes.
    aasm.enter_initial_state
  end

  def make_activation_code
    @activation_code = 'moo'
  end

  def do_activate
    @activated_at = Time.now
    @activation_code = nil
  end

  def do_delete
    @deleted_at = Time.now
  end

  def do_undelete
    @deleted_at = false
  end

  def can_register?
    true
  end

  def has_activated?
    !!@activated_at
  end

  def has_activation_code?
    !!@activation_code
  end

  def if_polite?(phrase = nil)
    phrase == :please
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
aasm-4.2.0 spec/models/complex_example.rb