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