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.
Files changed (147) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +7 -2
  3. data/CHANGELOG.md +43 -2
  4. data/CODE_OF_CONDUCT.md +13 -0
  5. data/Gemfile +6 -3
  6. data/LICENSE +1 -1
  7. data/PLANNED_CHANGES.md +8 -4
  8. data/README.md +171 -14
  9. data/aasm.gemspec +1 -5
  10. data/gemfiles/rails_3.2.gemfile +3 -2
  11. data/gemfiles/rails_4.0.gemfile +2 -6
  12. data/gemfiles/rails_4.0_mongo_mapper.gemfile +14 -0
  13. data/gemfiles/rails_4.1.gemfile +2 -6
  14. data/gemfiles/rails_4.1_mongo_mapper.gemfile +14 -0
  15. data/gemfiles/rails_4.2.gemfile +1 -5
  16. data/gemfiles/rails_4.2_mongo_mapper.gemfile +14 -0
  17. data/gemfiles/rails_4.2_mongoid_5.gemfile +12 -0
  18. data/lib/aasm/aasm.rb +69 -36
  19. data/lib/aasm/base.rb +51 -21
  20. data/lib/aasm/core/event.rb +7 -6
  21. data/lib/aasm/core/state.rb +11 -8
  22. data/lib/aasm/core/transition.rb +7 -5
  23. data/lib/aasm/errors.rb +15 -1
  24. data/lib/aasm/instance_base.rb +17 -13
  25. data/lib/aasm/localizer.rb +1 -1
  26. data/lib/aasm/persistence/active_record_persistence.rb +63 -73
  27. data/lib/aasm/persistence/base.rb +55 -20
  28. data/lib/aasm/persistence/mongo_mapper_persistence.rb +157 -0
  29. data/lib/aasm/persistence/mongoid_persistence.rb +16 -41
  30. data/lib/aasm/persistence/plain_persistence.rb +8 -7
  31. data/lib/aasm/persistence/sequel_persistence.rb +12 -9
  32. data/lib/aasm/persistence.rb +2 -0
  33. data/lib/aasm/rspec/allow_event.rb +22 -0
  34. data/lib/aasm/rspec/allow_transition_to.rb +22 -0
  35. data/lib/aasm/rspec/have_state.rb +22 -0
  36. data/lib/aasm/rspec/transition_from.rb +32 -0
  37. data/lib/aasm/rspec.rb +5 -0
  38. data/lib/aasm/state_machine.rb +20 -6
  39. data/lib/aasm/version.rb +1 -1
  40. data/spec/database.rb +27 -1
  41. data/spec/models/active_record/basic_active_record_two_state_machines_example.rb +25 -0
  42. data/spec/models/active_record/complex_active_record_example.rb +33 -0
  43. data/spec/models/active_record/derivate_new_dsl.rb +7 -0
  44. data/spec/models/active_record/false_state.rb +35 -0
  45. data/spec/models/active_record/gate.rb +39 -0
  46. data/spec/models/active_record/localizer_test_model.rb +34 -0
  47. data/spec/models/active_record/no_direct_assignment.rb +21 -0
  48. data/spec/models/active_record/no_scope.rb +21 -0
  49. data/spec/models/active_record/persisted_state.rb +12 -0
  50. data/spec/models/active_record/provided_and_persisted_state.rb +24 -0
  51. data/spec/models/active_record/reader.rb +7 -0
  52. data/spec/models/active_record/readme_job.rb +21 -0
  53. data/spec/models/active_record/simple_new_dsl.rb +17 -0
  54. data/spec/models/active_record/thief.rb +29 -0
  55. data/spec/models/active_record/transient.rb +6 -0
  56. data/spec/models/active_record/with_enum.rb +39 -0
  57. data/spec/models/active_record/with_false_enum.rb +31 -0
  58. data/spec/models/active_record/with_true_enum.rb +39 -0
  59. data/spec/models/active_record/writer.rb +6 -0
  60. data/spec/models/basic_two_state_machines_example.rb +25 -0
  61. data/spec/models/callbacks/basic.rb +3 -0
  62. data/spec/models/callbacks/basic_multiple.rb +75 -0
  63. data/spec/models/callbacks/guard_within_block_multiple.rb +66 -0
  64. data/spec/models/callbacks/multiple_transitions_transition_guard_multiple.rb +65 -0
  65. data/spec/models/callbacks/private_method_multiple.rb +44 -0
  66. data/spec/models/callbacks/with_args.rb +9 -9
  67. data/spec/models/callbacks/with_args_multiple.rb +61 -0
  68. data/spec/models/callbacks/{with_state_args.rb → with_state_arg.rb} +1 -1
  69. data/spec/models/callbacks/with_state_arg_multiple.rb +26 -0
  70. data/spec/models/complex_example.rb +222 -0
  71. data/spec/models/conversation.rb +47 -1
  72. data/spec/models/default_state.rb +12 -0
  73. data/spec/models/foo.rb +57 -0
  74. data/spec/models/foo_callback_multiple.rb +45 -0
  75. data/spec/models/guardian.rb +10 -0
  76. data/spec/models/guardian_multiple.rb +48 -0
  77. data/spec/models/initial_state_proc.rb +31 -0
  78. data/spec/models/invalid_persistor.rb +15 -0
  79. data/spec/models/mongo_mapper/complex_mongo_mapper_example.rb +37 -0
  80. data/spec/models/mongo_mapper/no_scope_mongo_mapper.rb +21 -0
  81. data/spec/models/mongo_mapper/simple_mongo_mapper.rb +23 -0
  82. data/spec/models/mongo_mapper/simple_new_dsl_mongo_mapper.rb +25 -0
  83. data/spec/models/mongoid/complex_mongoid_example.rb +37 -0
  84. data/spec/models/mongoid/no_scope_mongoid.rb +11 -0
  85. data/spec/models/mongoid/simple_mongoid.rb +12 -0
  86. data/spec/models/mongoid/simple_new_dsl_mongoid.rb +14 -1
  87. data/spec/models/no_initial_state.rb +25 -0
  88. data/spec/models/parametrised_event.rb +1 -1
  89. data/spec/models/parametrised_event_multiple.rb +29 -0
  90. data/spec/models/provided_state.rb +24 -0
  91. data/spec/models/sequel/complex_sequel_example.rb +45 -0
  92. data/spec/models/sequel/sequel_multiple.rb +25 -0
  93. data/spec/models/sequel/sequel_simple.rb +25 -0
  94. data/spec/models/silencer.rb +5 -0
  95. data/spec/models/simple_example.rb +15 -0
  96. data/spec/models/simple_multiple_example.rb +30 -0
  97. data/spec/models/state_machine_with_failed_event.rb +12 -0
  98. data/spec/models/sub_class.rb +7 -0
  99. data/spec/models/sub_class_with_more_states.rb +18 -0
  100. data/spec/models/super_class.rb +46 -0
  101. data/spec/models/transactor.rb +27 -0
  102. data/spec/models/valid_state_name.rb +23 -0
  103. data/spec/models/validator.rb +47 -0
  104. data/spec/spec_helper.rb +4 -4
  105. data/spec/unit/api_spec.rb +6 -1
  106. data/spec/unit/basic_two_state_machines_example_spec.rb +10 -0
  107. data/spec/unit/callback_multiple_spec.rb +295 -0
  108. data/spec/unit/callbacks_spec.rb +3 -2
  109. data/spec/unit/complex_example_spec.rb +2 -2
  110. data/spec/unit/complex_multiple_example_spec.rb +99 -0
  111. data/spec/unit/edge_cases_spec.rb +16 -0
  112. data/spec/unit/event_multiple_spec.rb +73 -0
  113. data/spec/unit/event_naming_spec.rb +2 -15
  114. data/spec/unit/event_spec.rb +11 -6
  115. data/spec/unit/guard_multiple_spec.rb +60 -0
  116. data/spec/unit/guard_spec.rb +12 -0
  117. data/spec/unit/initial_state_multiple_spec.rb +15 -0
  118. data/spec/unit/initial_state_spec.rb +3 -18
  119. data/spec/unit/inspection_multiple_spec.rb +201 -0
  120. data/spec/unit/inspection_spec.rb +12 -7
  121. data/spec/unit/localizer_spec.rb +0 -38
  122. data/spec/unit/persistence/active_record_persistence_multiple_spec.rb +573 -0
  123. data/spec/unit/persistence/active_record_persistence_spec.rb +70 -13
  124. data/spec/unit/persistence/mongo_mapper_persistence_multiple_spec.rb +146 -0
  125. data/spec/unit/persistence/mongo_mapper_persistence_spec.rb +93 -0
  126. data/spec/unit/persistence/mongoid_persistence_multiple_spec.rb +127 -0
  127. data/spec/unit/persistence/mongoid_persistence_spec.rb +79 -0
  128. data/spec/unit/persistence/sequel_persistence_multiple_spec.rb +153 -0
  129. data/spec/unit/persistence/sequel_persistence_spec.rb +20 -23
  130. data/spec/unit/readme_spec.rb +42 -0
  131. data/spec/unit/reloading_spec.rb +1 -1
  132. data/spec/unit/rspec_matcher_spec.rb +79 -0
  133. data/spec/unit/simple_example_spec.rb +26 -42
  134. data/spec/unit/simple_multiple_example_spec.rb +63 -0
  135. data/spec/unit/state_spec.rb +3 -1
  136. data/spec/unit/subclassing_multiple_spec.rb +39 -0
  137. data/spec/unit/subclassing_spec.rb +10 -10
  138. data/spec/unit/transition_spec.rb +39 -25
  139. metadata +152 -23
  140. data/spec/models/active_record/api.rb +0 -75
  141. data/spec/models/argument.rb +0 -11
  142. data/spec/models/auth_machine.rb +0 -88
  143. data/spec/models/bar.rb +0 -15
  144. data/spec/models/father.rb +0 -21
  145. data/spec/models/persistence.rb +0 -164
  146. data/spec/models/son.rb +0 -3
  147. data/spec/unit/persistence/mongoid_persistance_spec.rb +0 -152
@@ -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
@@ -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
@@ -18,7 +18,7 @@ class ParametrisedEvent
18
18
  end
19
19
  end
20
20
 
21
- def wear_clothes(shirt_color, trouser_type)
21
+ def wear_clothes(shirt_color, trouser_type=nil)
22
22
  end
23
23
 
24
24
  def condition_hair
@@ -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