aasm 4.12.2 → 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.
Files changed (218) hide show
  1. checksums.yaml +5 -5
  2. data/LICENSE +1 -1
  3. data/README.md +393 -116
  4. data/lib/aasm/aasm.rb +30 -27
  5. data/lib/aasm/base.rb +64 -11
  6. data/lib/aasm/configuration.rb +6 -0
  7. data/lib/aasm/core/event.rb +26 -30
  8. data/lib/aasm/core/invoker.rb +129 -0
  9. data/lib/aasm/core/invokers/base_invoker.rb +75 -0
  10. data/lib/aasm/core/invokers/class_invoker.rb +52 -0
  11. data/lib/aasm/core/invokers/literal_invoker.rb +49 -0
  12. data/lib/aasm/core/invokers/proc_invoker.rb +59 -0
  13. data/lib/aasm/core/state.rb +16 -14
  14. data/lib/aasm/core/transition.rb +8 -69
  15. data/lib/aasm/dsl_helper.rb +24 -22
  16. data/lib/aasm/errors.rb +5 -3
  17. data/lib/aasm/instance_base.rb +34 -3
  18. data/lib/aasm/localizer.rb +13 -3
  19. data/lib/aasm/persistence/active_record_persistence.rb +25 -5
  20. data/lib/aasm/persistence/base.rb +14 -3
  21. data/lib/aasm/persistence/core_data_query_persistence.rb +2 -1
  22. data/lib/aasm/persistence/dynamoid_persistence.rb +1 -1
  23. data/lib/aasm/persistence/mongoid_persistence.rb +1 -1
  24. data/lib/aasm/persistence/no_brainer_persistence.rb +105 -0
  25. data/lib/aasm/persistence/orm.rb +26 -14
  26. data/lib/aasm/persistence/plain_persistence.rb +2 -1
  27. data/lib/aasm/persistence/redis_persistence.rb +1 -1
  28. data/lib/aasm/persistence/sequel_persistence.rb +0 -1
  29. data/lib/aasm/persistence.rb +3 -0
  30. data/lib/aasm/rspec/allow_event.rb +5 -1
  31. data/lib/aasm/rspec/allow_transition_to.rb +5 -1
  32. data/lib/aasm/rspec/transition_from.rb +5 -1
  33. data/lib/aasm/version.rb +1 -1
  34. data/lib/aasm.rb +5 -2
  35. data/lib/generators/aasm/orm_helpers.rb +7 -1
  36. data/lib/generators/active_record/aasm_generator.rb +3 -1
  37. data/lib/generators/active_record/templates/migration.rb +1 -1
  38. data/lib/generators/nobrainer/aasm_generator.rb +28 -0
  39. data/lib/motion-aasm.rb +1 -0
  40. metadata +42 -343
  41. data/.document +0 -6
  42. data/.gitignore +0 -20
  43. data/.travis.yml +0 -52
  44. data/API +0 -34
  45. data/Appraisals +0 -43
  46. data/CHANGELOG.md +0 -365
  47. data/CODE_OF_CONDUCT.md +0 -13
  48. data/CONTRIBUTING.md +0 -24
  49. data/Gemfile +0 -7
  50. data/HOWTO +0 -12
  51. data/PLANNED_CHANGES.md +0 -11
  52. data/README_FROM_VERSION_3_TO_4.md +0 -240
  53. data/Rakefile +0 -31
  54. data/TESTING.md +0 -25
  55. data/aasm.gemspec +0 -35
  56. data/callbacks.txt +0 -51
  57. data/gemfiles/rails_3.2.gemfile +0 -13
  58. data/gemfiles/rails_4.0.gemfile +0 -15
  59. data/gemfiles/rails_4.2.gemfile +0 -16
  60. data/gemfiles/rails_4.2_mongoid_5.gemfile +0 -11
  61. data/gemfiles/rails_5.0.gemfile +0 -14
  62. data/spec/database.rb +0 -44
  63. data/spec/database.yml +0 -3
  64. data/spec/en.yml +0 -12
  65. data/spec/en_deprecated_style.yml +0 -10
  66. data/spec/generators/active_record_generator_spec.rb +0 -47
  67. data/spec/generators/mongoid_generator_spec.rb +0 -31
  68. data/spec/models/active_record/basic_active_record_two_state_machines_example.rb +0 -25
  69. data/spec/models/active_record/complex_active_record_example.rb +0 -37
  70. data/spec/models/active_record/derivate_new_dsl.rb +0 -7
  71. data/spec/models/active_record/false_state.rb +0 -35
  72. data/spec/models/active_record/gate.rb +0 -39
  73. data/spec/models/active_record/invalid_persistor.rb +0 -29
  74. data/spec/models/active_record/localizer_test_model.rb +0 -34
  75. data/spec/models/active_record/no_direct_assignment.rb +0 -21
  76. data/spec/models/active_record/no_scope.rb +0 -21
  77. data/spec/models/active_record/persisted_state.rb +0 -12
  78. data/spec/models/active_record/provided_and_persisted_state.rb +0 -24
  79. data/spec/models/active_record/reader.rb +0 -7
  80. data/spec/models/active_record/readme_job.rb +0 -21
  81. data/spec/models/active_record/silent_persistor.rb +0 -29
  82. data/spec/models/active_record/simple_new_dsl.rb +0 -17
  83. data/spec/models/active_record/thief.rb +0 -29
  84. data/spec/models/active_record/transactor.rb +0 -99
  85. data/spec/models/active_record/transient.rb +0 -6
  86. data/spec/models/active_record/validator.rb +0 -118
  87. data/spec/models/active_record/with_enum.rb +0 -39
  88. data/spec/models/active_record/with_enum_without_column.rb +0 -38
  89. data/spec/models/active_record/with_false_enum.rb +0 -31
  90. data/spec/models/active_record/with_true_enum.rb +0 -39
  91. data/spec/models/active_record/worker.rb +0 -2
  92. data/spec/models/active_record/writer.rb +0 -6
  93. data/spec/models/basic_two_state_machines_example.rb +0 -25
  94. data/spec/models/callbacks/basic.rb +0 -98
  95. data/spec/models/callbacks/basic_multiple.rb +0 -75
  96. data/spec/models/callbacks/guard_within_block.rb +0 -67
  97. data/spec/models/callbacks/guard_within_block_multiple.rb +0 -66
  98. data/spec/models/callbacks/multiple_transitions_transition_guard.rb +0 -66
  99. data/spec/models/callbacks/multiple_transitions_transition_guard_multiple.rb +0 -65
  100. data/spec/models/callbacks/private_method.rb +0 -44
  101. data/spec/models/callbacks/private_method_multiple.rb +0 -44
  102. data/spec/models/callbacks/with_args.rb +0 -62
  103. data/spec/models/callbacks/with_args_multiple.rb +0 -61
  104. data/spec/models/callbacks/with_state_arg.rb +0 -30
  105. data/spec/models/callbacks/with_state_arg_multiple.rb +0 -26
  106. data/spec/models/complex_example.rb +0 -222
  107. data/spec/models/conversation.rb +0 -93
  108. data/spec/models/default_state.rb +0 -12
  109. data/spec/models/double_definer.rb +0 -21
  110. data/spec/models/dynamoid/complex_dynamoid_example.rb +0 -37
  111. data/spec/models/dynamoid/dynamoid_multiple.rb +0 -18
  112. data/spec/models/dynamoid/dynamoid_simple.rb +0 -18
  113. data/spec/models/foo.rb +0 -106
  114. data/spec/models/foo_callback_multiple.rb +0 -45
  115. data/spec/models/guard_arguments_check.rb +0 -17
  116. data/spec/models/guard_with_params.rb +0 -24
  117. data/spec/models/guard_with_params_multiple.rb +0 -18
  118. data/spec/models/guardian.rb +0 -58
  119. data/spec/models/guardian_multiple.rb +0 -48
  120. data/spec/models/guardian_without_from_specified.rb +0 -18
  121. data/spec/models/initial_state_proc.rb +0 -31
  122. data/spec/models/mongoid/complex_mongoid_example.rb +0 -37
  123. data/spec/models/mongoid/invalid_persistor_mongoid.rb +0 -39
  124. data/spec/models/mongoid/mongoid_relationships.rb +0 -26
  125. data/spec/models/mongoid/no_scope_mongoid.rb +0 -21
  126. data/spec/models/mongoid/silent_persistor_mongoid.rb +0 -39
  127. data/spec/models/mongoid/simple_mongoid.rb +0 -23
  128. data/spec/models/mongoid/simple_new_dsl_mongoid.rb +0 -25
  129. data/spec/models/mongoid/validator_mongoid.rb +0 -100
  130. data/spec/models/multi_transitioner.rb +0 -34
  131. data/spec/models/multiple_transitions_that_differ_only_by_guard.rb +0 -31
  132. data/spec/models/namespaced_multiple_example.rb +0 -42
  133. data/spec/models/no_initial_state.rb +0 -25
  134. data/spec/models/not_auto_loaded/process.rb +0 -21
  135. data/spec/models/parametrised_event.rb +0 -42
  136. data/spec/models/parametrised_event_multiple.rb +0 -29
  137. data/spec/models/process_with_new_dsl.rb +0 -31
  138. data/spec/models/provided_state.rb +0 -24
  139. data/spec/models/redis/complex_redis_example.rb +0 -40
  140. data/spec/models/redis/redis_multiple.rb +0 -20
  141. data/spec/models/redis/redis_simple.rb +0 -20
  142. data/spec/models/sequel/complex_sequel_example.rb +0 -46
  143. data/spec/models/sequel/invalid_persistor.rb +0 -52
  144. data/spec/models/sequel/sequel_multiple.rb +0 -25
  145. data/spec/models/sequel/sequel_simple.rb +0 -26
  146. data/spec/models/sequel/silent_persistor.rb +0 -50
  147. data/spec/models/sequel/transactor.rb +0 -112
  148. data/spec/models/sequel/validator.rb +0 -93
  149. data/spec/models/sequel/worker.rb +0 -12
  150. data/spec/models/silencer.rb +0 -27
  151. data/spec/models/simple_custom_example.rb +0 -53
  152. data/spec/models/simple_example.rb +0 -15
  153. data/spec/models/simple_multiple_example.rb +0 -42
  154. data/spec/models/state_machine_with_failed_event.rb +0 -20
  155. data/spec/models/states_on_one_line_example.rb +0 -8
  156. data/spec/models/sub_class.rb +0 -41
  157. data/spec/models/sub_class_with_more_states.rb +0 -18
  158. data/spec/models/sub_classing.rb +0 -3
  159. data/spec/models/super_class.rb +0 -46
  160. data/spec/models/this_name_better_not_be_in_use.rb +0 -11
  161. data/spec/models/valid_state_name.rb +0 -23
  162. data/spec/spec_helper.rb +0 -26
  163. data/spec/spec_helpers/active_record.rb +0 -7
  164. data/spec/spec_helpers/dynamoid.rb +0 -33
  165. data/spec/spec_helpers/mongoid.rb +0 -7
  166. data/spec/spec_helpers/redis.rb +0 -15
  167. data/spec/spec_helpers/remove_warnings.rb +0 -1
  168. data/spec/spec_helpers/sequel.rb +0 -7
  169. data/spec/unit/api_spec.rb +0 -100
  170. data/spec/unit/basic_two_state_machines_example_spec.rb +0 -10
  171. data/spec/unit/callback_multiple_spec.rb +0 -300
  172. data/spec/unit/callbacks_spec.rb +0 -491
  173. data/spec/unit/complex_example_spec.rb +0 -84
  174. data/spec/unit/complex_multiple_example_spec.rb +0 -99
  175. data/spec/unit/edge_cases_spec.rb +0 -16
  176. data/spec/unit/event_multiple_spec.rb +0 -73
  177. data/spec/unit/event_naming_spec.rb +0 -16
  178. data/spec/unit/event_spec.rb +0 -381
  179. data/spec/unit/exception_spec.rb +0 -11
  180. data/spec/unit/guard_arguments_check_spec.rb +0 -9
  181. data/spec/unit/guard_multiple_spec.rb +0 -60
  182. data/spec/unit/guard_spec.rb +0 -89
  183. data/spec/unit/guard_with_params_multiple_spec.rb +0 -10
  184. data/spec/unit/guard_with_params_spec.rb +0 -14
  185. data/spec/unit/guard_without_from_specified_spec.rb +0 -10
  186. data/spec/unit/initial_state_multiple_spec.rb +0 -15
  187. data/spec/unit/initial_state_spec.rb +0 -12
  188. data/spec/unit/inspection_multiple_spec.rb +0 -201
  189. data/spec/unit/inspection_spec.rb +0 -149
  190. data/spec/unit/localizer_spec.rb +0 -78
  191. data/spec/unit/memory_leak_spec.rb +0 -38
  192. data/spec/unit/multiple_transitions_that_differ_only_by_guard_spec.rb +0 -14
  193. data/spec/unit/namespaced_multiple_example_spec.rb +0 -75
  194. data/spec/unit/new_dsl_spec.rb +0 -12
  195. data/spec/unit/override_warning_spec.rb +0 -94
  196. data/spec/unit/persistence/active_record_persistence_multiple_spec.rb +0 -618
  197. data/spec/unit/persistence/active_record_persistence_spec.rb +0 -721
  198. data/spec/unit/persistence/dynamoid_persistence_multiple_spec.rb +0 -135
  199. data/spec/unit/persistence/dynamoid_persistence_spec.rb +0 -84
  200. data/spec/unit/persistence/mongoid_persistence_multiple_spec.rb +0 -204
  201. data/spec/unit/persistence/mongoid_persistence_spec.rb +0 -169
  202. data/spec/unit/persistence/redis_persistence_multiple_spec.rb +0 -88
  203. data/spec/unit/persistence/redis_persistence_spec.rb +0 -53
  204. data/spec/unit/persistence/sequel_persistence_multiple_spec.rb +0 -148
  205. data/spec/unit/persistence/sequel_persistence_spec.rb +0 -368
  206. data/spec/unit/readme_spec.rb +0 -41
  207. data/spec/unit/reloading_spec.rb +0 -15
  208. data/spec/unit/rspec_matcher_spec.rb +0 -79
  209. data/spec/unit/simple_custom_example_spec.rb +0 -39
  210. data/spec/unit/simple_example_spec.rb +0 -42
  211. data/spec/unit/simple_multiple_example_spec.rb +0 -91
  212. data/spec/unit/state_spec.rb +0 -89
  213. data/spec/unit/states_on_one_line_example_spec.rb +0 -16
  214. data/spec/unit/subclassing_multiple_spec.rb +0 -74
  215. data/spec/unit/subclassing_spec.rb +0 -46
  216. data/spec/unit/transition_spec.rb +0 -436
  217. data/test/minitest_helper.rb +0 -57
  218. data/test/unit/minitest_matcher_test.rb +0 -80
@@ -1,35 +0,0 @@
1
- class FalseState < ActiveRecord::Base
2
- include AASM
3
-
4
- def initialize(*args)
5
- super
6
- self.aasm_state = false
7
- end
8
-
9
- aasm do
10
- state :opened
11
- state :closed
12
-
13
- event :view do
14
- transitions :to => :read, :from => [:needs_attention]
15
- end
16
- end
17
- end
18
-
19
- class MultipleFalseState < ActiveRecord::Base
20
- include AASM
21
-
22
- def initialize(*args)
23
- super
24
- self.aasm_state = false
25
- end
26
-
27
- aasm :left do
28
- state :opened
29
- state :closed
30
-
31
- event :view do
32
- transitions :to => :read, :from => [:needs_attention]
33
- end
34
- end
35
- end
@@ -1,39 +0,0 @@
1
- class Gate < ActiveRecord::Base
2
- include AASM
3
-
4
- # Fake this column for testing purposes
5
- # attr_accessor :aasm_state
6
-
7
- def value
8
- 'value'
9
- end
10
-
11
- aasm do
12
- state :opened
13
- state :closed
14
-
15
- event :view do
16
- transitions :to => :read, :from => [:needs_attention]
17
- end
18
- end
19
- end
20
-
21
- class MultipleGate < ActiveRecord::Base
22
- include AASM
23
-
24
- # Fake this column for testing purposes
25
- # attr_accessor :aasm_state
26
-
27
- def value
28
- 'value'
29
- end
30
-
31
- aasm :left, :column => :aasm_state do
32
- state :opened
33
- state :closed
34
-
35
- event :view do
36
- transitions :to => :read, :from => [:needs_attention]
37
- end
38
- end
39
- end
@@ -1,29 +0,0 @@
1
- class InvalidPersistor < ActiveRecord::Base
2
- include AASM
3
- aasm :column => :status, :skip_validation_on_save => true do
4
- state :sleeping, :initial => true
5
- state :running
6
- event :run do
7
- transitions :to => :running, :from => :sleeping
8
- end
9
- event :sleep do
10
- transitions :to => :sleeping, :from => :running
11
- end
12
- end
13
- validates_presence_of :name
14
- end
15
-
16
- class MultipleInvalidPersistor < ActiveRecord::Base
17
- include AASM
18
- aasm :left, :column => :status, :skip_validation_on_save => true do
19
- state :sleeping, :initial => true
20
- state :running
21
- event :run do
22
- transitions :to => :running, :from => :sleeping
23
- end
24
- event :sleep do
25
- transitions :to => :sleeping, :from => :running
26
- end
27
- end
28
- validates_presence_of :name
29
- end
@@ -1,34 +0,0 @@
1
- class LocalizerTestModel < ActiveRecord::Base
2
- include AASM
3
-
4
- aasm do
5
- state :opened, :initial => true
6
- state :closed
7
- event :close
8
- event :open
9
- end
10
- end
11
-
12
- describe 'localized state names' do
13
- before(:all) do
14
- I18n.load_path << 'spec/en.yml'
15
- I18n.default_locale = :en
16
- I18n.reload!
17
- end
18
-
19
- after(:all) do
20
- I18n.load_path.clear
21
- end
22
-
23
- it 'should localize' do
24
- state = LocalizerTestModel.aasm.states.detect {|s| s == :opened}
25
- expect(state.localized_name).to eq("It's open now!")
26
- expect(state.human_name).to eq("It's open now!")
27
- end
28
-
29
- it 'should use fallback' do
30
- state = LocalizerTestModel.aasm.states.detect {|s| s == :closed}
31
- expect(state.localized_name).to eq('Closed')
32
- expect(state.human_name).to eq('Closed')
33
- end
34
- end
@@ -1,21 +0,0 @@
1
- class NoDirectAssignment < ActiveRecord::Base
2
- include AASM
3
- aasm :no_direct_assignment => true do
4
- state :pending, :initial => true
5
- state :running
6
- event :run do
7
- transitions :from => :pending, :to => :running
8
- end
9
- end
10
- end
11
-
12
- class MultipleNoDirectAssignment < ActiveRecord::Base
13
- include AASM
14
- aasm :left, :column => :aasm_state, :no_direct_assignment => true do
15
- state :pending, :initial => true
16
- state :running
17
- event :run do
18
- transitions :from => :pending, :to => :running
19
- end
20
- end
21
- end
@@ -1,21 +0,0 @@
1
- class NoScope < ActiveRecord::Base
2
- include AASM
3
- aasm :create_scopes => false do
4
- state :pending, :initial => true
5
- state :running
6
- event :run do
7
- transitions :from => :pending, :to => :running
8
- end
9
- end
10
- end
11
-
12
- class MultipleNoScope < ActiveRecord::Base
13
- include AASM
14
- aasm :left, :column => :aasm_state, :create_scopes => false do
15
- state :pending, :initial => true
16
- state :running
17
- event :run do
18
- transitions :from => :pending, :to => :running
19
- end
20
- end
21
- end
@@ -1,12 +0,0 @@
1
- class PersistedState < ActiveRecord::Base
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,24 +0,0 @@
1
- class ProvidedAndPersistedState < ActiveRecord::Base
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
- :gamma
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
@@ -1,7 +0,0 @@
1
- class Reader < ActiveRecord::Base
2
- include AASM
3
-
4
- def aasm_read_state
5
- "fi"
6
- end
7
- end
@@ -1,21 +0,0 @@
1
- class ReadmeJob < ActiveRecord::Base
2
- include AASM
3
-
4
- aasm do
5
- state :sleeping, :initial => true
6
- state :running
7
- state :cleaning
8
-
9
- event :run do
10
- transitions :from => :sleeping, :to => :running
11
- end
12
-
13
- event :clean do
14
- transitions :from => :running, :to => :cleaning
15
- end
16
-
17
- event :sleep do
18
- transitions :from => [:running, :cleaning], :to => :sleeping
19
- end
20
- end
21
- end
@@ -1,29 +0,0 @@
1
- class SilentPersistor < ActiveRecord::Base
2
- include AASM
3
- aasm :column => :status, :whiny_persistence => false do
4
- state :sleeping, :initial => true
5
- state :running
6
- event :run do
7
- transitions :to => :running, :from => :sleeping
8
- end
9
- event :sleep do
10
- transitions :to => :sleeping, :from => :running
11
- end
12
- end
13
- validates_presence_of :name
14
- end
15
-
16
- class MultipleSilentPersistor < ActiveRecord::Base
17
- include AASM
18
- aasm :left, :column => :status, :whiny_persistence => false do
19
- state :sleeping, :initial => true
20
- state :running
21
- event :run do
22
- transitions :to => :running, :from => :sleeping
23
- end
24
- event :sleep do
25
- transitions :to => :sleeping, :from => :running
26
- end
27
- end
28
- validates_presence_of :name
29
- end
@@ -1,17 +0,0 @@
1
- class SimpleNewDsl < ActiveRecord::Base
2
- include AASM
3
- aasm :column => :status
4
- aasm do
5
- state :unknown_scope, :another_unknown_scope
6
- state :new
7
- end
8
- end
9
-
10
- class MultipleSimpleNewDsl < ActiveRecord::Base
11
- include AASM
12
- aasm :left, :column => :status
13
- aasm :left do
14
- state :unknown_scope, :another_unknown_scope
15
- state :new
16
- end
17
- end
@@ -1,29 +0,0 @@
1
- class Thief < ActiveRecord::Base
2
- if ActiveRecord::VERSION::MAJOR >= 3
3
- self.table_name = 'thieves'
4
- else
5
- set_table_name "thieves"
6
- end
7
- include AASM
8
- aasm do
9
- state :rich
10
- state :jailed
11
- initial_state Proc.new {|thief| thief.skilled ? :rich : :jailed }
12
- end
13
- attr_accessor :skilled, :aasm_state
14
- end
15
-
16
- class MultipleThief < ActiveRecord::Base
17
- if ActiveRecord::VERSION::MAJOR >= 3
18
- self.table_name = 'multiple_thieves'
19
- else
20
- set_table_name "multiple_thieves"
21
- end
22
- include AASM
23
- aasm :left, :column => :aasm_state do
24
- state :rich
25
- state :jailed
26
- initial_state Proc.new {|thief| thief.skilled ? :rich : :jailed }
27
- end
28
- attr_accessor :skilled, :aasm_state
29
- end
@@ -1,99 +0,0 @@
1
- class Transactor < ActiveRecord::Base
2
-
3
- belongs_to :worker
4
-
5
- include AASM
6
- aasm :column => :status do
7
- state :sleeping, :initial => true
8
- state :running, :before_enter => :start_worker, :after_enter => :fail
9
-
10
- event :run do
11
- transitions :to => :running, :from => :sleeping
12
- end
13
- end
14
-
15
- private
16
-
17
- def start_worker
18
- worker.update_attribute(:status, 'running')
19
- end
20
-
21
- def fail
22
- raise StandardError.new('failed on purpose')
23
- end
24
-
25
- end
26
-
27
- class NoLockTransactor < ActiveRecord::Base
28
-
29
- belongs_to :worker
30
-
31
- include AASM
32
-
33
- aasm :column => :status do
34
- state :sleeping, :initial => true
35
- state :running
36
-
37
- event :run do
38
- transitions :to => :running, :from => :sleeping
39
- end
40
- end
41
- end
42
-
43
- class LockTransactor < ActiveRecord::Base
44
-
45
- belongs_to :worker
46
-
47
- include AASM
48
-
49
- aasm :column => :status, requires_lock: true do
50
- state :sleeping, :initial => true
51
- state :running
52
-
53
- event :run do
54
- transitions :to => :running, :from => :sleeping
55
- end
56
- end
57
- end
58
-
59
- class LockNoWaitTransactor < ActiveRecord::Base
60
-
61
- belongs_to :worker
62
-
63
- include AASM
64
-
65
- aasm :column => :status, requires_lock: 'FOR UPDATE NOWAIT' do
66
- state :sleeping, :initial => true
67
- state :running
68
-
69
- event :run do
70
- transitions :to => :running, :from => :sleeping
71
- end
72
- end
73
- end
74
-
75
- class MultipleTransactor < ActiveRecord::Base
76
-
77
- belongs_to :worker
78
-
79
- include AASM
80
- aasm :left, :column => :status do
81
- state :sleeping, :initial => true
82
- state :running, :before_enter => :start_worker, :after_enter => :fail
83
-
84
- event :run do
85
- transitions :to => :running, :from => :sleeping
86
- end
87
- end
88
-
89
- private
90
-
91
- def start_worker
92
- worker.update_attribute(:status, 'running')
93
- end
94
-
95
- def fail
96
- raise StandardError.new('failed on purpose')
97
- end
98
-
99
- end
@@ -1,6 +0,0 @@
1
- class Transient < ActiveRecord::Base
2
- def aasm_write_state_without_persistence(state)
3
- "fum"
4
- end
5
- include AASM
6
- end
@@ -1,118 +0,0 @@
1
- class Validator < ActiveRecord::Base
2
- attr_accessor :after_all_transactions_performed,
3
- :after_transaction_performed_on_fail,
4
- :after_transaction_performed_on_run,
5
- :before_all_transactions_performed,
6
- :before_transaction_performed_on_fail,
7
- :before_transaction_performed_on_run,
8
- :invalid
9
-
10
- validate do |model|
11
- errors.add(:validator, "invalid") if invalid
12
- end
13
-
14
- include AASM
15
-
16
- aasm :column => :status, :whiny_persistence => true do
17
- before_all_transactions :before_all_transactions
18
- after_all_transactions :after_all_transactions
19
-
20
- state :sleeping, :initial => true
21
- state :running
22
- state :failed, :after_enter => :fail
23
-
24
- event :run, :after_commit => :change_name! do
25
- after_transaction do
26
- @after_transaction_performed_on_run = true
27
- end
28
-
29
- before_transaction do
30
- @before_transaction_performed_on_run = true
31
- end
32
-
33
- transitions :to => :running, :from => :sleeping
34
- end
35
-
36
- event :sleep do
37
- after_commit do |name|
38
- change_name_on_sleep name
39
- end
40
- transitions :to => :sleeping, :from => :running
41
- end
42
-
43
- event :fail do
44
- after_transaction do
45
- @after_transaction_performed_on_fail = true
46
- end
47
-
48
- before_transaction do
49
- @before_transaction_performed_on_fail = true
50
- end
51
-
52
- transitions :to => :failed, :from => [:sleeping, :running]
53
- end
54
- end
55
-
56
- validates_presence_of :name
57
-
58
- def change_name!
59
- self.name = "name changed"
60
- save!
61
- end
62
-
63
- def change_name_on_sleep name
64
- self.name = name
65
- save!
66
- end
67
-
68
- def fail
69
- raise StandardError.new('failed on purpose')
70
- end
71
-
72
- def after_all_transactions
73
- @after_all_transactions_performed = true
74
- end
75
-
76
- def before_all_transactions
77
- @before_all_transactions_performed = true
78
- end
79
- end
80
-
81
- class MultipleValidator < ActiveRecord::Base
82
-
83
- include AASM
84
- aasm :left, :column => :status, :whiny_persistence => true do
85
- state :sleeping, :initial => true
86
- state :running
87
- state :failed, :after_enter => :fail
88
-
89
- event :run, :after_commit => :change_name! do
90
- transitions :to => :running, :from => :sleeping
91
- end
92
- event :sleep do
93
- after_commit do |name|
94
- change_name_on_sleep name
95
- end
96
- transitions :to => :sleeping, :from => :running
97
- end
98
- event :fail do
99
- transitions :to => :failed, :from => [:sleeping, :running]
100
- end
101
- end
102
-
103
- validates_presence_of :name
104
-
105
- def change_name!
106
- self.name = "name changed"
107
- save!
108
- end
109
-
110
- def change_name_on_sleep name
111
- self.name = name
112
- save!
113
- end
114
-
115
- def fail
116
- raise StandardError.new('failed on purpose')
117
- end
118
- end
@@ -1,39 +0,0 @@
1
- class WithEnum < ActiveRecord::Base
2
- include AASM
3
-
4
- # Fake this column for testing purposes
5
- attr_accessor :aasm_state
6
-
7
- def self.test
8
- {}
9
- end
10
-
11
- aasm :enum => :test do
12
- state :opened
13
- state :closed
14
-
15
- event :view do
16
- transitions :to => :read, :from => [:needs_attention]
17
- end
18
- end
19
- end
20
-
21
- class MultipleWithEnum < ActiveRecord::Base
22
- include AASM
23
-
24
- # Fake this column for testing purposes
25
- attr_accessor :aasm_state
26
-
27
- def self.test
28
- {}
29
- end
30
-
31
- aasm :left, :enum => :test do
32
- state :opened
33
- state :closed
34
-
35
- event :view do
36
- transitions :to => :read, :from => [:needs_attention]
37
- end
38
- end
39
- end
@@ -1,38 +0,0 @@
1
- class WithEnumWithoutColumn < ActiveRecord::Base
2
- include AASM
3
-
4
- if ActiveRecord::VERSION::MAJOR >= 4 && ActiveRecord::VERSION::MINOR >= 1 # won't work with Rails <= 4.1
5
- enum status: {
6
- opened: 0,
7
- closed: 1
8
- }
9
- end
10
-
11
- aasm :column => :status do
12
- state :closed, initial: true
13
- state :opened
14
-
15
- event :view do
16
- transitions :to => :opened, :from => :closed
17
- end
18
- end
19
- end
20
-
21
- class MultipleWithEnumWithoutColumn < ActiveRecord::Base
22
- include AASM
23
- if ActiveRecord::VERSION::MAJOR >= 4 && ActiveRecord::VERSION::MINOR >= 1 # won't work with Rails <= 4.1
24
- enum status: {
25
- opened: 0,
26
- closed: 1
27
- }
28
- end
29
-
30
- aasm :left, :column => :status do
31
- state :closed, initial: true
32
- state :opened
33
-
34
- event :view do
35
- transitions :to => :opened, :from => :closed
36
- end
37
- end
38
- end
@@ -1,31 +0,0 @@
1
- class WithFalseEnum < ActiveRecord::Base
2
- include AASM
3
-
4
- # Fake this column for testing purposes
5
- attr_accessor :aasm_state
6
-
7
- aasm :enum => false do
8
- state :opened
9
- state :closed
10
-
11
- event :view do
12
- transitions :to => :read, :from => [:needs_attention]
13
- end
14
- end
15
- end
16
-
17
- class MultipleWithFalseEnum < ActiveRecord::Base
18
- include AASM
19
-
20
- # Fake this column for testing purposes
21
- attr_accessor :aasm_state
22
-
23
- aasm :left, :enum => false do
24
- state :opened
25
- state :closed
26
-
27
- event :view do
28
- transitions :to => :read, :from => [:needs_attention]
29
- end
30
- end
31
- end