aasm 4.5.1 → 5.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/LICENSE +1 -1
- data/README.md +809 -129
- data/lib/aasm/aasm.rb +74 -37
- data/lib/aasm/base.rb +188 -41
- data/lib/aasm/configuration.rb +27 -2
- data/lib/aasm/core/event.rb +75 -47
- data/lib/aasm/core/invoker.rb +129 -0
- data/lib/aasm/core/invokers/base_invoker.rb +75 -0
- data/lib/aasm/core/invokers/class_invoker.rb +52 -0
- data/lib/aasm/core/invokers/literal_invoker.rb +49 -0
- data/lib/aasm/core/invokers/proc_invoker.rb +59 -0
- data/lib/aasm/core/state.rb +22 -13
- data/lib/aasm/core/transition.rb +30 -23
- data/lib/aasm/dsl_helper.rb +24 -22
- data/lib/aasm/errors.rb +8 -5
- data/lib/aasm/instance_base.rb +63 -15
- data/lib/aasm/localizer.rb +13 -3
- data/lib/aasm/minitest/allow_event.rb +13 -0
- data/lib/aasm/minitest/allow_transition_to.rb +13 -0
- data/lib/aasm/minitest/have_state.rb +13 -0
- data/lib/aasm/minitest/transition_from.rb +21 -0
- data/lib/aasm/minitest.rb +5 -0
- data/lib/aasm/minitest_spec.rb +15 -0
- data/lib/aasm/persistence/active_record_persistence.rb +87 -79
- data/lib/aasm/persistence/base.rb +30 -30
- data/lib/aasm/persistence/core_data_query_persistence.rb +94 -0
- data/lib/aasm/persistence/dynamoid_persistence.rb +92 -0
- data/lib/aasm/persistence/mongoid_persistence.rb +49 -35
- data/lib/aasm/persistence/no_brainer_persistence.rb +105 -0
- data/lib/aasm/persistence/orm.rb +154 -0
- data/lib/aasm/persistence/plain_persistence.rb +2 -1
- data/lib/aasm/persistence/redis_persistence.rb +112 -0
- data/lib/aasm/persistence/sequel_persistence.rb +37 -67
- data/lib/aasm/persistence.rb +20 -5
- data/lib/aasm/rspec/allow_event.rb +5 -1
- data/lib/aasm/rspec/allow_transition_to.rb +5 -1
- data/lib/aasm/rspec/transition_from.rb +8 -4
- data/lib/aasm/state_machine.rb +6 -12
- data/lib/aasm/state_machine_store.rb +76 -0
- data/lib/aasm/version.rb +1 -1
- data/lib/aasm.rb +8 -2
- data/lib/generators/aasm/aasm_generator.rb +16 -0
- data/lib/generators/aasm/orm_helpers.rb +41 -0
- data/lib/generators/active_record/aasm_generator.rb +40 -0
- data/lib/generators/active_record/templates/migration.rb +8 -0
- data/lib/generators/active_record/templates/migration_existing.rb +5 -0
- data/lib/generators/mongoid/aasm_generator.rb +28 -0
- data/lib/generators/nobrainer/aasm_generator.rb +28 -0
- data/lib/motion-aasm.rb +37 -0
- metadata +104 -259
- data/.document +0 -6
- data/.gitignore +0 -19
- data/.travis.yml +0 -37
- data/API +0 -34
- data/CHANGELOG.md +0 -272
- data/CODE_OF_CONDUCT.md +0 -13
- data/Gemfile +0 -15
- data/HOWTO +0 -12
- data/PLANNED_CHANGES.md +0 -11
- data/README_FROM_VERSION_3_TO_4.md +0 -240
- data/Rakefile +0 -26
- data/aasm.gemspec +0 -31
- data/callbacks.txt +0 -51
- data/gemfiles/rails_3.2.gemfile +0 -14
- data/gemfiles/rails_4.0.gemfile +0 -12
- data/gemfiles/rails_4.0_mongo_mapper.gemfile +0 -14
- data/gemfiles/rails_4.1.gemfile +0 -12
- data/gemfiles/rails_4.1_mongo_mapper.gemfile +0 -14
- data/gemfiles/rails_4.2.gemfile +0 -12
- data/gemfiles/rails_4.2_mongo_mapper.gemfile +0 -14
- data/gemfiles/rails_4.2_mongoid_5.gemfile +0 -12
- data/lib/aasm/persistence/mongo_mapper_persistence.rb +0 -157
- data/spec/database.rb +0 -63
- data/spec/database.yml +0 -3
- data/spec/en.yml +0 -9
- data/spec/en_deprecated_style.yml +0 -10
- data/spec/models/active_record/basic_active_record_two_state_machines_example.rb +0 -25
- data/spec/models/active_record/complex_active_record_example.rb +0 -33
- data/spec/models/active_record/derivate_new_dsl.rb +0 -7
- data/spec/models/active_record/false_state.rb +0 -35
- data/spec/models/active_record/gate.rb +0 -39
- data/spec/models/active_record/localizer_test_model.rb +0 -34
- data/spec/models/active_record/no_direct_assignment.rb +0 -21
- data/spec/models/active_record/no_scope.rb +0 -21
- data/spec/models/active_record/persisted_state.rb +0 -12
- data/spec/models/active_record/provided_and_persisted_state.rb +0 -24
- data/spec/models/active_record/reader.rb +0 -7
- data/spec/models/active_record/readme_job.rb +0 -21
- data/spec/models/active_record/simple_new_dsl.rb +0 -17
- data/spec/models/active_record/thief.rb +0 -29
- data/spec/models/active_record/transient.rb +0 -6
- data/spec/models/active_record/with_enum.rb +0 -39
- data/spec/models/active_record/with_false_enum.rb +0 -31
- data/spec/models/active_record/with_true_enum.rb +0 -39
- data/spec/models/active_record/writer.rb +0 -6
- data/spec/models/basic_two_state_machines_example.rb +0 -25
- data/spec/models/callbacks/basic.rb +0 -78
- data/spec/models/callbacks/basic_multiple.rb +0 -75
- data/spec/models/callbacks/guard_within_block.rb +0 -66
- data/spec/models/callbacks/guard_within_block_multiple.rb +0 -66
- data/spec/models/callbacks/multiple_transitions_transition_guard.rb +0 -65
- data/spec/models/callbacks/multiple_transitions_transition_guard_multiple.rb +0 -65
- data/spec/models/callbacks/private_method.rb +0 -44
- data/spec/models/callbacks/private_method_multiple.rb +0 -44
- data/spec/models/callbacks/with_args.rb +0 -61
- data/spec/models/callbacks/with_args_multiple.rb +0 -61
- data/spec/models/callbacks/with_state_arg.rb +0 -26
- data/spec/models/callbacks/with_state_arg_multiple.rb +0 -26
- data/spec/models/complex_example.rb +0 -222
- data/spec/models/conversation.rb +0 -93
- data/spec/models/default_state.rb +0 -12
- data/spec/models/double_definer.rb +0 -21
- data/spec/models/foo.rb +0 -92
- data/spec/models/foo_callback_multiple.rb +0 -45
- data/spec/models/guardian.rb +0 -48
- data/spec/models/guardian_multiple.rb +0 -48
- data/spec/models/initial_state_proc.rb +0 -31
- data/spec/models/invalid_persistor.rb +0 -31
- data/spec/models/mongo_mapper/complex_mongo_mapper_example.rb +0 -37
- data/spec/models/mongo_mapper/no_scope_mongo_mapper.rb +0 -21
- data/spec/models/mongo_mapper/simple_mongo_mapper.rb +0 -23
- data/spec/models/mongo_mapper/simple_new_dsl_mongo_mapper.rb +0 -25
- data/spec/models/mongoid/complex_mongoid_example.rb +0 -37
- data/spec/models/mongoid/no_scope_mongoid.rb +0 -21
- data/spec/models/mongoid/simple_mongoid.rb +0 -23
- data/spec/models/mongoid/simple_new_dsl_mongoid.rb +0 -25
- data/spec/models/no_initial_state.rb +0 -25
- data/spec/models/not_auto_loaded/process.rb +0 -21
- data/spec/models/parametrised_event.rb +0 -29
- data/spec/models/parametrised_event_multiple.rb +0 -29
- data/spec/models/process_with_new_dsl.rb +0 -31
- data/spec/models/provided_state.rb +0 -24
- data/spec/models/sequel/complex_sequel_example.rb +0 -45
- data/spec/models/sequel/sequel_multiple.rb +0 -25
- data/spec/models/sequel/sequel_simple.rb +0 -25
- data/spec/models/silencer.rb +0 -27
- data/spec/models/simple_example.rb +0 -15
- data/spec/models/simple_multiple_example.rb +0 -30
- data/spec/models/state_machine_with_failed_event.rb +0 -12
- data/spec/models/sub_class.rb +0 -7
- data/spec/models/sub_class_with_more_states.rb +0 -18
- data/spec/models/sub_classing.rb +0 -3
- data/spec/models/super_class.rb +0 -46
- data/spec/models/this_name_better_not_be_in_use.rb +0 -11
- data/spec/models/transactor.rb +0 -53
- data/spec/models/valid_state_name.rb +0 -23
- data/spec/models/validator.rb +0 -79
- data/spec/models/worker.rb +0 -2
- data/spec/spec_helper.rb +0 -25
- data/spec/unit/api_spec.rb +0 -77
- data/spec/unit/basic_two_state_machines_example_spec.rb +0 -10
- data/spec/unit/callback_multiple_spec.rb +0 -295
- data/spec/unit/callbacks_spec.rb +0 -296
- data/spec/unit/complex_example_spec.rb +0 -84
- data/spec/unit/complex_multiple_example_spec.rb +0 -99
- data/spec/unit/edge_cases_spec.rb +0 -16
- data/spec/unit/event_multiple_spec.rb +0 -73
- data/spec/unit/event_naming_spec.rb +0 -11
- data/spec/unit/event_spec.rb +0 -322
- data/spec/unit/guard_multiple_spec.rb +0 -60
- data/spec/unit/guard_spec.rb +0 -60
- data/spec/unit/initial_state_multiple_spec.rb +0 -15
- data/spec/unit/initial_state_spec.rb +0 -12
- data/spec/unit/inspection_multiple_spec.rb +0 -201
- data/spec/unit/inspection_spec.rb +0 -111
- data/spec/unit/localizer_spec.rb +0 -76
- data/spec/unit/memory_leak_spec.rb +0 -38
- data/spec/unit/new_dsl_spec.rb +0 -12
- data/spec/unit/persistence/active_record_persistence_multiple_spec.rb +0 -573
- data/spec/unit/persistence/active_record_persistence_spec.rb +0 -552
- data/spec/unit/persistence/mongo_mapper_persistence_multiple_spec.rb +0 -146
- data/spec/unit/persistence/mongo_mapper_persistence_spec.rb +0 -93
- data/spec/unit/persistence/mongoid_persistence_multiple_spec.rb +0 -127
- data/spec/unit/persistence/mongoid_persistence_spec.rb +0 -79
- data/spec/unit/persistence/sequel_persistence_multiple_spec.rb +0 -153
- data/spec/unit/persistence/sequel_persistence_spec.rb +0 -100
- data/spec/unit/readme_spec.rb +0 -42
- data/spec/unit/reloading_spec.rb +0 -15
- data/spec/unit/rspec_matcher_spec.rb +0 -79
- data/spec/unit/simple_example_spec.rb +0 -42
- data/spec/unit/simple_multiple_example_spec.rb +0 -63
- data/spec/unit/state_spec.rb +0 -89
- data/spec/unit/subclassing_multiple_spec.rb +0 -39
- data/spec/unit/subclassing_spec.rb +0 -31
- data/spec/unit/transition_spec.rb +0 -291
@@ -1,61 +0,0 @@
|
|
1
|
-
module Callbacks
|
2
|
-
class WithArgs
|
3
|
-
include AASM
|
4
|
-
|
5
|
-
def initialize(options={})
|
6
|
-
@log = options[:log]
|
7
|
-
reset_data
|
8
|
-
end
|
9
|
-
|
10
|
-
def reset_data
|
11
|
-
@data = []
|
12
|
-
end
|
13
|
-
|
14
|
-
def data
|
15
|
-
@data.join(' ')
|
16
|
-
end
|
17
|
-
|
18
|
-
aasm do
|
19
|
-
state :open, :initial => true,
|
20
|
-
:before_enter => :before_enter_open,
|
21
|
-
:after_enter => :after_enter_open,
|
22
|
-
:before_exit => :before_exit_open,
|
23
|
-
:after_exit => :after_exit_open
|
24
|
-
|
25
|
-
state :closed,
|
26
|
-
:before_enter => :before_enter_closed,
|
27
|
-
:after_enter => :after_enter_closed,
|
28
|
-
:before_exit => :before_exit_closed,
|
29
|
-
:after_exit => :after_exit_closed
|
30
|
-
|
31
|
-
event :close, :before => :before, :after => :after do
|
32
|
-
transitions :to => :closed, :from => [:open], :after => :transition_proc
|
33
|
-
end
|
34
|
-
|
35
|
-
event :open, :before => :before, :after => :after do
|
36
|
-
transitions :to => :open, :from => :closed
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def log(text)
|
41
|
-
@data << text
|
42
|
-
puts text if @log
|
43
|
-
end
|
44
|
-
|
45
|
-
def aasm_write_state(*args); log('aasm_write_state'); true; end
|
46
|
-
|
47
|
-
def before_enter_open(*args); log("before_enter_open(#{args.map(&:inspect).join(',')})"); end
|
48
|
-
def before_exit_open(*args); log("before_exit_open(#{args.map(&:inspect).join(',')})"); end
|
49
|
-
def after_enter_open(*args); log("after_enter_open(#{args.map(&:inspect).join(',')})"); end
|
50
|
-
def after_exit_open(*args); log("after_exit_open(#{args.map(&:inspect).join(',')})"); end
|
51
|
-
|
52
|
-
def before_enter_closed(*args); log("before_enter_closed(#{args.map(&:inspect).join(',')})"); end
|
53
|
-
def before_exit_closed(*args); log("before_enter_closed(#{args.map(&:inspect).join(',')})"); end
|
54
|
-
def after_enter_closed(*args); log("after_enter_closed(#{args.map(&:inspect).join(',')})"); end
|
55
|
-
def after_exit_closed(*args); log("after_exit_closed(#{args.map(&:inspect).join(',')})"); end
|
56
|
-
|
57
|
-
def before(arg1, *args); log("before(#{arg1.inspect},#{args.map(&:inspect).join(',')})"); end
|
58
|
-
def transition_proc(arg1, arg2); log("transition_proc(#{arg1.inspect},#{arg2.inspect})"); end
|
59
|
-
def after(*args); log("after(#{args.map(&:inspect).join(',')})"); end
|
60
|
-
end
|
61
|
-
end
|
@@ -1,61 +0,0 @@
|
|
1
|
-
module Callbacks
|
2
|
-
class WithArgsMultiple
|
3
|
-
include AASM
|
4
|
-
|
5
|
-
def initialize(options={})
|
6
|
-
@log = options[:log]
|
7
|
-
reset_data
|
8
|
-
end
|
9
|
-
|
10
|
-
def reset_data
|
11
|
-
@data = []
|
12
|
-
end
|
13
|
-
|
14
|
-
def data
|
15
|
-
@data.join(' ')
|
16
|
-
end
|
17
|
-
|
18
|
-
aasm(:left) do
|
19
|
-
state :open, :initial => true,
|
20
|
-
:before_enter => :before_enter_open,
|
21
|
-
:after_enter => :after_enter_open,
|
22
|
-
:before_exit => :before_exit_open,
|
23
|
-
:after_exit => :after_exit_open
|
24
|
-
|
25
|
-
state :closed,
|
26
|
-
:before_enter => :before_enter_closed,
|
27
|
-
:after_enter => :after_enter_closed,
|
28
|
-
:before_exit => :before_exit_closed,
|
29
|
-
:after_exit => :after_exit_closed
|
30
|
-
|
31
|
-
event :close, :before => :before, :after => :after do
|
32
|
-
transitions :to => :closed, :from => [:open], :after => :transition_proc
|
33
|
-
end
|
34
|
-
|
35
|
-
event :open, :before => :before, :after => :after do
|
36
|
-
transitions :to => :open, :from => :closed
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def log(text)
|
41
|
-
@data << text
|
42
|
-
puts text if @log
|
43
|
-
end
|
44
|
-
|
45
|
-
def aasm_write_state(*args); log('aasm_write_state'); true; end
|
46
|
-
|
47
|
-
def before_enter_open(*args); log("before_enter_open(#{args.map(&:inspect).join(',')})"); end
|
48
|
-
def before_exit_open(*args); log("before_exit_open(#{args.map(&:inspect).join(',')})"); end
|
49
|
-
def after_enter_open(*args); log("after_enter_open(#{args.map(&:inspect).join(',')})"); end
|
50
|
-
def after_exit_open(*args); log("after_exit_open(#{args.map(&:inspect).join(',')})"); end
|
51
|
-
|
52
|
-
def before_enter_closed(*args); log("before_enter_closed(#{args.map(&:inspect).join(',')})"); end
|
53
|
-
def before_exit_closed(*args); log("before_enter_closed(#{args.map(&:inspect).join(',')})"); end
|
54
|
-
def after_enter_closed(*args); log("after_enter_closed(#{args.map(&:inspect).join(',')})"); end
|
55
|
-
def after_exit_closed(*args); log("after_exit_closed(#{args.map(&:inspect).join(',')})"); end
|
56
|
-
|
57
|
-
def before(arg1, *args); log("before(#{arg1.inspect},#{args.map(&:inspect).join(',')})"); end
|
58
|
-
def transition_proc(arg1, arg2); log("transition_proc(#{arg1.inspect},#{arg2.inspect})"); end
|
59
|
-
def after(*args); log("after(#{args.map(&:inspect).join(',')})"); end
|
60
|
-
end
|
61
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module Callbacks
|
2
|
-
class WithStateArg
|
3
|
-
|
4
|
-
include AASM
|
5
|
-
|
6
|
-
aasm do
|
7
|
-
state :open, :initial => true
|
8
|
-
state :closed
|
9
|
-
state :out_to_lunch
|
10
|
-
|
11
|
-
event :close, :before => :before_method, :after => :after_method do
|
12
|
-
transitions :to => :closed, :from => [:open], :after => :transition_method
|
13
|
-
transitions :to => :out_to_lunch, :from => [:open], :after => :transition_method2
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def before_method(arg); end
|
18
|
-
|
19
|
-
def after_method(arg); end
|
20
|
-
|
21
|
-
def transition_method(arg); end
|
22
|
-
|
23
|
-
def transition_method2(arg); end
|
24
|
-
|
25
|
-
end
|
26
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module Callbacks
|
2
|
-
class WithStateArgMultiple
|
3
|
-
|
4
|
-
include AASM
|
5
|
-
|
6
|
-
aasm(:left) do
|
7
|
-
state :open, :initial => true
|
8
|
-
state :closed
|
9
|
-
state :out_to_lunch
|
10
|
-
|
11
|
-
event :close, :before => :before_method, :after => :after_method do
|
12
|
-
transitions :to => :closed, :from => [:open], :after => :transition_method
|
13
|
-
transitions :to => :out_to_lunch, :from => [:open], :after => :transition_method2
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def before_method(arg); end
|
18
|
-
|
19
|
-
def after_method(arg); end
|
20
|
-
|
21
|
-
def transition_method(arg); end
|
22
|
-
|
23
|
-
def transition_method2(arg); end
|
24
|
-
|
25
|
-
end
|
26
|
-
end
|
@@ -1,222 +0,0 @@
|
|
1
|
-
class ComplexExample
|
2
|
-
include AASM
|
3
|
-
|
4
|
-
attr_accessor :activation_code, :activated_at, :deleted_at
|
5
|
-
|
6
|
-
aasm do
|
7
|
-
state :passive
|
8
|
-
state :pending, :initial => true, :before_enter => :make_activation_code
|
9
|
-
state :active, :before_enter => :do_activate
|
10
|
-
state :suspended
|
11
|
-
state :deleted, :before_enter => :do_delete#, :exit => :do_undelete
|
12
|
-
state :waiting
|
13
|
-
|
14
|
-
event :register do
|
15
|
-
transitions :from => :passive, :to => :pending do
|
16
|
-
guard do
|
17
|
-
can_register?
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
event :activate do
|
23
|
-
transitions :from => :pending, :to => :active
|
24
|
-
end
|
25
|
-
|
26
|
-
event :suspend do
|
27
|
-
transitions :from => [:passive, :pending, :active], :to => :suspended
|
28
|
-
end
|
29
|
-
|
30
|
-
event :delete do
|
31
|
-
transitions :from => [:passive, :pending, :active, :suspended], :to => :deleted
|
32
|
-
end
|
33
|
-
|
34
|
-
# a dummy event that can never happen
|
35
|
-
event :unpassify do
|
36
|
-
transitions :from => :passive, :to => :active, :guard => Proc.new {|u| false }
|
37
|
-
end
|
38
|
-
|
39
|
-
event :unsuspend do
|
40
|
-
transitions :from => :suspended, :to => :active, :guard => Proc.new { has_activated? }
|
41
|
-
transitions :from => :suspended, :to => :pending, :guard => :has_activation_code?
|
42
|
-
transitions :from => :suspended, :to => :passive
|
43
|
-
end
|
44
|
-
|
45
|
-
event :wait do
|
46
|
-
transitions :from => :suspended, :to => :waiting, :guard => :if_polite?
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def initialize
|
51
|
-
# the AR backend uses a before_validate_on_create :aasm_ensure_initial_state
|
52
|
-
# lets do something similar here for testing purposes.
|
53
|
-
aasm.enter_initial_state
|
54
|
-
end
|
55
|
-
|
56
|
-
def make_activation_code
|
57
|
-
@activation_code = 'moo'
|
58
|
-
end
|
59
|
-
|
60
|
-
def do_activate
|
61
|
-
@activated_at = Time.now
|
62
|
-
@activation_code = nil
|
63
|
-
end
|
64
|
-
|
65
|
-
def do_delete
|
66
|
-
@deleted_at = Time.now
|
67
|
-
end
|
68
|
-
|
69
|
-
def do_undelete
|
70
|
-
@deleted_at = false
|
71
|
-
end
|
72
|
-
|
73
|
-
def can_register?
|
74
|
-
true
|
75
|
-
end
|
76
|
-
|
77
|
-
def has_activated?
|
78
|
-
!!@activated_at
|
79
|
-
end
|
80
|
-
|
81
|
-
def has_activation_code?
|
82
|
-
!!@activation_code
|
83
|
-
end
|
84
|
-
|
85
|
-
def if_polite?(phrase = nil)
|
86
|
-
phrase == :please
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
class ComplexExampleMultiple
|
91
|
-
include AASM
|
92
|
-
|
93
|
-
attr_accessor :activation_code, :activated_at, :deleted_at
|
94
|
-
|
95
|
-
aasm(:left) do
|
96
|
-
state :passive
|
97
|
-
state :pending, :initial => true, :before_enter => :make_activation_code
|
98
|
-
state :active, :before_enter => :do_activate
|
99
|
-
state :suspended
|
100
|
-
state :deleted, :before_enter => :do_delete#, :exit => :do_undelete
|
101
|
-
state :waiting
|
102
|
-
|
103
|
-
event :left_register do
|
104
|
-
transitions :from => :passive, :to => :pending do
|
105
|
-
guard do
|
106
|
-
can_register?
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
event :left_activate do
|
112
|
-
transitions :from => :pending, :to => :active
|
113
|
-
end
|
114
|
-
|
115
|
-
event :left_suspend do
|
116
|
-
transitions :from => [:passive, :pending, :active], :to => :suspended
|
117
|
-
end
|
118
|
-
|
119
|
-
event :left_delete do
|
120
|
-
transitions :from => [:passive, :pending, :active, :suspended], :to => :deleted
|
121
|
-
end
|
122
|
-
|
123
|
-
# a dummy event that can never happen
|
124
|
-
event :left_unpassify do
|
125
|
-
transitions :from => :passive, :to => :active, :guard => Proc.new {|u| false }
|
126
|
-
end
|
127
|
-
|
128
|
-
event :left_unsuspend do
|
129
|
-
transitions :from => :suspended, :to => :active, :guard => Proc.new { has_activated? }
|
130
|
-
transitions :from => :suspended, :to => :pending, :guard => :has_activation_code?
|
131
|
-
transitions :from => :suspended, :to => :passive
|
132
|
-
end
|
133
|
-
|
134
|
-
event :left_wait do
|
135
|
-
transitions :from => :suspended, :to => :waiting, :guard => :if_polite?
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
aasm(:right) do
|
140
|
-
state :passive
|
141
|
-
state :pending, :initial => true, :before_enter => :make_activation_code
|
142
|
-
state :active, :before_enter => :do_activate
|
143
|
-
state :suspended
|
144
|
-
state :deleted, :before_enter => :do_delete#, :exit => :do_undelete
|
145
|
-
state :waiting
|
146
|
-
|
147
|
-
event :right_register do
|
148
|
-
transitions :from => :passive, :to => :pending do
|
149
|
-
guard do
|
150
|
-
can_register?
|
151
|
-
end
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
event :right_activate do
|
156
|
-
transitions :from => :pending, :to => :active
|
157
|
-
end
|
158
|
-
|
159
|
-
event :right_suspend do
|
160
|
-
transitions :from => [:passive, :pending, :active], :to => :suspended
|
161
|
-
end
|
162
|
-
|
163
|
-
event :right_delete do
|
164
|
-
transitions :from => [:passive, :pending, :active, :suspended], :to => :deleted
|
165
|
-
end
|
166
|
-
|
167
|
-
# a dummy event that can never happen
|
168
|
-
event :right_unpassify do
|
169
|
-
transitions :from => :passive, :to => :active, :guard => Proc.new {|u| false }
|
170
|
-
end
|
171
|
-
|
172
|
-
event :right_unsuspend do
|
173
|
-
transitions :from => :suspended, :to => :active, :guard => Proc.new { has_activated? }
|
174
|
-
transitions :from => :suspended, :to => :pending, :guard => :has_activation_code?
|
175
|
-
transitions :from => :suspended, :to => :passive
|
176
|
-
end
|
177
|
-
|
178
|
-
event :right_wait do
|
179
|
-
transitions :from => :suspended, :to => :waiting, :guard => :if_polite?
|
180
|
-
end
|
181
|
-
end # right
|
182
|
-
|
183
|
-
def initialize
|
184
|
-
# the AR backend uses a before_validate_on_create :aasm_ensure_initial_state
|
185
|
-
# lets do something similar here for testing purposes.
|
186
|
-
aasm(:left).enter_initial_state
|
187
|
-
aasm(:right).enter_initial_state
|
188
|
-
end
|
189
|
-
|
190
|
-
def make_activation_code
|
191
|
-
@activation_code = @activation_code ? @activation_code + '2' : '1'
|
192
|
-
end
|
193
|
-
|
194
|
-
def do_activate
|
195
|
-
@activated_at = Time.now
|
196
|
-
@activation_code = nil
|
197
|
-
end
|
198
|
-
|
199
|
-
def do_delete
|
200
|
-
@deleted_at = Time.now
|
201
|
-
end
|
202
|
-
|
203
|
-
def do_undelete
|
204
|
-
@deleted_at = false
|
205
|
-
end
|
206
|
-
|
207
|
-
def can_register?
|
208
|
-
true
|
209
|
-
end
|
210
|
-
|
211
|
-
def has_activated?
|
212
|
-
!!@activated_at
|
213
|
-
end
|
214
|
-
|
215
|
-
def has_activation_code?
|
216
|
-
!!@activation_code
|
217
|
-
end
|
218
|
-
|
219
|
-
def if_polite?(phrase = nil)
|
220
|
-
phrase == :please
|
221
|
-
end
|
222
|
-
end
|
data/spec/models/conversation.rb
DELETED
@@ -1,93 +0,0 @@
|
|
1
|
-
class Conversation
|
2
|
-
include AASM
|
3
|
-
|
4
|
-
aasm do
|
5
|
-
state :needs_attention, :initial => true
|
6
|
-
state :read
|
7
|
-
state :closed
|
8
|
-
state :awaiting_response
|
9
|
-
state :junk
|
10
|
-
|
11
|
-
event :new_message do
|
12
|
-
end
|
13
|
-
|
14
|
-
event :view do
|
15
|
-
transitions :to => :read, :from => [:needs_attention]
|
16
|
-
end
|
17
|
-
|
18
|
-
event :reply do
|
19
|
-
end
|
20
|
-
|
21
|
-
event :close do
|
22
|
-
transitions :to => :closed, :from => [:read, :awaiting_response]
|
23
|
-
end
|
24
|
-
|
25
|
-
event :junk do
|
26
|
-
transitions :to => :junk, :from => [:read]
|
27
|
-
end
|
28
|
-
|
29
|
-
event :unjunk do
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def initialize(persister)
|
34
|
-
@persister = persister
|
35
|
-
end
|
36
|
-
|
37
|
-
private
|
38
|
-
|
39
|
-
def aasm_read_state
|
40
|
-
@persister.read_state
|
41
|
-
end
|
42
|
-
|
43
|
-
def aasm_write_state(state)
|
44
|
-
@persister.write_state(state)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
class ConversationMultiple
|
49
|
-
include AASM
|
50
|
-
|
51
|
-
aasm(:left) do
|
52
|
-
state :needs_attention, :initial => true
|
53
|
-
state :read
|
54
|
-
state :closed
|
55
|
-
state :awaiting_response
|
56
|
-
state :junk
|
57
|
-
|
58
|
-
event :new_message do
|
59
|
-
end
|
60
|
-
|
61
|
-
event :view do
|
62
|
-
transitions :to => :read, :from => [:needs_attention]
|
63
|
-
end
|
64
|
-
|
65
|
-
event :reply do
|
66
|
-
end
|
67
|
-
|
68
|
-
event :close do
|
69
|
-
transitions :to => :closed, :from => [:read, :awaiting_response]
|
70
|
-
end
|
71
|
-
|
72
|
-
event :junk do
|
73
|
-
transitions :to => :junk, :from => [:read]
|
74
|
-
end
|
75
|
-
|
76
|
-
event :unjunk do
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
def initialize(persister)
|
81
|
-
@persister = persister
|
82
|
-
end
|
83
|
-
|
84
|
-
private
|
85
|
-
|
86
|
-
def aasm_read_state
|
87
|
-
@persister.read_state
|
88
|
-
end
|
89
|
-
|
90
|
-
def aasm_write_state(state)
|
91
|
-
@persister.write_state(state)
|
92
|
-
end
|
93
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
class DefaultState
|
2
|
-
attr_accessor :transient_store, :persisted_store
|
3
|
-
include AASM
|
4
|
-
aasm do
|
5
|
-
state :alpha, :initial => true
|
6
|
-
state :beta
|
7
|
-
state :gamma
|
8
|
-
event :release do
|
9
|
-
transitions :from => [:alpha, :beta, :gamma], :to => :beta
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
class DoubleDefiner
|
2
|
-
include AASM
|
3
|
-
|
4
|
-
aasm do
|
5
|
-
state :started
|
6
|
-
state :finished
|
7
|
-
|
8
|
-
event :finish do
|
9
|
-
transitions :from => :started, :to => :finished
|
10
|
-
end
|
11
|
-
|
12
|
-
# simulating a reload
|
13
|
-
state :finished, :before_enter => :do_enter
|
14
|
-
event :finish do
|
15
|
-
transitions :from => :started, :to => :finished, :after => :do_on_transition
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def do_enter; end
|
20
|
-
def do_on_transition; end
|
21
|
-
end
|
data/spec/models/foo.rb
DELETED
@@ -1,92 +0,0 @@
|
|
1
|
-
class Foo
|
2
|
-
include AASM
|
3
|
-
aasm do
|
4
|
-
state :open, :initial => true, :before_exit => :before_exit
|
5
|
-
state :closed, :before_enter => :before_enter
|
6
|
-
state :final
|
7
|
-
|
8
|
-
event :close, :success => :success_callback do
|
9
|
-
transitions :from => [:open], :to => [:closed]
|
10
|
-
end
|
11
|
-
|
12
|
-
event :null do
|
13
|
-
transitions :from => [:open], :to => [:closed, :final], :guard => :always_false
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def always_false
|
18
|
-
false
|
19
|
-
end
|
20
|
-
|
21
|
-
def success_callback
|
22
|
-
end
|
23
|
-
|
24
|
-
def before_enter
|
25
|
-
end
|
26
|
-
def before_exit
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
class FooTwo < Foo
|
31
|
-
include AASM
|
32
|
-
aasm do
|
33
|
-
state :foo
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
class FooMultiple
|
38
|
-
include AASM
|
39
|
-
|
40
|
-
aasm(:left) do
|
41
|
-
state :open, :initial => true, :before_exit => :before_exit
|
42
|
-
state :closed, :before_enter => :before_enter
|
43
|
-
state :final
|
44
|
-
|
45
|
-
event :close, :success => :success_callback do
|
46
|
-
transitions :from => [:open], :to => [:closed]
|
47
|
-
end
|
48
|
-
|
49
|
-
event :null do
|
50
|
-
transitions :from => [:open], :to => [:closed, :final], :guard => :always_false
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
aasm(:right, :column => :right) do
|
55
|
-
state :green, :initial => true
|
56
|
-
state :yellow
|
57
|
-
state :red
|
58
|
-
|
59
|
-
event :green do
|
60
|
-
transitions :from => [:yellow], :to => :green
|
61
|
-
end
|
62
|
-
event :yellow do
|
63
|
-
transitions :from => [:green, :red], :to => :yellow
|
64
|
-
end
|
65
|
-
event :red do
|
66
|
-
transitions :from => [:yellow], :to => :red
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def always_false
|
71
|
-
false
|
72
|
-
end
|
73
|
-
|
74
|
-
def success_callback
|
75
|
-
end
|
76
|
-
|
77
|
-
def before_enter
|
78
|
-
end
|
79
|
-
def before_exit
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
class FooTwoMultiple < FooMultiple
|
84
|
-
include AASM
|
85
|
-
aasm(:left) do
|
86
|
-
state :foo
|
87
|
-
end
|
88
|
-
|
89
|
-
aasm(:right) do
|
90
|
-
state :bar
|
91
|
-
end
|
92
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
class FooCallbackMultiple
|
2
|
-
include AASM
|
3
|
-
|
4
|
-
aasm(:left) do
|
5
|
-
state :open, :initial => true, :before_exit => :before_exit
|
6
|
-
state :closed, :before_enter => :before_enter
|
7
|
-
state :final
|
8
|
-
|
9
|
-
event :close, :success => :success_callback do
|
10
|
-
transitions :from => [:open], :to => [:closed]
|
11
|
-
end
|
12
|
-
|
13
|
-
event :null do
|
14
|
-
transitions :from => [:open], :to => [:closed, :final], :guard => :always_false
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
aasm(:right, :column => :right) do
|
19
|
-
state :green, :initial => true
|
20
|
-
state :yellow
|
21
|
-
state :red
|
22
|
-
|
23
|
-
event :green do
|
24
|
-
transitions :from => [:yellow], :to => :green
|
25
|
-
end
|
26
|
-
event :yellow do
|
27
|
-
transitions :from => [:green, :red], :to => :yellow
|
28
|
-
end
|
29
|
-
event :red do
|
30
|
-
transitions :from => [:yellow], :to => :red
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def always_false
|
35
|
-
false
|
36
|
-
end
|
37
|
-
|
38
|
-
def success_callback
|
39
|
-
end
|
40
|
-
|
41
|
-
def before_enter
|
42
|
-
end
|
43
|
-
def before_exit
|
44
|
-
end
|
45
|
-
end
|