mirror of
https://github.com/aasm/aasm
synced 2023-03-27 23:22:41 -04:00
tmp
This commit is contained in:
parent
85ed696500
commit
519310ac5f
3 changed files with 29 additions and 2 deletions
|
@ -138,6 +138,7 @@ module AASM
|
||||||
end
|
end
|
||||||
|
|
||||||
def aasm_fire_event(name, options, *args, &block)
|
def aasm_fire_event(name, options, *args, &block)
|
||||||
|
puts "------- aasm_fire_event"
|
||||||
success = self.class.transaction(:requires_new => requires_new?) do
|
success = self.class.transaction(:requires_new => requires_new?) do
|
||||||
super
|
super
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,7 +3,7 @@ require 'active_record'
|
||||||
class Validator < ActiveRecord::Base
|
class Validator < ActiveRecord::Base
|
||||||
include AASM
|
include AASM
|
||||||
aasm :column => :status do
|
aasm :column => :status do
|
||||||
state :sleeping, :initial => true
|
state :sleeping, :after_commit => :yawn, :initial => true
|
||||||
state :running, :after_commit => :change_name!
|
state :running, :after_commit => :change_name!
|
||||||
state :failed, :after_enter => :fail, :after_commit => :change_name!
|
state :failed, :after_enter => :fail, :after_commit => :change_name!
|
||||||
event :run do
|
event :run do
|
||||||
|
@ -23,7 +23,27 @@ class Validator < ActiveRecord::Base
|
||||||
save!
|
save!
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def yawn
|
||||||
|
# well, yawn
|
||||||
|
end
|
||||||
|
|
||||||
def fail
|
def fail
|
||||||
raise StandardError.new('failed on purpose')
|
raise StandardError.new('failed on purpose')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
aasm do
|
||||||
|
state :sleeping, :initial => true
|
||||||
|
state :running
|
||||||
|
state :failed, :after_enter => :fail
|
||||||
|
|
||||||
|
event :run, :after_commit => :change_name! do
|
||||||
|
transitions :to => :running, :from => :sleeping
|
||||||
|
end
|
||||||
|
event :sleep, :after_commit => :yawn do
|
||||||
|
transitions :to => :sleeping, :from => :running
|
||||||
|
end
|
||||||
|
event :fail do
|
||||||
|
transitions :to => :failed, :from => [:sleeping, :running]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
|
@ -203,6 +203,13 @@ describe 'transitions with persistence' do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "after_commit callback" do
|
describe "after_commit callback" do
|
||||||
|
it "should fire :after_commit on initial create" do
|
||||||
|
validator = Validator.new(:name => "name")
|
||||||
|
expect(validator).to receive(:yawn).once
|
||||||
|
validator.save!
|
||||||
|
expect(validator).to be_sleeping
|
||||||
|
end
|
||||||
|
|
||||||
it "should fire :after_commit if transaction was successful" do
|
it "should fire :after_commit if transaction was successful" do
|
||||||
validator = Validator.create(:name => 'name')
|
validator = Validator.create(:name => 'name')
|
||||||
expect(validator).to be_sleeping
|
expect(validator).to be_sleeping
|
||||||
|
@ -216,7 +223,6 @@ describe 'transitions with persistence' do
|
||||||
expect { validator.fail! }.to raise_error(StandardError, 'failed on purpose')
|
expect { validator.fail! }.to raise_error(StandardError, 'failed on purpose')
|
||||||
expect(validator.name).to eq("name")
|
expect(validator.name).to eq("name")
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue