mirror of
https://github.com/aasm/aasm
synced 2023-03-27 23:22:41 -04:00
continued to refactor instance methods for AASM objects
This commit is contained in:
parent
f66f2a1e76
commit
233d99b906
6 changed files with 42 additions and 30 deletions
|
@ -87,16 +87,10 @@ module AASM
|
||||||
aasm.current_state
|
aasm.current_state
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# deprecated
|
||||||
def aasm_enter_initial_state
|
def aasm_enter_initial_state
|
||||||
state_name = aasm.determine_state_name(self.class.aasm_initial_state)
|
# warn "#aasm_enter_initial_state is deprecated and will be removed in version 3.2.0; please use #aasm.enter_initial_state instead!"
|
||||||
state = aasm.state_object_for_name(state_name)
|
aasm.enter_initial_state
|
||||||
|
|
||||||
state.fire_callbacks(:before_enter, self)
|
|
||||||
state.fire_callbacks(:enter, self)
|
|
||||||
aasm.current_state = state_name
|
|
||||||
state.fire_callbacks(:after_enter, self)
|
|
||||||
|
|
||||||
state_name
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# deprecated
|
# deprecated
|
||||||
|
@ -105,10 +99,10 @@ module AASM
|
||||||
aasm.events(aasm.current_state)
|
aasm.events(aasm.current_state)
|
||||||
end
|
end
|
||||||
|
|
||||||
# filters the results of events_for_current_state so that only those that
|
# deprecated
|
||||||
# are really currently possible (given transition guards) are shown.
|
|
||||||
def aasm_permissible_events_for_current_state
|
def aasm_permissible_events_for_current_state
|
||||||
aasm.events(aasm.current_state).select{ |e| self.send(("may_" + e.to_s + "?").to_sym) }
|
# warn "#aasm_permissible_events_for_current_state is deprecated and will be removed in version 3.2.0; please use #aasm.permissible_events instead!"
|
||||||
|
aasm.permissible_events
|
||||||
end
|
end
|
||||||
|
|
||||||
# deprecated
|
# deprecated
|
||||||
|
@ -125,16 +119,6 @@ module AASM
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def aasm_set_current_state_with_persistence(state)
|
|
||||||
save_success = true
|
|
||||||
if self.respond_to?(:aasm_write_state) || self.private_methods.include?('aasm_write_state')
|
|
||||||
save_success = aasm_write_state(state)
|
|
||||||
end
|
|
||||||
aasm.current_state = state if save_success
|
|
||||||
|
|
||||||
save_success
|
|
||||||
end
|
|
||||||
|
|
||||||
def aasm_fire_event(name, options, *args)
|
def aasm_fire_event(name, options, *args)
|
||||||
persist = options[:persist]
|
persist = options[:persist]
|
||||||
|
|
||||||
|
@ -159,7 +143,7 @@ private
|
||||||
|
|
||||||
persist_successful = true
|
persist_successful = true
|
||||||
if persist
|
if persist
|
||||||
persist_successful = aasm_set_current_state_with_persistence(new_state_name)
|
persist_successful = aasm.set_current_state_with_persistence(new_state_name)
|
||||||
event.fire_callbacks(:success, self) if persist_successful
|
event.fire_callbacks(:success, self) if persist_successful
|
||||||
else
|
else
|
||||||
aasm.current_state = new_state_name
|
aasm.current_state = new_state_name
|
||||||
|
|
|
@ -6,7 +6,7 @@ module AASM
|
||||||
end
|
end
|
||||||
|
|
||||||
def current_state
|
def current_state
|
||||||
@current_state ||= persistable? ? @instance.aasm_read_state : @instance.aasm_enter_initial_state
|
@current_state ||= persistable? ? @instance.aasm_read_state : enter_initial_state
|
||||||
end
|
end
|
||||||
|
|
||||||
def current_state=(state)
|
def current_state=(state)
|
||||||
|
@ -16,6 +16,18 @@ module AASM
|
||||||
@current_state = state
|
@current_state = state
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def enter_initial_state
|
||||||
|
state_name = determine_state_name(@instance.class.aasm_initial_state)
|
||||||
|
state_object = state_object_for_name(state_name)
|
||||||
|
|
||||||
|
state_object.fire_callbacks(:before_enter, @instance)
|
||||||
|
state_object.fire_callbacks(:enter, @instance)
|
||||||
|
self.current_state = state_name
|
||||||
|
state_object.fire_callbacks(:after_enter, @instance)
|
||||||
|
|
||||||
|
state_name
|
||||||
|
end
|
||||||
|
|
||||||
def human_state
|
def human_state
|
||||||
AASM::Localizer.new.human_state_name(@instance.class, current_state)
|
AASM::Localizer.new.human_state_name(@instance.class, current_state)
|
||||||
end
|
end
|
||||||
|
@ -25,6 +37,13 @@ module AASM
|
||||||
events.map {|e| e.name}
|
events.map {|e| e.name}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# filters the results of events_for_current_state so that only those that
|
||||||
|
# are really currently possible (given transition guards) are shown.
|
||||||
|
# TODO: what about events.permissible ?
|
||||||
|
def permissible_events
|
||||||
|
events.select{ |e| @instance.send(("may_" + e.to_s + "?").to_sym) }
|
||||||
|
end
|
||||||
|
|
||||||
def state_object_for_name(name)
|
def state_object_for_name(name)
|
||||||
obj = @instance.class.aasm.states.find {|s| s == name}
|
obj = @instance.class.aasm.states.find {|s| s == name}
|
||||||
raise AASM::UndefinedState, "State :#{name} doesn't exist" if obj.nil?
|
raise AASM::UndefinedState, "State :#{name} doesn't exist" if obj.nil?
|
||||||
|
@ -47,6 +66,15 @@ module AASM
|
||||||
event.may_fire?(@instance, *args)
|
event.may_fire?(@instance, *args)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def set_current_state_with_persistence(state)
|
||||||
|
save_success = true
|
||||||
|
if @instance.respond_to?(:aasm_write_state) || @instance.private_methods.include?('aasm_write_state')
|
||||||
|
save_success = @instance.aasm_write_state(state)
|
||||||
|
end
|
||||||
|
self.current_state = state if save_success
|
||||||
|
save_success
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def persistable?
|
def persistable?
|
||||||
|
|
|
@ -112,7 +112,7 @@ module AASM
|
||||||
# foo.aasm_state # => nil
|
# foo.aasm_state # => nil
|
||||||
#
|
#
|
||||||
def aasm_ensure_initial_state
|
def aasm_ensure_initial_state
|
||||||
aasm_enter_initial_state if send(self.class.aasm_column).blank?
|
aasm.enter_initial_state if send(self.class.aasm_column).blank?
|
||||||
end
|
end
|
||||||
|
|
||||||
def aasm_fire_event(name, options, *args)
|
def aasm_fire_event(name, options, *args)
|
||||||
|
|
|
@ -106,7 +106,7 @@ module AASM
|
||||||
# foo.aasm_state # => nil
|
# foo.aasm_state # => nil
|
||||||
#
|
#
|
||||||
def aasm_ensure_initial_state
|
def aasm_ensure_initial_state
|
||||||
send("#{self.class.aasm_column}=", self.aasm_enter_initial_state.to_s) if send(self.class.aasm_column).blank?
|
send("#{self.class.aasm_column}=", aasm.enter_initial_state.to_s) if send(self.class.aasm_column).blank?
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -46,7 +46,7 @@ class AuthMachine
|
||||||
def initialize
|
def initialize
|
||||||
# the AR backend uses a before_validate_on_create :aasm_ensure_initial_state
|
# the AR backend uses a before_validate_on_create :aasm_ensure_initial_state
|
||||||
# lets do something similar here for testing purposes.
|
# lets do something similar here for testing purposes.
|
||||||
aasm_enter_initial_state
|
aasm.enter_initial_state
|
||||||
end
|
end
|
||||||
|
|
||||||
def make_activation_code
|
def make_activation_code
|
||||||
|
|
|
@ -85,7 +85,7 @@ describe 'event callbacks' do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should not call it for failing bang fire' do
|
it 'should not call it for failing bang fire' do
|
||||||
@foo.stub!(:aasm_set_current_state_with_persistence).and_return(false)
|
@foo.aasm.stub!(:set_current_state_with_persistence).and_return(false)
|
||||||
@foo.should_not_receive(:aasm_event_fired)
|
@foo.should_not_receive(:aasm_event_fired)
|
||||||
@foo.close!
|
@foo.close!
|
||||||
end
|
end
|
||||||
|
@ -108,7 +108,7 @@ describe 'event callbacks' do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should not call it if persist fails for bang fire' do
|
it 'should not call it if persist fails for bang fire' do
|
||||||
@foo.stub!(:aasm_set_current_state_with_persistence).and_return(false)
|
@foo.aasm.stub!(:set_current_state_with_persistence).and_return(false)
|
||||||
@foo.should_receive(:aasm_event_failed)
|
@foo.should_receive(:aasm_event_failed)
|
||||||
@foo.close!
|
@foo.close!
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue