Sha256: 20b8ab1f560c859d85700bd54f137751191fd6609a7f77f3a685971434e44548

Contents?: true

Size: 1.76 KB

Versions: 5

Compression:

Stored size: 1.76 KB

Contents

require 'active_record'

class Transactor < ActiveRecord::Base

  belongs_to :worker

  include AASM
  aasm :column => :status do
    state :sleeping, :initial => true
    state :running, :before_enter => :start_worker, :after_enter => :fail

    event :run do
      transitions :to => :running, :from => :sleeping
    end
  end

private

  def start_worker
    worker.update_attribute(:status, 'running')
  end

  def fail
    raise StandardError.new('failed on purpose')
  end

end

class NoLockTransactor < ActiveRecord::Base

  belongs_to :worker

  include AASM

  aasm :column => :status do
    state :sleeping, :initial => true
    state :running

    event :run do
      transitions :to => :running, :from => :sleeping
    end
  end
end

class LockTransactor < ActiveRecord::Base

  belongs_to :worker

  include AASM

  aasm :column => :status, requires_lock: true do
    state :sleeping, :initial => true
    state :running

    event :run do
      transitions :to => :running, :from => :sleeping
    end
  end
end

class LockNoWaitTransactor < ActiveRecord::Base

  belongs_to :worker

  include AASM

  aasm :column => :status, requires_lock: 'FOR UPDATE NOWAIT' do
    state :sleeping, :initial => true
    state :running

    event :run do
      transitions :to => :running, :from => :sleeping
    end
  end
end

class MultipleTransactor < ActiveRecord::Base

  belongs_to :worker

  include AASM
  aasm :left, :column => :status do
    state :sleeping, :initial => true
    state :running, :before_enter => :start_worker, :after_enter => :fail

    event :run do
      transitions :to => :running, :from => :sleeping
    end
  end

private

  def start_worker
    worker.update_attribute(:status, 'running')
  end

  def fail
    raise StandardError.new('failed on purpose')
  end

end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
aasm-4.11.1 spec/models/transactor.rb
aasm-4.11.0 spec/models/transactor.rb
aasm-4.10.1 spec/models/transactor.rb
aasm-4.10.0 spec/models/transactor.rb
aasm-4.9.0 spec/models/transactor.rb