aasm 5.0.8

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 (262) hide show
  1. checksums.yaml +7 -0
  2. data/.document +6 -0
  3. data/.github/ISSUE_TEMPLATE/bug_report.md +27 -0
  4. data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  5. data/.gitignore +20 -0
  6. data/.travis.yml +100 -0
  7. data/API +34 -0
  8. data/Appraisals +71 -0
  9. data/CHANGELOG.md +431 -0
  10. data/CODE_OF_CONDUCT.md +13 -0
  11. data/CONTRIBUTING.md +24 -0
  12. data/Dockerfile +44 -0
  13. data/Gemfile +6 -0
  14. data/Gemfile.lock_old +151 -0
  15. data/HOWTO +12 -0
  16. data/LICENSE +20 -0
  17. data/PLANNED_CHANGES.md +11 -0
  18. data/README.md +1439 -0
  19. data/README_FROM_VERSION_3_TO_4.md +240 -0
  20. data/Rakefile +31 -0
  21. data/TESTING.md +25 -0
  22. data/aasm.gemspec +37 -0
  23. data/callbacks.txt +51 -0
  24. data/docker-compose.yml +40 -0
  25. data/gemfiles/norails.gemfile +10 -0
  26. data/gemfiles/rails_3.2.gemfile +14 -0
  27. data/gemfiles/rails_4.2.gemfile +16 -0
  28. data/gemfiles/rails_4.2_mongoid_5.gemfile +11 -0
  29. data/gemfiles/rails_4.2_nobrainer.gemfile +9 -0
  30. data/gemfiles/rails_5.0.gemfile +13 -0
  31. data/gemfiles/rails_5.0_nobrainer.gemfile +9 -0
  32. data/gemfiles/rails_5.1.gemfile +13 -0
  33. data/gemfiles/rails_5.2.gemfile +13 -0
  34. data/lib/aasm.rb +23 -0
  35. data/lib/aasm/aasm.rb +208 -0
  36. data/lib/aasm/base.rb +271 -0
  37. data/lib/aasm/configuration.rb +45 -0
  38. data/lib/aasm/core/event.rb +172 -0
  39. data/lib/aasm/core/invoker.rb +129 -0
  40. data/lib/aasm/core/invokers/base_invoker.rb +75 -0
  41. data/lib/aasm/core/invokers/class_invoker.rb +52 -0
  42. data/lib/aasm/core/invokers/literal_invoker.rb +47 -0
  43. data/lib/aasm/core/invokers/proc_invoker.rb +59 -0
  44. data/lib/aasm/core/state.rb +90 -0
  45. data/lib/aasm/core/transition.rb +83 -0
  46. data/lib/aasm/dsl_helper.rb +30 -0
  47. data/lib/aasm/errors.rb +21 -0
  48. data/lib/aasm/instance_base.rb +133 -0
  49. data/lib/aasm/localizer.rb +54 -0
  50. data/lib/aasm/minitest.rb +5 -0
  51. data/lib/aasm/minitest/allow_event.rb +13 -0
  52. data/lib/aasm/minitest/allow_transition_to.rb +13 -0
  53. data/lib/aasm/minitest/have_state.rb +13 -0
  54. data/lib/aasm/minitest/transition_from.rb +21 -0
  55. data/lib/aasm/minitest_spec.rb +15 -0
  56. data/lib/aasm/persistence.rb +54 -0
  57. data/lib/aasm/persistence/active_record_persistence.rb +165 -0
  58. data/lib/aasm/persistence/base.rb +78 -0
  59. data/lib/aasm/persistence/core_data_query_persistence.rb +94 -0
  60. data/lib/aasm/persistence/dynamoid_persistence.rb +92 -0
  61. data/lib/aasm/persistence/mongoid_persistence.rb +126 -0
  62. data/lib/aasm/persistence/no_brainer_persistence.rb +105 -0
  63. data/lib/aasm/persistence/orm.rb +150 -0
  64. data/lib/aasm/persistence/plain_persistence.rb +26 -0
  65. data/lib/aasm/persistence/redis_persistence.rb +112 -0
  66. data/lib/aasm/persistence/sequel_persistence.rb +83 -0
  67. data/lib/aasm/rspec.rb +5 -0
  68. data/lib/aasm/rspec/allow_event.rb +26 -0
  69. data/lib/aasm/rspec/allow_transition_to.rb +26 -0
  70. data/lib/aasm/rspec/have_state.rb +22 -0
  71. data/lib/aasm/rspec/transition_from.rb +36 -0
  72. data/lib/aasm/state_machine.rb +53 -0
  73. data/lib/aasm/state_machine_store.rb +76 -0
  74. data/lib/aasm/version.rb +3 -0
  75. data/lib/generators/aasm/aasm_generator.rb +16 -0
  76. data/lib/generators/aasm/orm_helpers.rb +41 -0
  77. data/lib/generators/active_record/aasm_generator.rb +40 -0
  78. data/lib/generators/active_record/templates/migration.rb +8 -0
  79. data/lib/generators/active_record/templates/migration_existing.rb +5 -0
  80. data/lib/generators/mongoid/aasm_generator.rb +28 -0
  81. data/lib/generators/nobrainer/aasm_generator.rb +28 -0
  82. data/lib/motion-aasm.rb +37 -0
  83. data/spec/database.rb +59 -0
  84. data/spec/database.yml +3 -0
  85. data/spec/en.yml +12 -0
  86. data/spec/en_deprecated_style.yml +10 -0
  87. data/spec/generators/active_record_generator_spec.rb +53 -0
  88. data/spec/generators/mongoid_generator_spec.rb +31 -0
  89. data/spec/generators/no_brainer_generator_spec.rb +29 -0
  90. data/spec/models/active_record/basic_active_record_two_state_machines_example.rb +25 -0
  91. data/spec/models/active_record/complex_active_record_example.rb +37 -0
  92. data/spec/models/active_record/derivate_new_dsl.rb +7 -0
  93. data/spec/models/active_record/false_state.rb +35 -0
  94. data/spec/models/active_record/gate.rb +39 -0
  95. data/spec/models/active_record/instance_level_skip_validation_example.rb +19 -0
  96. data/spec/models/active_record/invalid_persistor.rb +29 -0
  97. data/spec/models/active_record/localizer_test_model.rb +34 -0
  98. data/spec/models/active_record/no_direct_assignment.rb +21 -0
  99. data/spec/models/active_record/no_scope.rb +21 -0
  100. data/spec/models/active_record/persisted_state.rb +12 -0
  101. data/spec/models/active_record/person.rb +23 -0
  102. data/spec/models/active_record/provided_and_persisted_state.rb +24 -0
  103. data/spec/models/active_record/reader.rb +7 -0
  104. data/spec/models/active_record/readme_job.rb +21 -0
  105. data/spec/models/active_record/silent_persistor.rb +29 -0
  106. data/spec/models/active_record/simple_new_dsl.rb +32 -0
  107. data/spec/models/active_record/thief.rb +29 -0
  108. data/spec/models/active_record/transactor.rb +124 -0
  109. data/spec/models/active_record/transient.rb +6 -0
  110. data/spec/models/active_record/validator.rb +118 -0
  111. data/spec/models/active_record/with_enum.rb +39 -0
  112. data/spec/models/active_record/with_enum_without_column.rb +38 -0
  113. data/spec/models/active_record/with_false_enum.rb +31 -0
  114. data/spec/models/active_record/with_true_enum.rb +39 -0
  115. data/spec/models/active_record/work.rb +3 -0
  116. data/spec/models/active_record/worker.rb +2 -0
  117. data/spec/models/active_record/writer.rb +6 -0
  118. data/spec/models/basic_two_state_machines_example.rb +25 -0
  119. data/spec/models/callbacks/basic.rb +98 -0
  120. data/spec/models/callbacks/basic_multiple.rb +75 -0
  121. data/spec/models/callbacks/guard_within_block.rb +67 -0
  122. data/spec/models/callbacks/guard_within_block_multiple.rb +66 -0
  123. data/spec/models/callbacks/multiple_transitions_transition_guard.rb +66 -0
  124. data/spec/models/callbacks/multiple_transitions_transition_guard_multiple.rb +65 -0
  125. data/spec/models/callbacks/private_method.rb +44 -0
  126. data/spec/models/callbacks/private_method_multiple.rb +44 -0
  127. data/spec/models/callbacks/with_args.rb +62 -0
  128. data/spec/models/callbacks/with_args_multiple.rb +61 -0
  129. data/spec/models/callbacks/with_state_arg.rb +34 -0
  130. data/spec/models/callbacks/with_state_arg_multiple.rb +29 -0
  131. data/spec/models/complex_example.rb +222 -0
  132. data/spec/models/conversation.rb +93 -0
  133. data/spec/models/default_state.rb +12 -0
  134. data/spec/models/double_definer.rb +21 -0
  135. data/spec/models/dynamoid/complex_dynamoid_example.rb +37 -0
  136. data/spec/models/dynamoid/dynamoid_multiple.rb +18 -0
  137. data/spec/models/dynamoid/dynamoid_simple.rb +18 -0
  138. data/spec/models/foo.rb +106 -0
  139. data/spec/models/foo_callback_multiple.rb +45 -0
  140. data/spec/models/guard_arguments_check.rb +17 -0
  141. data/spec/models/guard_with_params.rb +24 -0
  142. data/spec/models/guard_with_params_multiple.rb +18 -0
  143. data/spec/models/guardian.rb +58 -0
  144. data/spec/models/guardian_multiple.rb +48 -0
  145. data/spec/models/guardian_without_from_specified.rb +18 -0
  146. data/spec/models/initial_state_proc.rb +31 -0
  147. data/spec/models/mongoid/complex_mongoid_example.rb +37 -0
  148. data/spec/models/mongoid/invalid_persistor_mongoid.rb +39 -0
  149. data/spec/models/mongoid/mongoid_relationships.rb +26 -0
  150. data/spec/models/mongoid/no_scope_mongoid.rb +21 -0
  151. data/spec/models/mongoid/silent_persistor_mongoid.rb +39 -0
  152. data/spec/models/mongoid/simple_mongoid.rb +23 -0
  153. data/spec/models/mongoid/simple_new_dsl_mongoid.rb +25 -0
  154. data/spec/models/mongoid/validator_mongoid.rb +100 -0
  155. data/spec/models/multi_transitioner.rb +34 -0
  156. data/spec/models/multiple_transitions_that_differ_only_by_guard.rb +31 -0
  157. data/spec/models/namespaced_multiple_example.rb +42 -0
  158. data/spec/models/no_initial_state.rb +25 -0
  159. data/spec/models/nobrainer/complex_no_brainer_example.rb +36 -0
  160. data/spec/models/nobrainer/invalid_persistor_no_brainer.rb +39 -0
  161. data/spec/models/nobrainer/no_scope_no_brainer.rb +21 -0
  162. data/spec/models/nobrainer/nobrainer_relationships.rb +25 -0
  163. data/spec/models/nobrainer/silent_persistor_no_brainer.rb +39 -0
  164. data/spec/models/nobrainer/simple_new_dsl_nobrainer.rb +25 -0
  165. data/spec/models/nobrainer/simple_no_brainer.rb +23 -0
  166. data/spec/models/nobrainer/validator_no_brainer.rb +98 -0
  167. data/spec/models/not_auto_loaded/process.rb +21 -0
  168. data/spec/models/parametrised_event.rb +42 -0
  169. data/spec/models/parametrised_event_multiple.rb +29 -0
  170. data/spec/models/process_with_new_dsl.rb +31 -0
  171. data/spec/models/provided_state.rb +24 -0
  172. data/spec/models/redis/complex_redis_example.rb +40 -0
  173. data/spec/models/redis/redis_multiple.rb +20 -0
  174. data/spec/models/redis/redis_simple.rb +20 -0
  175. data/spec/models/sequel/complex_sequel_example.rb +46 -0
  176. data/spec/models/sequel/invalid_persistor.rb +52 -0
  177. data/spec/models/sequel/sequel_multiple.rb +25 -0
  178. data/spec/models/sequel/sequel_simple.rb +26 -0
  179. data/spec/models/sequel/silent_persistor.rb +50 -0
  180. data/spec/models/sequel/transactor.rb +112 -0
  181. data/spec/models/sequel/validator.rb +93 -0
  182. data/spec/models/sequel/worker.rb +12 -0
  183. data/spec/models/silencer.rb +27 -0
  184. data/spec/models/simple_custom_example.rb +53 -0
  185. data/spec/models/simple_example.rb +23 -0
  186. data/spec/models/simple_example_with_guard_args.rb +17 -0
  187. data/spec/models/simple_multiple_example.rb +42 -0
  188. data/spec/models/state_machine_with_failed_event.rb +20 -0
  189. data/spec/models/states_on_one_line_example.rb +8 -0
  190. data/spec/models/sub_class.rb +41 -0
  191. data/spec/models/sub_class_with_more_states.rb +18 -0
  192. data/spec/models/sub_classing.rb +3 -0
  193. data/spec/models/super_class.rb +46 -0
  194. data/spec/models/this_name_better_not_be_in_use.rb +11 -0
  195. data/spec/models/valid_state_name.rb +23 -0
  196. data/spec/spec_helper.rb +36 -0
  197. data/spec/spec_helpers/active_record.rb +8 -0
  198. data/spec/spec_helpers/dynamoid.rb +35 -0
  199. data/spec/spec_helpers/mongoid.rb +26 -0
  200. data/spec/spec_helpers/nobrainer.rb +15 -0
  201. data/spec/spec_helpers/redis.rb +18 -0
  202. data/spec/spec_helpers/remove_warnings.rb +1 -0
  203. data/spec/spec_helpers/sequel.rb +7 -0
  204. data/spec/unit/abstract_class_spec.rb +27 -0
  205. data/spec/unit/api_spec.rb +100 -0
  206. data/spec/unit/basic_two_state_machines_example_spec.rb +10 -0
  207. data/spec/unit/callback_multiple_spec.rb +304 -0
  208. data/spec/unit/callbacks_spec.rb +521 -0
  209. data/spec/unit/complex_example_spec.rb +93 -0
  210. data/spec/unit/complex_multiple_example_spec.rb +115 -0
  211. data/spec/unit/edge_cases_spec.rb +16 -0
  212. data/spec/unit/event_multiple_spec.rb +73 -0
  213. data/spec/unit/event_naming_spec.rb +16 -0
  214. data/spec/unit/event_spec.rb +394 -0
  215. data/spec/unit/exception_spec.rb +11 -0
  216. data/spec/unit/guard_arguments_check_spec.rb +9 -0
  217. data/spec/unit/guard_multiple_spec.rb +60 -0
  218. data/spec/unit/guard_spec.rb +89 -0
  219. data/spec/unit/guard_with_params_multiple_spec.rb +10 -0
  220. data/spec/unit/guard_with_params_spec.rb +14 -0
  221. data/spec/unit/guard_without_from_specified_spec.rb +10 -0
  222. data/spec/unit/initial_state_multiple_spec.rb +15 -0
  223. data/spec/unit/initial_state_spec.rb +12 -0
  224. data/spec/unit/inspection_multiple_spec.rb +201 -0
  225. data/spec/unit/inspection_spec.rb +149 -0
  226. data/spec/unit/invoker_spec.rb +189 -0
  227. data/spec/unit/invokers/base_invoker_spec.rb +72 -0
  228. data/spec/unit/invokers/class_invoker_spec.rb +95 -0
  229. data/spec/unit/invokers/literal_invoker_spec.rb +86 -0
  230. data/spec/unit/invokers/proc_invoker_spec.rb +86 -0
  231. data/spec/unit/localizer_spec.rb +78 -0
  232. data/spec/unit/memory_leak_spec.rb +38 -0
  233. data/spec/unit/multiple_transitions_that_differ_only_by_guard_spec.rb +14 -0
  234. data/spec/unit/namespaced_multiple_example_spec.rb +75 -0
  235. data/spec/unit/new_dsl_spec.rb +12 -0
  236. data/spec/unit/override_warning_spec.rb +94 -0
  237. data/spec/unit/persistence/active_record_persistence_multiple_spec.rb +618 -0
  238. data/spec/unit/persistence/active_record_persistence_spec.rb +773 -0
  239. data/spec/unit/persistence/dynamoid_persistence_multiple_spec.rb +135 -0
  240. data/spec/unit/persistence/dynamoid_persistence_spec.rb +84 -0
  241. data/spec/unit/persistence/mongoid_persistence_multiple_spec.rb +200 -0
  242. data/spec/unit/persistence/mongoid_persistence_spec.rb +165 -0
  243. data/spec/unit/persistence/no_brainer_persistence_multiple_spec.rb +198 -0
  244. data/spec/unit/persistence/no_brainer_persistence_spec.rb +158 -0
  245. data/spec/unit/persistence/redis_persistence_multiple_spec.rb +88 -0
  246. data/spec/unit/persistence/redis_persistence_spec.rb +53 -0
  247. data/spec/unit/persistence/sequel_persistence_multiple_spec.rb +148 -0
  248. data/spec/unit/persistence/sequel_persistence_spec.rb +368 -0
  249. data/spec/unit/readme_spec.rb +41 -0
  250. data/spec/unit/reloading_spec.rb +15 -0
  251. data/spec/unit/rspec_matcher_spec.rb +88 -0
  252. data/spec/unit/simple_custom_example_spec.rb +39 -0
  253. data/spec/unit/simple_example_spec.rb +57 -0
  254. data/spec/unit/simple_multiple_example_spec.rb +91 -0
  255. data/spec/unit/state_spec.rb +89 -0
  256. data/spec/unit/states_on_one_line_example_spec.rb +16 -0
  257. data/spec/unit/subclassing_multiple_spec.rb +74 -0
  258. data/spec/unit/subclassing_spec.rb +46 -0
  259. data/spec/unit/transition_spec.rb +436 -0
  260. data/test/minitest_helper.rb +57 -0
  261. data/test/unit/minitest_matcher_test.rb +80 -0
  262. metadata +609 -0
@@ -0,0 +1,36 @@
1
+ class ComplexNoBrainerExample
2
+ include NoBrainer::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
+ end
@@ -0,0 +1,39 @@
1
+ class InvalidPersistorNoBrainer
2
+ include NoBrainer::Document
3
+ include AASM
4
+
5
+ field :name
6
+ field :status
7
+
8
+ aasm :left, column: :status, skip_validation_on_save: true do
9
+ state :sleeping, initial: true
10
+ state :running
11
+ event :run do
12
+ transitions to: :running, from: :sleeping
13
+ end
14
+ event :sleep do
15
+ transitions to: :sleeping, from: :running
16
+ end
17
+ end
18
+ validates_presence_of :name
19
+ end
20
+
21
+ class MultipleInvalidPersistorNoBrainer
22
+ include NoBrainer::Document
23
+ include AASM
24
+
25
+ field :name
26
+ field :status
27
+
28
+ aasm :left, column: :status, skip_validation_on_save: true do
29
+ state :sleeping, initial: true
30
+ state :running
31
+ event :run do
32
+ transitions to: :running, from: :sleeping
33
+ end
34
+ event :sleep do
35
+ transitions to: :sleeping, from: :running
36
+ end
37
+ end
38
+ validates_presence_of :name
39
+ end
@@ -0,0 +1,21 @@
1
+ class NoScopeNoBrainer
2
+ include NoBrainer::Document
3
+ include AASM
4
+
5
+ field :status, type: String
6
+
7
+ aasm create_scopes: false, column: :status do
8
+ state :ignored_scope
9
+ end
10
+ end
11
+
12
+ class NoScopeNoBrainerMultiple
13
+ include NoBrainer::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
@@ -0,0 +1,25 @@
1
+ class Parent
2
+ include NoBrainer::Document
3
+ include AASM
4
+
5
+ field :status, type: String
6
+ has_many :childs
7
+
8
+ aasm column: :status do
9
+ state :unknown_scope
10
+ state :new
11
+ end
12
+ end
13
+
14
+ class Child
15
+ include NoBrainer::Document
16
+ include AASM
17
+
18
+ field :status, type: String
19
+ belongs_to :parent
20
+
21
+ aasm column: :status do
22
+ state :unknown_scope
23
+ state :new
24
+ end
25
+ end
@@ -0,0 +1,39 @@
1
+ class SilentPersistorNoBrainer
2
+ include NoBrainer::Document
3
+ include AASM
4
+
5
+ field :name
6
+ field :status
7
+
8
+ aasm :left, column: :status, whiny_persistence: false do
9
+ state :sleeping, initial: true
10
+ state :running
11
+ event :run do
12
+ transitions to: :running, from: :sleeping
13
+ end
14
+ event :sleep do
15
+ transitions to: :sleeping, from: :running
16
+ end
17
+ end
18
+ validates_presence_of :name
19
+ end
20
+
21
+ class MultipleSilentPersistorNoBrainer
22
+ include NoBrainer::Document
23
+ include AASM
24
+
25
+ field :name
26
+ field :status
27
+
28
+ aasm :left, column: :status, whiny_persistence: false do
29
+ state :sleeping, initial: true
30
+ state :running
31
+ event :run do
32
+ transitions to: :running, from: :sleeping
33
+ end
34
+ event :sleep do
35
+ transitions to: :sleeping, from: :running
36
+ end
37
+ end
38
+ validates_presence_of :name
39
+ end
@@ -0,0 +1,25 @@
1
+ class SimpleNewDslNoBrainer
2
+ include NoBrainer::Document
3
+ include AASM
4
+
5
+ field :status, type: String
6
+
7
+ aasm column: :status
8
+ aasm do
9
+ state :unknown_scope, initial: true
10
+ state :new
11
+ end
12
+ end
13
+
14
+ class SimpleNewDslNoBrainerMultiple
15
+ include NoBrainer::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
23
+ state :new
24
+ end
25
+ end
@@ -0,0 +1,23 @@
1
+ class SimpleNoBrainer
2
+ include NoBrainer::Document
3
+ include AASM
4
+
5
+ field :status, type: String
6
+
7
+ aasm column: :status do
8
+ state :unknown_scope, :another_unknown_scope
9
+ state :new
10
+ end
11
+ end
12
+
13
+ class SimpleNoBrainerMultiple
14
+ include NoBrainer::Document
15
+ include AASM
16
+
17
+ field :status, type: String
18
+
19
+ aasm :left, column: :status do
20
+ state :unknown_scope, :another_unknown_scope
21
+ state :new
22
+ end
23
+ end
@@ -0,0 +1,98 @@
1
+ class ValidatorNoBrainer
2
+ include NoBrainer::Document
3
+ include AASM
4
+
5
+ field :name
6
+ field :status
7
+
8
+ attr_accessor :invalid
9
+
10
+ validate do |_|
11
+ errors.add(:validator, 'invalid') if invalid
12
+ end
13
+
14
+ aasm column: :status, whiny_persistence: true do
15
+ before_all_transactions :before_all_transactions
16
+ after_all_transactions :after_all_transactions
17
+
18
+ state :sleeping, initial: true
19
+ state :running
20
+ state :failed, after_enter: :fail
21
+
22
+ event :run, after_commit: :change_name! do
23
+ transitions to: :running, from: :sleeping
24
+ end
25
+
26
+ event :sleep do
27
+ after_commit do |name|
28
+ change_name_on_sleep name
29
+ end
30
+ transitions to: :sleeping, from: :running
31
+ end
32
+
33
+ event :fail do
34
+ transitions to: :failed, from: %i[sleeping running]
35
+ end
36
+ end
37
+
38
+ validates_presence_of :name
39
+
40
+ def change_name!
41
+ self.name = 'name changed'
42
+ save!
43
+ end
44
+
45
+ def change_name_on_sleep(name)
46
+ self.name = name
47
+ save!
48
+ end
49
+
50
+ def fail
51
+ raise StandardError, 'failed on purpose'
52
+ end
53
+ end
54
+
55
+ class MultipleValidatorNoBrainer
56
+ include NoBrainer::Document
57
+ include AASM
58
+
59
+ field :name
60
+ field :status
61
+
62
+ attr_accessor :invalid
63
+
64
+ aasm :left, column: :status, whiny_persistence: true do
65
+ state :sleeping, initial: true
66
+ state :running
67
+ state :failed, after_enter: :fail
68
+
69
+ event :run, after_commit: :change_name! do
70
+ transitions to: :running, from: :sleeping
71
+ end
72
+ event :sleep do
73
+ after_commit do |name|
74
+ change_name_on_sleep name
75
+ end
76
+ transitions to: :sleeping, from: :running
77
+ end
78
+ event :fail do
79
+ transitions to: :failed, from: %i[sleeping running]
80
+ end
81
+ end
82
+
83
+ validates_presence_of :name
84
+
85
+ def change_name!
86
+ self.name = 'name changed'
87
+ save!
88
+ end
89
+
90
+ def change_name_on_sleep(name)
91
+ self.name = name
92
+ save!
93
+ end
94
+
95
+ def fail
96
+ raise StandardError, 'failed on purpose'
97
+ end
98
+ end
@@ -0,0 +1,21 @@
1
+ module Models
2
+ class Process
3
+ include AASM
4
+
5
+ aasm do
6
+ state :sleeping
7
+ state :running
8
+ state :suspended
9
+
10
+ event :start do
11
+ transitions :from => :sleeping, :to => :running
12
+ end
13
+
14
+ event :stop do
15
+ transitions :from => :running, :to => :suspended
16
+ end
17
+ end
18
+
19
+ end
20
+ end
21
+
@@ -0,0 +1,42 @@
1
+ class ParametrisedEvent
2
+ include AASM
3
+ aasm 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 :shower do
15
+ transitions :from => :sleeping, :to => :showering, :after => :wet_hair, :success => :wear_clothes
16
+ end
17
+
18
+ event :dress do
19
+ transitions :from => :sleeping, :to => :working, :after => :wear_clothes, :success => :wear_makeup
20
+ transitions :from => :showering, :to => [:working, :dating], :after => Proc.new { |*args| wear_clothes(*args) }, :success => proc { |*args| wear_makeup(*args) }
21
+ transitions :from => :showering, :to => :prettying_up, :after => [:condition_hair, :fix_hair], :success => [:touch_up_hair]
22
+ end
23
+ end
24
+
25
+ def wear_clothes(shirt_color, trouser_type=nil)
26
+ end
27
+
28
+ def wear_makeup(makeup, moisturizer)
29
+ end
30
+
31
+ def wet_hair(dryer)
32
+ end
33
+
34
+ def condition_hair
35
+ end
36
+
37
+ def fix_hair
38
+ end
39
+
40
+ def touch_up_hair
41
+ end
42
+ 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,31 @@
1
+ class ProcessWithNewDsl
2
+ include AASM
3
+
4
+ def self.state(*args)
5
+ raise "wrong state method"
6
+ end
7
+
8
+ attr_accessor :flagged
9
+
10
+ aasm do
11
+ state :sleeping, :initial => true
12
+ state :running, :after_enter => :flag
13
+ state :suspended
14
+
15
+ event :start do
16
+ transitions :from => :sleeping, :to => :running
17
+ end
18
+ event :stop do
19
+ transitions :from => :running, :to => :suspended
20
+ end
21
+ end
22
+
23
+ def flag
24
+ self.flagged = true
25
+ end
26
+
27
+ def self.event(*args)
28
+ raise "wrong event method"
29
+ end
30
+
31
+ 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