mirror of
https://github.com/aasm/aasm
synced 2023-03-27 23:22:41 -04:00
provide after_all_transitions callback
This commit is contained in:
parent
5e6a8f0f42
commit
6396847041
5 changed files with 19 additions and 1 deletions
|
|
@ -109,6 +109,10 @@ module AASM
|
||||||
EORUBY
|
EORUBY
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def after_all_transitions(*callbacks, &block)
|
||||||
|
@state_machine.add_global_callbacks(:after_all_transitions, *callbacks, &block)
|
||||||
|
end
|
||||||
|
|
||||||
def states
|
def states
|
||||||
@state_machine.states
|
@state_machine.states
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@ module AASM::Core
|
||||||
end
|
end
|
||||||
|
|
||||||
def execute(obj, *args)
|
def execute(obj, *args)
|
||||||
|
invoke_callbacks_compatible_with_guard(event.state_machine.global_callbacks[:after_all_transitions], obj, args)
|
||||||
invoke_callbacks_compatible_with_guard(@after, obj, args)
|
invoke_callbacks_compatible_with_guard(@after, obj, args)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,12 +10,13 @@ module AASM
|
||||||
(@machines ||= {})[klass.to_s] = machine
|
(@machines ||= {})[klass.to_s] = machine
|
||||||
end
|
end
|
||||||
|
|
||||||
attr_accessor :states, :events, :initial_state, :config, :name
|
attr_accessor :states, :events, :initial_state, :config, :name, :global_callbacks
|
||||||
|
|
||||||
def initialize(name)
|
def initialize(name)
|
||||||
@initial_state = nil
|
@initial_state = nil
|
||||||
@states = []
|
@states = []
|
||||||
@events = {}
|
@events = {}
|
||||||
|
@global_callbacks = {}
|
||||||
@config = AASM::Configuration.new
|
@config = AASM::Configuration.new
|
||||||
@name = name
|
@name = name
|
||||||
end
|
end
|
||||||
|
|
@ -40,6 +41,14 @@ module AASM
|
||||||
@events[name] = AASM::Core::Event.new(name, self, options, &block)
|
@events[name] = AASM::Core::Event.new(name, self, options, &block)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def add_global_callbacks(name, *callbacks, &block)
|
||||||
|
@global_callbacks[name] ||= []
|
||||||
|
callbacks.each do |callback|
|
||||||
|
@global_callbacks[name] << callback
|
||||||
|
end
|
||||||
|
@global_callbacks[name] << block if block
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def set_initial_state(name, options)
|
def set_initial_state(name, options)
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,8 @@ module Callbacks
|
||||||
end
|
end
|
||||||
|
|
||||||
aasm do
|
aasm do
|
||||||
|
after_all_transitions :after_all_transitions
|
||||||
|
|
||||||
state :open, :initial => true,
|
state :open, :initial => true,
|
||||||
:before_enter => :before_enter_open,
|
:before_enter => :before_enter_open,
|
||||||
:enter => :enter_open,
|
:enter => :enter_open,
|
||||||
|
|
@ -68,6 +70,7 @@ module Callbacks
|
||||||
def transition_guard; log('transition_guard'); !@fail_transition_guard; end
|
def transition_guard; log('transition_guard'); !@fail_transition_guard; end
|
||||||
|
|
||||||
def after_transition; log('after_transition'); end
|
def after_transition; log('after_transition'); end
|
||||||
|
def after_all_transitions;log('after_all_transitions');end
|
||||||
|
|
||||||
def before_event; log('before_event'); end
|
def before_event; log('before_event'); end
|
||||||
def after_event; log('after_event'); end
|
def after_event; log('after_event'); end
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ describe 'callbacks for the new DSL' do
|
||||||
expect(callback).to receive(:exit_open).once.ordered
|
expect(callback).to receive(:exit_open).once.ordered
|
||||||
# expect(callback).to receive(:event_guard).once.ordered.and_return(true)
|
# expect(callback).to receive(:event_guard).once.ordered.and_return(true)
|
||||||
# expect(callback).to receive(:transition_guard).once.ordered.and_return(true)
|
# expect(callback).to receive(:transition_guard).once.ordered.and_return(true)
|
||||||
|
expect(callback).to receive(:after_all_transitions).once.ordered
|
||||||
expect(callback).to receive(:after_transition).once.ordered
|
expect(callback).to receive(:after_transition).once.ordered
|
||||||
expect(callback).to receive(:before_enter_closed).once.ordered
|
expect(callback).to receive(:before_enter_closed).once.ordered
|
||||||
expect(callback).to receive(:enter_closed).once.ordered
|
expect(callback).to receive(:enter_closed).once.ordered
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue