Skip to content

Commit

Permalink
more tests for multiple state machines (callbacks, rest)
Browse files Browse the repository at this point in the history
  • Loading branch information
alto committed May 26, 2015
1 parent 69997ff commit d0172e9
Show file tree
Hide file tree
Showing 7 changed files with 507 additions and 210 deletions.
66 changes: 66 additions & 0 deletions spec/models/callbacks/guard_within_block_multiple.rb
@@ -0,0 +1,66 @@
module Callbacks
class GuardWithinBlockMultiple
include AASM

def initialize(options={})
@fail_event_guard = options[:fail_event_guard]
@fail_transition_guard = options[:fail_transition_guard]
@log = options[:log]
end

aasm(:left) do
state :open, :initial => true,
:before_enter => :before_enter_open,
:enter => :enter_open,
:after_enter => :after_enter_open,
:before_exit => :before_exit_open,
:exit => :exit_open,
:after_exit => :after_exit_open

state :closed,
:before_enter => :before_enter_closed,
:enter => :enter_closed,
:after_enter => :after_enter_closed,
:before_exit => :before_exit_closed,
:exit => :exit_closed,
:after_exit => :after_exit_closed

event :close, :before => :before, :after => :after, :guard => :event_guard do
transitions :to => :closed, :from => [:open], :after => :transitioning do
guard do
transition_guard
end
end
end

event :open, :before => :before, :after => :after do
transitions :to => :open, :from => :closed
end
end

def log(text)
puts text if @log
end

def before_enter_open; log('before_enter_open'); end
def enter_open; log('enter_open'); end
def before_exit_open; log('before_exit_open'); end
def after_enter_open; log('after_enter_open'); end
def exit_open; log('exit_open'); end
def after_exit_open; log('after_exit_open'); end

def before_enter_closed; log('before_enter_closed'); end
def enter_closed; log('enter_closed'); end
def before_exit_closed; log('before_exit_closed'); end
def exit_closed; log('exit_closed'); end
def after_enter_closed; log('after_enter_closed'); end
def after_exit_closed; log('after_exit_closed'); end

def event_guard; log('event_guard'); !@fail_event_guard; end
def transition_guard; log('transition_guard'); !@fail_transition_guard; end
def transitioning; log('transitioning'); end

def before; log('before'); end
def after; log('after'); end
end
end
@@ -0,0 +1,65 @@
module Callbacks
class MultipleTransitionsTransitionGuardMultiple
include AASM

def initialize(options={})
@fail_event_guard = options[:fail_event_guard]
@fail_transition_guard = options[:fail_transition_guard]
@log = options[:log]
end

aasm(:left) do
state :open, :initial => true,
:before_enter => :before_enter_open,
:enter => :enter_open,
:after_enter => :after_enter_open,
:before_exit => :before_exit_open,
:exit => :exit_open,
:after_exit => :after_exit_open

state :closed,
:before_enter => :before_enter_closed,
:enter => :enter_closed,
:after_enter => :after_enter_closed,
:before_exit => :before_exit_closed,
:exit => :exit_closed,
:after_exit => :after_exit_closed

state :failed

event :close, :before => :before, :after => :after, :guard => :event_guard do
transitions :to => :closed, :from => [:open], :guard => :transition_guard, :after => :transitioning
transitions :to => :failed, :from => [:open]
end

event :open, :before => :before, :after => :after do
transitions :to => :open, :from => :closed
end
end

def log(text)
puts text if @log
end

def before_enter_open; log('before_enter_open'); end
def enter_open; log('enter_open'); end
def before_exit_open; log('before_exit_open'); end
def after_enter_open; log('after_enter_open'); end
def exit_open; log('exit_open'); end
def after_exit_open; log('after_exit_open'); end

def before_enter_closed; log('before_enter_closed'); end
def enter_closed; log('enter_closed'); end
def before_exit_closed; log('before_exit_closed'); end
def exit_closed; log('exit_closed'); end
def after_enter_closed; log('after_enter_closed'); end
def after_exit_closed; log('after_exit_closed'); end

def event_guard; log('event_guard'); !@fail_event_guard; end
def transition_guard; log('transition_guard'); !@fail_transition_guard; end
def transitioning; log('transitioning'); end

def before; log('before'); end
def after; log('after'); end
end
end
44 changes: 44 additions & 0 deletions spec/models/callbacks/private_method_multiple.rb
@@ -0,0 +1,44 @@
module Callbacks
class PrivateMethodMultiple
include AASM

def initialize(options={})
@fail_event_guard = options[:fail_event_guard]
@fail_transition_guard = options[:fail_transition_guard]
@log = options[:log]
reset_data
end

def reset_data
@data = []
end

def data
@data.join(' ')
end

aasm(:left) do
state :open, :initial => true
state :closed

event :close, :after => :after_event do
transitions :to => :closed, :from => [:open]
end

event :open, :after => :after_event do
transitions :to => :open, :from => :closed
end
end

def log(text)
@data << text
puts text if @log
end

def aasm_write_state(*args); log('aasm_write_state'); true; end

private

def after_event; log('after_event'); end
end
end
61 changes: 61 additions & 0 deletions spec/models/callbacks/with_args_multiple.rb
@@ -0,0 +1,61 @@
module Callbacks
class WithArgsMultiple
include AASM

def initialize(options={})
@log = options[:log]
reset_data
end

def reset_data
@data = []
end

def data
@data.join(' ')
end

aasm(:left) do
state :open, :initial => true,
:before_enter => :before_enter_open,
:after_enter => :after_enter_open,
:before_exit => :before_exit_open,
:after_exit => :after_exit_open

state :closed,
:before_enter => :before_enter_closed,
:after_enter => :after_enter_closed,
:before_exit => :before_exit_closed,
:after_exit => :after_exit_closed

event :close, :before => :before, :after => :after do
transitions :to => :closed, :from => [:open], :after => :transition_proc
end

event :open, :before => :before, :after => :after do
transitions :to => :open, :from => :closed
end
end

def log(text)
@data << text
puts text if @log
end

def aasm_write_state(*args); log('aasm_write_state'); true; end

def before_enter_open(*args); log("before_enter_open(#{args.map(&:inspect).join(',')})"); end
def before_exit_open(*args); log("before_exit_open(#{args.map(&:inspect).join(',')})"); end
def after_enter_open(*args); log("after_enter_open(#{args.map(&:inspect).join(',')})"); end
def after_exit_open(*args); log("after_exit_open(#{args.map(&:inspect).join(',')})"); end

def before_enter_closed(*args); log("before_enter_closed(#{args.map(&:inspect).join(',')})"); end
def before_exit_closed(*args); log("before_enter_closed(#{args.map(&:inspect).join(',')})"); end
def after_enter_closed(*args); log("after_enter_closed(#{args.map(&:inspect).join(',')})"); end
def after_exit_closed(*args); log("after_exit_closed(#{args.map(&:inspect).join(',')})"); end

def before(arg1, *args); log("before(#{arg1.inspect},#{args.map(&:inspect).join(',')})"); end
def transition_proc(arg1, arg2); log("transition_proc(#{arg1.inspect},#{arg2.inspect})"); end
def after(*args); log("after(#{args.map(&:inspect).join(',')})"); end
end
end
26 changes: 26 additions & 0 deletions spec/models/callbacks/with_state_arg_multiple.rb
@@ -0,0 +1,26 @@
module Callbacks
class WithStateArgMultiple

include AASM

aasm(:left) do
state :open, :inital => true
state :closed
state :out_to_lunch

event :close, :before => :before_method, :after => :after_method do
transitions :to => :closed, :from => [:open], :after => :transition_method
transitions :to => :out_to_lunch, :from => [:open], :after => :transition_method2
end
end

def before_method(arg); end

def after_method(arg); end

def transition_method(arg); end

def transition_method2(arg); end

end
end
35 changes: 35 additions & 0 deletions spec/models/foo_multiple.rb
@@ -0,0 +1,35 @@
class FooMultiple
include AASM
aasm(:left) do
state :open, :initial => true, :before_exit => :before_exit
state :closed, :before_enter => :before_enter
state :final

event :close, :success => :success_callback do
transitions :from => [:open], :to => [:closed]
end

event :null do
transitions :from => [:open], :to => [:closed, :final], :guard => :always_false
end
end

def always_false
false
end

def success_callback
end

def before_enter
end
def before_exit
end
end

class FooTwoMultiple < FooMultiple
include AASM
aasm(:left) do
state :foo
end
end

0 comments on commit d0172e9

Please sign in to comment.