Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/Intrepidd/aasm into Intre…
Browse files Browse the repository at this point in the history
…pidd-master

Conflicts:
	lib/aasm/persistence/active_record_persistence.rb
  • Loading branch information
alto committed Nov 18, 2013
2 parents 79a3844 + 46878f9 commit 1c6a636
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 8 deletions.
10 changes: 7 additions & 3 deletions lib/aasm/aasm.rb
Expand Up @@ -141,7 +141,7 @@ def aasm_human_state

private

def aasm_fire_event(event_name, options, *args)
def aasm_fire_event(event_name, options, *args, &block)
event = self.class.aasm_events[event_name]
begin
old_state = aasm.state_object_for_name(aasm.current_state)
Expand All @@ -151,7 +151,7 @@ def aasm_fire_event(event_name, options, *args)
event.fire_callbacks(:before, self)

if new_state_name = event.fire(self, *args)
fired(event, old_state, new_state_name, options)
fired(event, old_state, new_state_name, options, &block)
else
failed(event_name, old_state)
end
Expand All @@ -174,9 +174,13 @@ def fired(event, old_state, new_state_name, options)
persist_successful = true
if persist
persist_successful = aasm.set_current_state_with_persistence(new_state_name)
event.fire_callbacks(:success, self) if persist_successful
if persist_successful
yield if block_given?
event.fire_callbacks(:success, self)
end
else
aasm.current_state = new_state_name
yield if block_given?
end

if persist_successful
Expand Down
8 changes: 4 additions & 4 deletions lib/aasm/base.rb
Expand Up @@ -57,12 +57,12 @@ def event(name, options={}, &block)
aasm.may_fire_event?(name, *args)
end

@clazz.send(:define_method, "#{name.to_s}!") do |*args|
aasm_fire_event(name, {:persist => true}, *args)
@clazz.send(:define_method, "#{name.to_s}!") do |*args, &block|
aasm_fire_event(name, {:persist => true}, *args, &block)
end

@clazz.send(:define_method, "#{name.to_s}") do |*args|
aasm_fire_event(name, {:persist => false}, *args)
@clazz.send(:define_method, "#{name.to_s}") do |*args, &block|
aasm_fire_event(name, {:persist => false}, *args, &block)
end
end

Expand Down
2 changes: 1 addition & 1 deletion lib/aasm/persistence/active_record_persistence.rb
Expand Up @@ -131,7 +131,7 @@ def aasm_ensure_initial_state
aasm.enter_initial_state if send(self.class.aasm_column).blank?
end

def aasm_fire_event(name, options, *args)
def aasm_fire_event(name, options, *args, &block)
success = self.class.transaction(:requires_new => true) do
super
end
Expand Down
23 changes: 23 additions & 0 deletions spec/unit/transition_spec.rb
Expand Up @@ -26,6 +26,29 @@
silencer.should be_smiling
end

it 'should call the block when success' do
silencer = Silencer.new
success = false
lambda {
silencer.smile_any! do
success = true
end
}.should change { success }.to(true)
end

it 'should not call the block when failure' do
silencer = Silencer.new
success = false
lambda {
silencer.smile! do
success = true
end
}.should_not change { success }.to(true)
end

end

describe 'blocks' do
end

describe AASM::Transition do
Expand Down

0 comments on commit 1c6a636

Please sign in to comment.