mirror of
https://github.com/aasm/aasm
synced 2023-03-27 23:22:41 -04:00
parent
f950de009d
commit
5fbc423a53
3 changed files with 44 additions and 0 deletions
|
@ -130,6 +130,14 @@ module AASM
|
|||
aasm(aasm_name).current_event = event
|
||||
aasm_fire_event(aasm_name, event, {:persist => false}, *args, &block)
|
||||
end
|
||||
|
||||
# Create aliases for the event methods. Keep the old names to maintain backwards compatibility.
|
||||
if namespace?
|
||||
klass.send(:alias_method, "may_#{name}_#{namespace}?", "may_#{name}?")
|
||||
klass.send(:alias_method, "#{name}_#{namespace}!", "#{name}!")
|
||||
klass.send(:alias_method, "#{name}_#{namespace}", name)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
def after_all_transitions(*callbacks, &block)
|
||||
|
|
|
@ -25,4 +25,18 @@ class NamespacedMultipleExample
|
|||
transitions :from => :approved, :to => :unapproved
|
||||
end
|
||||
end
|
||||
|
||||
# Test namespace event methods with suffix (ie may_sell_car?, sell_car!)
|
||||
aasm(:car, namespace: :car) do
|
||||
state :unsold, :initial => true
|
||||
state :sold
|
||||
|
||||
event :sell do
|
||||
transitions :from => :unsold, :to => :sold
|
||||
end
|
||||
|
||||
event :return do
|
||||
transitions :from => :sold, :to => :unsold
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -11,6 +11,10 @@ describe 'state machine' do
|
|||
expect(namespaced.aasm(:review_status).current_state).to eq(:unapproved)
|
||||
expect(namespaced).to respond_to(:review_unapproved?)
|
||||
expect(namespaced).to be_review_unapproved
|
||||
|
||||
expect(namespaced.aasm(:car).current_state).to eq(:unsold)
|
||||
expect(namespaced).to respond_to(:car_unsold?)
|
||||
expect(namespaced).to be_car_unsold
|
||||
end
|
||||
|
||||
it 'allows transitions to other states' do
|
||||
|
@ -25,6 +29,12 @@ describe 'state machine' do
|
|||
namespaced.approve_review!
|
||||
expect(namespaced).to respond_to(:review_approved?)
|
||||
expect(namespaced).to be_review_approved
|
||||
|
||||
expect(namespaced).to respond_to(:sell_car)
|
||||
expect(namespaced).to respond_to(:sell_car!)
|
||||
namespaced.sell_car!
|
||||
expect(namespaced).to respond_to(:car_sold?)
|
||||
expect(namespaced).to be_car_sold
|
||||
end
|
||||
|
||||
it 'denies transitions to other states' do
|
||||
|
@ -41,6 +51,13 @@ describe 'state machine' do
|
|||
expect {namespaced.approve_review}.to raise_error(AASM::InvalidTransition)
|
||||
expect {namespaced.approve_review!}.to raise_error(AASM::InvalidTransition)
|
||||
namespaced.unapprove_review
|
||||
|
||||
expect {namespaced.return_car}.to raise_error(AASM::InvalidTransition)
|
||||
expect {namespaced.return_car!}.to raise_error(AASM::InvalidTransition)
|
||||
namespaced.sell_car
|
||||
expect {namespaced.sell_car}.to raise_error(AASM::InvalidTransition)
|
||||
expect {namespaced.sell_car!}.to raise_error(AASM::InvalidTransition)
|
||||
namespaced.return_car
|
||||
end
|
||||
|
||||
it 'defines constants for each state name' do
|
||||
|
@ -49,5 +66,10 @@ describe 'state machine' do
|
|||
|
||||
expect(NamespacedMultipleExample::STATE_REVIEW_UNAPPROVED).to eq(:unapproved)
|
||||
expect(NamespacedMultipleExample::STATE_REVIEW_APPROVED).to eq(:approved)
|
||||
|
||||
expect(NamespacedMultipleExample::STATE_CAR_UNSOLD).to eq(:unsold)
|
||||
expect(NamespacedMultipleExample::STATE_CAR_SOLD).to eq(:sold)
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue