aasm 4.0.8 → 4.5.2
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 +4 -4
- data/.travis.yml +7 -2
- data/CHANGELOG.md +43 -2
- data/CODE_OF_CONDUCT.md +13 -0
- data/Gemfile +6 -3
- data/LICENSE +1 -1
- data/PLANNED_CHANGES.md +8 -4
- data/README.md +171 -14
- data/aasm.gemspec +1 -5
- data/gemfiles/rails_3.2.gemfile +3 -2
- data/gemfiles/rails_4.0.gemfile +2 -6
- data/gemfiles/rails_4.0_mongo_mapper.gemfile +14 -0
- data/gemfiles/rails_4.1.gemfile +2 -6
- data/gemfiles/rails_4.1_mongo_mapper.gemfile +14 -0
- data/gemfiles/rails_4.2.gemfile +1 -5
- data/gemfiles/rails_4.2_mongo_mapper.gemfile +14 -0
- data/gemfiles/rails_4.2_mongoid_5.gemfile +12 -0
- data/lib/aasm/aasm.rb +69 -36
- data/lib/aasm/base.rb +51 -21
- data/lib/aasm/core/event.rb +7 -6
- data/lib/aasm/core/state.rb +11 -8
- data/lib/aasm/core/transition.rb +7 -5
- data/lib/aasm/errors.rb +15 -1
- data/lib/aasm/instance_base.rb +17 -13
- data/lib/aasm/localizer.rb +1 -1
- data/lib/aasm/persistence/active_record_persistence.rb +63 -73
- data/lib/aasm/persistence/base.rb +55 -20
- data/lib/aasm/persistence/mongo_mapper_persistence.rb +157 -0
- data/lib/aasm/persistence/mongoid_persistence.rb +16 -41
- data/lib/aasm/persistence/plain_persistence.rb +8 -7
- data/lib/aasm/persistence/sequel_persistence.rb +12 -9
- data/lib/aasm/persistence.rb +2 -0
- data/lib/aasm/rspec/allow_event.rb +22 -0
- data/lib/aasm/rspec/allow_transition_to.rb +22 -0
- data/lib/aasm/rspec/have_state.rb +22 -0
- data/lib/aasm/rspec/transition_from.rb +32 -0
- data/lib/aasm/rspec.rb +5 -0
- data/lib/aasm/state_machine.rb +20 -6
- data/lib/aasm/version.rb +1 -1
- data/spec/database.rb +27 -1
- data/spec/models/active_record/basic_active_record_two_state_machines_example.rb +25 -0
- data/spec/models/active_record/complex_active_record_example.rb +33 -0
- data/spec/models/active_record/derivate_new_dsl.rb +7 -0
- data/spec/models/active_record/false_state.rb +35 -0
- data/spec/models/active_record/gate.rb +39 -0
- data/spec/models/active_record/localizer_test_model.rb +34 -0
- data/spec/models/active_record/no_direct_assignment.rb +21 -0
- data/spec/models/active_record/no_scope.rb +21 -0
- data/spec/models/active_record/persisted_state.rb +12 -0
- data/spec/models/active_record/provided_and_persisted_state.rb +24 -0
- data/spec/models/active_record/reader.rb +7 -0
- data/spec/models/active_record/readme_job.rb +21 -0
- data/spec/models/active_record/simple_new_dsl.rb +17 -0
- data/spec/models/active_record/thief.rb +29 -0
- data/spec/models/active_record/transient.rb +6 -0
- data/spec/models/active_record/with_enum.rb +39 -0
- data/spec/models/active_record/with_false_enum.rb +31 -0
- data/spec/models/active_record/with_true_enum.rb +39 -0
- data/spec/models/active_record/writer.rb +6 -0
- data/spec/models/basic_two_state_machines_example.rb +25 -0
- data/spec/models/callbacks/basic.rb +3 -0
- data/spec/models/callbacks/basic_multiple.rb +75 -0
- data/spec/models/callbacks/guard_within_block_multiple.rb +66 -0
- data/spec/models/callbacks/multiple_transitions_transition_guard_multiple.rb +65 -0
- data/spec/models/callbacks/private_method_multiple.rb +44 -0
- data/spec/models/callbacks/with_args.rb +9 -9
- data/spec/models/callbacks/with_args_multiple.rb +61 -0
- data/spec/models/callbacks/{with_state_args.rb → with_state_arg.rb} +1 -1
- data/spec/models/callbacks/with_state_arg_multiple.rb +26 -0
- data/spec/models/complex_example.rb +222 -0
- data/spec/models/conversation.rb +47 -1
- data/spec/models/default_state.rb +12 -0
- data/spec/models/foo.rb +57 -0
- data/spec/models/foo_callback_multiple.rb +45 -0
- data/spec/models/guardian.rb +10 -0
- data/spec/models/guardian_multiple.rb +48 -0
- data/spec/models/initial_state_proc.rb +31 -0
- data/spec/models/invalid_persistor.rb +15 -0
- data/spec/models/mongo_mapper/complex_mongo_mapper_example.rb +37 -0
- data/spec/models/mongo_mapper/no_scope_mongo_mapper.rb +21 -0
- data/spec/models/mongo_mapper/simple_mongo_mapper.rb +23 -0
- data/spec/models/mongo_mapper/simple_new_dsl_mongo_mapper.rb +25 -0
- data/spec/models/mongoid/complex_mongoid_example.rb +37 -0
- data/spec/models/mongoid/no_scope_mongoid.rb +11 -0
- data/spec/models/mongoid/simple_mongoid.rb +12 -0
- data/spec/models/mongoid/simple_new_dsl_mongoid.rb +14 -1
- data/spec/models/no_initial_state.rb +25 -0
- data/spec/models/parametrised_event.rb +1 -1
- data/spec/models/parametrised_event_multiple.rb +29 -0
- data/spec/models/provided_state.rb +24 -0
- data/spec/models/sequel/complex_sequel_example.rb +45 -0
- data/spec/models/sequel/sequel_multiple.rb +25 -0
- data/spec/models/sequel/sequel_simple.rb +25 -0
- data/spec/models/silencer.rb +5 -0
- data/spec/models/simple_example.rb +15 -0
- data/spec/models/simple_multiple_example.rb +30 -0
- data/spec/models/state_machine_with_failed_event.rb +12 -0
- data/spec/models/sub_class.rb +7 -0
- data/spec/models/sub_class_with_more_states.rb +18 -0
- data/spec/models/super_class.rb +46 -0
- data/spec/models/transactor.rb +27 -0
- data/spec/models/valid_state_name.rb +23 -0
- data/spec/models/validator.rb +47 -0
- data/spec/spec_helper.rb +4 -4
- data/spec/unit/api_spec.rb +6 -1
- data/spec/unit/basic_two_state_machines_example_spec.rb +10 -0
- data/spec/unit/callback_multiple_spec.rb +295 -0
- data/spec/unit/callbacks_spec.rb +3 -2
- data/spec/unit/complex_example_spec.rb +2 -2
- data/spec/unit/complex_multiple_example_spec.rb +99 -0
- data/spec/unit/edge_cases_spec.rb +16 -0
- data/spec/unit/event_multiple_spec.rb +73 -0
- data/spec/unit/event_naming_spec.rb +2 -15
- data/spec/unit/event_spec.rb +11 -6
- data/spec/unit/guard_multiple_spec.rb +60 -0
- data/spec/unit/guard_spec.rb +12 -0
- data/spec/unit/initial_state_multiple_spec.rb +15 -0
- data/spec/unit/initial_state_spec.rb +3 -18
- data/spec/unit/inspection_multiple_spec.rb +201 -0
- data/spec/unit/inspection_spec.rb +12 -7
- data/spec/unit/localizer_spec.rb +0 -38
- data/spec/unit/persistence/active_record_persistence_multiple_spec.rb +573 -0
- data/spec/unit/persistence/active_record_persistence_spec.rb +70 -13
- data/spec/unit/persistence/mongo_mapper_persistence_multiple_spec.rb +146 -0
- data/spec/unit/persistence/mongo_mapper_persistence_spec.rb +93 -0
- data/spec/unit/persistence/mongoid_persistence_multiple_spec.rb +127 -0
- data/spec/unit/persistence/mongoid_persistence_spec.rb +79 -0
- data/spec/unit/persistence/sequel_persistence_multiple_spec.rb +153 -0
- data/spec/unit/persistence/sequel_persistence_spec.rb +20 -23
- data/spec/unit/readme_spec.rb +42 -0
- data/spec/unit/reloading_spec.rb +1 -1
- data/spec/unit/rspec_matcher_spec.rb +79 -0
- data/spec/unit/simple_example_spec.rb +26 -42
- data/spec/unit/simple_multiple_example_spec.rb +63 -0
- data/spec/unit/state_spec.rb +3 -1
- data/spec/unit/subclassing_multiple_spec.rb +39 -0
- data/spec/unit/subclassing_spec.rb +10 -10
- data/spec/unit/transition_spec.rb +39 -25
- metadata +152 -23
- data/spec/models/active_record/api.rb +0 -75
- data/spec/models/argument.rb +0 -11
- data/spec/models/auth_machine.rb +0 -88
- data/spec/models/bar.rb +0 -15
- data/spec/models/father.rb +0 -21
- data/spec/models/persistence.rb +0 -164
- data/spec/models/son.rb +0 -3
- data/spec/unit/persistence/mongoid_persistance_spec.rb +0 -152
data/spec/models/conversation.rb
CHANGED
|
@@ -34,8 +34,8 @@ class Conversation
|
|
|
34
34
|
@persister = persister
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
-
|
|
38
37
|
private
|
|
38
|
+
|
|
39
39
|
def aasm_read_state
|
|
40
40
|
@persister.read_state
|
|
41
41
|
end
|
|
@@ -43,5 +43,51 @@ class Conversation
|
|
|
43
43
|
def aasm_write_state(state)
|
|
44
44
|
@persister.write_state(state)
|
|
45
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
|
|
46
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
|
|
47
93
|
end
|
|
@@ -0,0 +1,12 @@
|
|
|
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
|
data/spec/models/foo.rb
CHANGED
|
@@ -33,3 +33,60 @@ class FooTwo < Foo
|
|
|
33
33
|
state :foo
|
|
34
34
|
end
|
|
35
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
|
|
@@ -0,0 +1,45 @@
|
|
|
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
|
data/spec/models/guardian.rb
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
class Guardian
|
|
2
2
|
include AASM
|
|
3
3
|
|
|
4
|
+
def inner_guard(options={})
|
|
5
|
+
end
|
|
6
|
+
|
|
4
7
|
aasm do
|
|
5
8
|
state :alpha, :initial => true
|
|
6
9
|
state :beta
|
|
@@ -12,6 +15,13 @@ class Guardian
|
|
|
12
15
|
transitions :from => :alpha, :to => :beta, :guard => :fail
|
|
13
16
|
end
|
|
14
17
|
|
|
18
|
+
event :use_proc_guard_with_params do
|
|
19
|
+
transitions :from => :alpha, :to => :beta, :guard => Proc.new { |options={}| inner_guard(options) }
|
|
20
|
+
end
|
|
21
|
+
event :use_lambda_guard_with_params do
|
|
22
|
+
transitions :from => :alpha, :to => :beta, :guard => lambda { |options={}| inner_guard(options) }
|
|
23
|
+
end
|
|
24
|
+
|
|
15
25
|
event :use_guards_that_succeed do
|
|
16
26
|
transitions :from => :alpha, :to => :beta, :guards => [:succeed, :another_succeed]
|
|
17
27
|
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
class GuardianMultiple
|
|
2
|
+
include AASM
|
|
3
|
+
|
|
4
|
+
aasm(:left) do
|
|
5
|
+
state :alpha, :initial => true
|
|
6
|
+
state :beta
|
|
7
|
+
|
|
8
|
+
event :use_one_guard_that_succeeds do
|
|
9
|
+
transitions :from => :alpha, :to => :beta, :guard => :succeed
|
|
10
|
+
end
|
|
11
|
+
event :use_one_guard_that_fails do
|
|
12
|
+
transitions :from => :alpha, :to => :beta, :guard => :fail
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
event :use_guards_that_succeed do
|
|
16
|
+
transitions :from => :alpha, :to => :beta, :guards => [:succeed, :another_succeed]
|
|
17
|
+
end
|
|
18
|
+
event :use_guards_where_the_first_fails do
|
|
19
|
+
transitions :from => :alpha, :to => :beta, :guards => [:succeed, :fail]
|
|
20
|
+
end
|
|
21
|
+
event :use_guards_where_the_second_fails do
|
|
22
|
+
transitions :from => :alpha, :to => :beta, :guards => [:fail, :succeed]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
event :use_event_guards_that_succeed, :guards => [:succeed, :another_succeed] do
|
|
26
|
+
transitions :from => :alpha, :to => :beta
|
|
27
|
+
end
|
|
28
|
+
event :use_event_and_transition_guards_that_succeed, :guards => [:succeed, :another_succeed] do
|
|
29
|
+
transitions :from => :alpha, :to => :beta, :guards => [:more_succeed]
|
|
30
|
+
end
|
|
31
|
+
event :use_event_guards_where_the_first_fails, :guards => [:succeed, :fail] do
|
|
32
|
+
transitions :from => :alpha, :to => :beta
|
|
33
|
+
end
|
|
34
|
+
event :use_event_guards_where_the_second_fails, :guards => [:fail, :succeed] do
|
|
35
|
+
transitions :from => :alpha, :to => :beta, :guard => :another_succeed
|
|
36
|
+
end
|
|
37
|
+
event :use_event_and_transition_guards_where_third_fails, :guards => [:succeed, :another_succeed] do
|
|
38
|
+
transitions :from => :alpha, :to => :beta, :guards => [:fail]
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def fail; false; end
|
|
43
|
+
|
|
44
|
+
def succeed; true; end
|
|
45
|
+
def another_succeed; true; end
|
|
46
|
+
def more_succeed; true; end
|
|
47
|
+
|
|
48
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
class InitialStateProc
|
|
2
|
+
RICH = 1_000_000
|
|
3
|
+
|
|
4
|
+
attr_accessor :balance
|
|
5
|
+
|
|
6
|
+
include AASM
|
|
7
|
+
aasm do
|
|
8
|
+
state :retired
|
|
9
|
+
state :selling_bad_mortgages
|
|
10
|
+
initial_state Proc.new { |banker| banker.rich? ? :retired : :selling_bad_mortgages }
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def initialize(balance = 0); self.balance = balance; end
|
|
14
|
+
def rich?; self.balance >= RICH; end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class InitialStateProcMultiple
|
|
18
|
+
RICH = 1_000_000
|
|
19
|
+
|
|
20
|
+
attr_accessor :balance
|
|
21
|
+
|
|
22
|
+
include AASM
|
|
23
|
+
aasm(:left) do
|
|
24
|
+
state :retired
|
|
25
|
+
state :selling_bad_mortgages
|
|
26
|
+
initial_state Proc.new { |banker| banker.rich? ? :retired : :selling_bad_mortgages }
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def initialize(balance = 0); self.balance = balance; end
|
|
30
|
+
def rich?; self.balance >= RICH; end
|
|
31
|
+
end
|
|
@@ -14,3 +14,18 @@ class InvalidPersistor < ActiveRecord::Base
|
|
|
14
14
|
end
|
|
15
15
|
validates_presence_of :name
|
|
16
16
|
end
|
|
17
|
+
|
|
18
|
+
class MultipleInvalidPersistor < ActiveRecord::Base
|
|
19
|
+
include AASM
|
|
20
|
+
aasm :left, :column => :status, :skip_validation_on_save => true do
|
|
21
|
+
state :sleeping, :initial => true
|
|
22
|
+
state :running
|
|
23
|
+
event :run do
|
|
24
|
+
transitions :to => :running, :from => :sleeping
|
|
25
|
+
end
|
|
26
|
+
event :sleep do
|
|
27
|
+
transitions :to => :sleeping, :from => :running
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
validates_presence_of :name
|
|
31
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
class ComplexMongoMapperExample
|
|
2
|
+
include MongoMapper::Document
|
|
3
|
+
include AASM
|
|
4
|
+
|
|
5
|
+
key :left, String
|
|
6
|
+
key :right, String
|
|
7
|
+
|
|
8
|
+
aasm :left, :column => 'left' do
|
|
9
|
+
state :one, :initial => true
|
|
10
|
+
state :two
|
|
11
|
+
state :three
|
|
12
|
+
|
|
13
|
+
event :increment do
|
|
14
|
+
transitions :from => :one, :to => :two
|
|
15
|
+
transitions :from => :two, :to => :three
|
|
16
|
+
end
|
|
17
|
+
event :reset do
|
|
18
|
+
transitions :from => :three, :to => :one
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
aasm :right, :column => 'right' do
|
|
23
|
+
state :alpha, :initial => true
|
|
24
|
+
state :beta
|
|
25
|
+
state :gamma
|
|
26
|
+
|
|
27
|
+
event :level_up do
|
|
28
|
+
transitions :from => :alpha, :to => :beta
|
|
29
|
+
transitions :from => :beta, :to => :gamma
|
|
30
|
+
end
|
|
31
|
+
event :level_down do
|
|
32
|
+
transitions :from => :gamma, :to => :beta
|
|
33
|
+
transitions :from => :beta, :to => :alpha
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
class NoScopeMongoMapper
|
|
2
|
+
include MongoMapper::Document
|
|
3
|
+
include AASM
|
|
4
|
+
|
|
5
|
+
key :status, String
|
|
6
|
+
|
|
7
|
+
aasm :create_scopes => false, :column => :status do
|
|
8
|
+
state :ignored_scope
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
class NoScopeMongoMapperMultiple
|
|
13
|
+
include MongoMapper::Document
|
|
14
|
+
include AASM
|
|
15
|
+
|
|
16
|
+
key :status, String
|
|
17
|
+
|
|
18
|
+
aasm :left, :create_scopes => false, :column => :status do
|
|
19
|
+
state :ignored_scope
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
class SimpleMongoMapper
|
|
2
|
+
include MongoMapper::Document
|
|
3
|
+
include AASM
|
|
4
|
+
|
|
5
|
+
key :status, String
|
|
6
|
+
|
|
7
|
+
aasm column: :status do
|
|
8
|
+
state :unknown_scope
|
|
9
|
+
state :next
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
class SimpleMongoMapperMultiple
|
|
14
|
+
include MongoMapper::Document
|
|
15
|
+
include AASM
|
|
16
|
+
|
|
17
|
+
key :status, String
|
|
18
|
+
|
|
19
|
+
aasm :left, column: :status do
|
|
20
|
+
state :unknown_scope
|
|
21
|
+
state :next
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
class SimpleNewDslMongoMapper
|
|
2
|
+
include MongoMapper::Document
|
|
3
|
+
include AASM
|
|
4
|
+
|
|
5
|
+
key :status, String
|
|
6
|
+
|
|
7
|
+
aasm :column => :status
|
|
8
|
+
aasm do
|
|
9
|
+
state :unknown_scope
|
|
10
|
+
state :next
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
class SimpleNewDslMongoMapperMultiple
|
|
15
|
+
include MongoMapper::Document
|
|
16
|
+
include AASM
|
|
17
|
+
|
|
18
|
+
key :status, String
|
|
19
|
+
|
|
20
|
+
aasm :left, :column => :status
|
|
21
|
+
aasm :left do
|
|
22
|
+
state :unknown_scope
|
|
23
|
+
state :next
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
class ComplexMongoidExample
|
|
2
|
+
include Mongoid::Document
|
|
3
|
+
include AASM
|
|
4
|
+
|
|
5
|
+
field :left, :type => String
|
|
6
|
+
field :right, :type => String
|
|
7
|
+
|
|
8
|
+
aasm :left, :column => 'left' do
|
|
9
|
+
state :one, :initial => true
|
|
10
|
+
state :two
|
|
11
|
+
state :three
|
|
12
|
+
|
|
13
|
+
event :increment do
|
|
14
|
+
transitions :from => :one, :to => :two
|
|
15
|
+
transitions :from => :two, :to => :three
|
|
16
|
+
end
|
|
17
|
+
event :reset do
|
|
18
|
+
transitions :from => :three, :to => :one
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
aasm :right, :column => 'right' do
|
|
23
|
+
state :alpha, :initial => true
|
|
24
|
+
state :beta
|
|
25
|
+
state :gamma
|
|
26
|
+
|
|
27
|
+
event :level_up do
|
|
28
|
+
transitions :from => :alpha, :to => :beta
|
|
29
|
+
transitions :from => :beta, :to => :gamma
|
|
30
|
+
end
|
|
31
|
+
event :level_down do
|
|
32
|
+
transitions :from => :gamma, :to => :beta
|
|
33
|
+
transitions :from => :beta, :to => :alpha
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
@@ -8,3 +8,14 @@ class NoScopeMongoid
|
|
|
8
8
|
state :ignored_scope
|
|
9
9
|
end
|
|
10
10
|
end
|
|
11
|
+
|
|
12
|
+
class NoScopeMongoidMultiple
|
|
13
|
+
include Mongoid::Document
|
|
14
|
+
include AASM
|
|
15
|
+
|
|
16
|
+
field :status, :type => String
|
|
17
|
+
|
|
18
|
+
aasm :left, :create_scopes => false, :column => :status do
|
|
19
|
+
state :ignored_scope
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -9,3 +9,15 @@ class SimpleMongoid
|
|
|
9
9
|
state :new
|
|
10
10
|
end
|
|
11
11
|
end
|
|
12
|
+
|
|
13
|
+
class SimpleMongoidMultiple
|
|
14
|
+
include Mongoid::Document
|
|
15
|
+
include AASM
|
|
16
|
+
|
|
17
|
+
field :status, :type => String
|
|
18
|
+
|
|
19
|
+
aasm :left, column: :status do
|
|
20
|
+
state :unknown_scope
|
|
21
|
+
state :new
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -6,7 +6,20 @@ class SimpleNewDslMongoid
|
|
|
6
6
|
|
|
7
7
|
aasm :column => :status
|
|
8
8
|
aasm do
|
|
9
|
-
state :unknown_scope
|
|
9
|
+
state :unknown_scope, :initial => true
|
|
10
|
+
state :new
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
class SimpleNewDslMongoidMultiple
|
|
15
|
+
include Mongoid::Document
|
|
16
|
+
include AASM
|
|
17
|
+
|
|
18
|
+
field :status, :type => String
|
|
19
|
+
|
|
20
|
+
aasm :left, :column => :status
|
|
21
|
+
aasm :left do
|
|
22
|
+
state :unknown_scope, :initial => true
|
|
10
23
|
state :new
|
|
11
24
|
end
|
|
12
25
|
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
class NoInitialState
|
|
2
|
+
include AASM
|
|
3
|
+
|
|
4
|
+
aasm do
|
|
5
|
+
state :read
|
|
6
|
+
state :ended
|
|
7
|
+
|
|
8
|
+
event :foo do
|
|
9
|
+
transitions :to => :ended, :from => [:read]
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
class NoInitialStateMultiple
|
|
15
|
+
include AASM
|
|
16
|
+
|
|
17
|
+
aasm(:left) do
|
|
18
|
+
state :read
|
|
19
|
+
state :ended
|
|
20
|
+
|
|
21
|
+
event :foo do
|
|
22
|
+
transitions :to => :ended, :from => [:read]
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
class ParametrisedEventMultiple
|
|
2
|
+
include AASM
|
|
3
|
+
aasm(:left) do
|
|
4
|
+
state :sleeping, :initial => true
|
|
5
|
+
state :showering
|
|
6
|
+
state :working
|
|
7
|
+
state :dating
|
|
8
|
+
state :prettying_up
|
|
9
|
+
|
|
10
|
+
event :wakeup do
|
|
11
|
+
transitions :from => :sleeping, :to => [:showering, :working]
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
event :dress do
|
|
15
|
+
transitions :from => :sleeping, :to => :working, :after => :wear_clothes
|
|
16
|
+
transitions :from => :showering, :to => [:working, :dating], :after => Proc.new { |*args| wear_clothes(*args) }
|
|
17
|
+
transitions :from => :showering, :to => :prettying_up, :after => [:condition_hair, :fix_hair]
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def wear_clothes(shirt_color, trouser_type=nil)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def condition_hair
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def fix_hair
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
class ProvidedState
|
|
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
|
+
|
|
13
|
+
def aasm_read_state(*args)
|
|
14
|
+
:beta
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def aasm_write_state(new_state, *args)
|
|
18
|
+
@persisted_store = new_state
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def aasm_write_state_without_persistence(new_state, *args)
|
|
22
|
+
@transient_store = new_state
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
db = Sequel.connect(SEQUEL_DB)
|
|
2
|
+
|
|
3
|
+
# if you want to see the statements while running the spec enable the following line
|
|
4
|
+
# db.loggers << Logger.new($stderr)
|
|
5
|
+
db.create_table(:complex_sequel_examples) do
|
|
6
|
+
primary_key :id
|
|
7
|
+
String :left
|
|
8
|
+
String :right
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class ComplexSequelExample < Sequel::Model(db)
|
|
12
|
+
set_dataset(:complex_sequel_examples)
|
|
13
|
+
|
|
14
|
+
include AASM
|
|
15
|
+
|
|
16
|
+
aasm :left, :column => 'left' do
|
|
17
|
+
state :one, :initial => true
|
|
18
|
+
state :two
|
|
19
|
+
state :three
|
|
20
|
+
|
|
21
|
+
event :increment do
|
|
22
|
+
transitions :from => :one, :to => :two
|
|
23
|
+
transitions :from => :two, :to => :three
|
|
24
|
+
end
|
|
25
|
+
event :reset do
|
|
26
|
+
transitions :from => :three, :to => :one
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
aasm :right, :column => 'right' do
|
|
31
|
+
state :alpha, :initial => true
|
|
32
|
+
state :beta
|
|
33
|
+
state :gamma
|
|
34
|
+
|
|
35
|
+
event :level_up do
|
|
36
|
+
transitions :from => :alpha, :to => :beta
|
|
37
|
+
transitions :from => :beta, :to => :gamma
|
|
38
|
+
end
|
|
39
|
+
event :level_down do
|
|
40
|
+
transitions :from => :gamma, :to => :beta
|
|
41
|
+
transitions :from => :beta, :to => :alpha
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
db = Sequel.connect(SEQUEL_DB)
|
|
2
|
+
|
|
3
|
+
# if you want to see the statements while running the spec enable the following line
|
|
4
|
+
# db.loggers << Logger.new($stderr)
|
|
5
|
+
db.create_table(:multiples) do
|
|
6
|
+
primary_key :id
|
|
7
|
+
String :status
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
class SequelMultiple < Sequel::Model(db)
|
|
11
|
+
set_dataset(:multiples)
|
|
12
|
+
include AASM
|
|
13
|
+
|
|
14
|
+
attr_accessor :default
|
|
15
|
+
|
|
16
|
+
aasm :left, :column => :status
|
|
17
|
+
aasm :left do
|
|
18
|
+
state :alpha, :initial => true
|
|
19
|
+
state :beta
|
|
20
|
+
state :gamma
|
|
21
|
+
event :release do
|
|
22
|
+
transitions :from => [:alpha, :beta, :gamma], :to => :beta
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
db = Sequel.connect(SEQUEL_DB)
|
|
2
|
+
|
|
3
|
+
# if you want to see the statements while running the spec enable the following line
|
|
4
|
+
# db.loggers << Logger.new($stderr)
|
|
5
|
+
db.create_table(:simples) do
|
|
6
|
+
primary_key :id
|
|
7
|
+
String :status
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
class SequelSimple < Sequel::Model(db)
|
|
11
|
+
set_dataset(:simples)
|
|
12
|
+
include AASM
|
|
13
|
+
|
|
14
|
+
attr_accessor :default
|
|
15
|
+
|
|
16
|
+
aasm :column => :status
|
|
17
|
+
aasm do
|
|
18
|
+
state :alpha, :initial => true
|
|
19
|
+
state :beta
|
|
20
|
+
state :gamma
|
|
21
|
+
event :release do
|
|
22
|
+
transitions :from => [:alpha, :beta, :gamma], :to => :beta
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|