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,75 @@
1
+ module Callbacks
2
+ class BasicMultiple
3
+ include AASM
4
+
5
+ def initialize(options={})
6
+ @fail_event_guard = options[:fail_event_guard]
7
+ @fail_transition_guard = options[:fail_transition_guard]
8
+ @log = options[:log]
9
+ reset_data
10
+ end
11
+
12
+ def reset_data
13
+ @data = []
14
+ end
15
+
16
+ def data
17
+ @data.join(' ')
18
+ end
19
+
20
+ aasm(:left) do
21
+ state :open, :initial => true,
22
+ :before_enter => :before_enter_open,
23
+ :enter => :enter_open,
24
+ :after_enter => :after_enter_open,
25
+ :before_exit => :before_exit_open,
26
+ :exit => :exit_open,
27
+ :after_exit => :after_exit_open
28
+
29
+ state :closed,
30
+ :before_enter => :before_enter_closed,
31
+ :enter => :enter_closed,
32
+ :after_enter => :after_enter_closed,
33
+ :before_exit => :before_exit_closed,
34
+ :exit => :exit_closed,
35
+ :after_exit => :after_exit_closed
36
+
37
+ event :left_close, :before => :before_event, :after => :after_event, :guard => :event_guard do
38
+ transitions :to => :closed, :from => [:open], :guard => :transition_guard, :after => :after_transition
39
+ end
40
+
41
+ event :left_open, :before => :before_event, :after => :after_event do
42
+ transitions :to => :open, :from => :closed
43
+ end
44
+ end
45
+
46
+ def log(text)
47
+ @data << text
48
+ puts text if @log
49
+ end
50
+
51
+ def aasm_write_state(*args); log("aasm_write_state(#{args.inspect})"); true; end
52
+
53
+ def before_enter_open; log('before_enter_open'); end
54
+ def enter_open; log('enter_open'); end
55
+ def before_exit_open; log('before_exit_open'); end
56
+ def after_enter_open; log('after_enter_open'); end
57
+ def exit_open; log('exit_open'); end
58
+ def after_exit_open; log('after_exit_open'); end
59
+
60
+ def before_enter_closed; log('before_enter_closed'); end
61
+ def enter_closed; log('enter_closed'); end
62
+ def before_exit_closed; log('before_exit_closed'); end
63
+ def exit_closed; log('exit_closed'); end
64
+ def after_enter_closed; log('after_enter_closed'); end
65
+ def after_exit_closed; log('after_exit_closed'); end
66
+
67
+ def event_guard; log('event_guard'); !@fail_event_guard; end
68
+ def transition_guard; log('transition_guard'); !@fail_transition_guard; end
69
+
70
+ def after_transition; log('after_transition'); end
71
+
72
+ def before_event; log('before_event'); end
73
+ def after_event; log('after_event'); end
74
+ end
75
+ end
@@ -0,0 +1,67 @@
1
+ module Callbacks
2
+ class GuardWithinBlock
3
+ include AASM
4
+
5
+ def initialize(options={})
6
+ @fail_event_guard = options[:fail_event_guard]
7
+ @fail_transition_guard = options[:fail_transition_guard]
8
+ @log = options[:log]
9
+ end
10
+
11
+ aasm do
12
+ state :open, :initial => true,
13
+ :before_enter => :before_enter_open,
14
+ :enter => :enter_open,
15
+ :after_enter => :after_enter_open,
16
+ :before_exit => :before_exit_open,
17
+ :exit => :exit_open,
18
+ :after_exit => :after_exit_open
19
+
20
+ state :closed,
21
+ :before_enter => :before_enter_closed,
22
+ :enter => :enter_closed,
23
+ :after_enter => :after_enter_closed,
24
+ :before_exit => :before_exit_closed,
25
+ :exit => :exit_closed,
26
+ :after_exit => :after_exit_closed
27
+
28
+ event :close, :before => :before, :after => :after, :guard => :event_guard do
29
+ transitions :to => :closed, :from => [:open], :after => :transitioning, :success => :success_transition do
30
+ guard do
31
+ transition_guard
32
+ end
33
+ end
34
+ end
35
+
36
+ event :open, :before => :before, :after => :after do
37
+ transitions :to => :open, :from => :closed
38
+ end
39
+ end
40
+
41
+ def log(text)
42
+ puts text if @log
43
+ end
44
+
45
+ def before_enter_open; log('before_enter_open'); end
46
+ def enter_open; log('enter_open'); end
47
+ def before_exit_open; log('before_exit_open'); end
48
+ def after_enter_open; log('after_enter_open'); end
49
+ def exit_open; log('exit_open'); end
50
+ def after_exit_open; log('after_exit_open'); end
51
+
52
+ def before_enter_closed; log('before_enter_closed'); end
53
+ def enter_closed; log('enter_closed'); end
54
+ def before_exit_closed; log('before_exit_closed'); end
55
+ def exit_closed; log('exit_closed'); end
56
+ def after_enter_closed; log('after_enter_closed'); end
57
+ def after_exit_closed; log('after_exit_closed'); end
58
+
59
+ def event_guard; log('event_guard'); !@fail_event_guard; end
60
+ def transition_guard; log('transition_guard'); !@fail_transition_guard; end
61
+ def transitioning; log('transitioning'); end
62
+ def success_transition; log('success transition'); end
63
+
64
+ def before; log('before'); end
65
+ def after; log('after'); end
66
+ end
67
+ end
@@ -0,0 +1,66 @@
1
+ module Callbacks
2
+ class GuardWithinBlockMultiple
3
+ include AASM
4
+
5
+ def initialize(options={})
6
+ @fail_event_guard = options[:fail_event_guard]
7
+ @fail_transition_guard = options[:fail_transition_guard]
8
+ @log = options[:log]
9
+ end
10
+
11
+ aasm(:left) do
12
+ state :open, :initial => true,
13
+ :before_enter => :before_enter_open,
14
+ :enter => :enter_open,
15
+ :after_enter => :after_enter_open,
16
+ :before_exit => :before_exit_open,
17
+ :exit => :exit_open,
18
+ :after_exit => :after_exit_open
19
+
20
+ state :closed,
21
+ :before_enter => :before_enter_closed,
22
+ :enter => :enter_closed,
23
+ :after_enter => :after_enter_closed,
24
+ :before_exit => :before_exit_closed,
25
+ :exit => :exit_closed,
26
+ :after_exit => :after_exit_closed
27
+
28
+ event :close, :before => :before, :after => :after, :guard => :event_guard do
29
+ transitions :to => :closed, :from => [:open], :after => :transitioning do
30
+ guard do
31
+ transition_guard
32
+ end
33
+ end
34
+ end
35
+
36
+ event :open, :before => :before, :after => :after do
37
+ transitions :to => :open, :from => :closed
38
+ end
39
+ end
40
+
41
+ def log(text)
42
+ puts text if @log
43
+ end
44
+
45
+ def before_enter_open; log('before_enter_open'); end
46
+ def enter_open; log('enter_open'); end
47
+ def before_exit_open; log('before_exit_open'); end
48
+ def after_enter_open; log('after_enter_open'); end
49
+ def exit_open; log('exit_open'); end
50
+ def after_exit_open; log('after_exit_open'); end
51
+
52
+ def before_enter_closed; log('before_enter_closed'); end
53
+ def enter_closed; log('enter_closed'); end
54
+ def before_exit_closed; log('before_exit_closed'); end
55
+ def exit_closed; log('exit_closed'); end
56
+ def after_enter_closed; log('after_enter_closed'); end
57
+ def after_exit_closed; log('after_exit_closed'); end
58
+
59
+ def event_guard; log('event_guard'); !@fail_event_guard; end
60
+ def transition_guard; log('transition_guard'); !@fail_transition_guard; end
61
+ def transitioning; log('transitioning'); end
62
+
63
+ def before; log('before'); end
64
+ def after; log('after'); end
65
+ end
66
+ end
@@ -0,0 +1,66 @@
1
+ module Callbacks
2
+ class MultipleTransitionsTransitionGuard
3
+ include AASM
4
+
5
+ def initialize(options={})
6
+ @fail_event_guard = options[:fail_event_guard]
7
+ @fail_transition_guard = options[:fail_transition_guard]
8
+ @log = options[:log]
9
+ end
10
+
11
+ aasm do
12
+ state :open, :initial => true,
13
+ :before_enter => :before_enter_open,
14
+ :enter => :enter_open,
15
+ :after_enter => :after_enter_open,
16
+ :before_exit => :before_exit_open,
17
+ :exit => :exit_open,
18
+ :after_exit => :after_exit_open
19
+
20
+ state :closed,
21
+ :before_enter => :before_enter_closed,
22
+ :enter => :enter_closed,
23
+ :after_enter => :after_enter_closed,
24
+ :before_exit => :before_exit_closed,
25
+ :exit => :exit_closed,
26
+ :after_exit => :after_exit_closed
27
+
28
+ state :failed
29
+
30
+ event :close, :before => :before, :after => :after, :guard => :event_guard do
31
+ transitions :to => :closed, :from => [:open], :guard => :transition_guard, :after => :transitioning, :success => :success_transition
32
+ transitions :to => :failed, :from => [:open]
33
+ end
34
+
35
+ event :open, :before => :before, :after => :after do
36
+ transitions :to => :open, :from => :closed
37
+ end
38
+ end
39
+
40
+ def log(text)
41
+ puts text if @log
42
+ end
43
+
44
+ def before_enter_open; log('before_enter_open'); end
45
+ def enter_open; log('enter_open'); end
46
+ def before_exit_open; log('before_exit_open'); end
47
+ def after_enter_open; log('after_enter_open'); end
48
+ def exit_open; log('exit_open'); end
49
+ def after_exit_open; log('after_exit_open'); end
50
+
51
+ def before_enter_closed; log('before_enter_closed'); end
52
+ def enter_closed; log('enter_closed'); end
53
+ def before_exit_closed; log('before_exit_closed'); end
54
+ def exit_closed; log('exit_closed'); end
55
+ def after_enter_closed; log('after_enter_closed'); end
56
+ def after_exit_closed; log('after_exit_closed'); end
57
+
58
+ def event_guard; log('event_guard'); !@fail_event_guard; end
59
+ def transition_guard; log('transition_guard'); !@fail_transition_guard; end
60
+ def transitioning; log('transitioning'); end
61
+ def success_transition; log('transition success'); end
62
+
63
+ def before; log('before'); end
64
+ def after; log('after'); end
65
+ end
66
+ end
@@ -0,0 +1,65 @@
1
+ module Callbacks
2
+ class MultipleTransitionsTransitionGuardMultiple
3
+ include AASM
4
+
5
+ def initialize(options={})
6
+ @fail_event_guard = options[:fail_event_guard]
7
+ @fail_transition_guard = options[:fail_transition_guard]
8
+ @log = options[:log]
9
+ end
10
+
11
+ aasm(:left) do
12
+ state :open, :initial => true,
13
+ :before_enter => :before_enter_open,
14
+ :enter => :enter_open,
15
+ :after_enter => :after_enter_open,
16
+ :before_exit => :before_exit_open,
17
+ :exit => :exit_open,
18
+ :after_exit => :after_exit_open
19
+
20
+ state :closed,
21
+ :before_enter => :before_enter_closed,
22
+ :enter => :enter_closed,
23
+ :after_enter => :after_enter_closed,
24
+ :before_exit => :before_exit_closed,
25
+ :exit => :exit_closed,
26
+ :after_exit => :after_exit_closed
27
+
28
+ state :failed
29
+
30
+ event :close, :before => :before, :after => :after, :guard => :event_guard do
31
+ transitions :to => :closed, :from => [:open], :guard => :transition_guard, :after => :transitioning
32
+ transitions :to => :failed, :from => [:open]
33
+ end
34
+
35
+ event :open, :before => :before, :after => :after do
36
+ transitions :to => :open, :from => :closed
37
+ end
38
+ end
39
+
40
+ def log(text)
41
+ puts text if @log
42
+ end
43
+
44
+ def before_enter_open; log('before_enter_open'); end
45
+ def enter_open; log('enter_open'); end
46
+ def before_exit_open; log('before_exit_open'); end
47
+ def after_enter_open; log('after_enter_open'); end
48
+ def exit_open; log('exit_open'); end
49
+ def after_exit_open; log('after_exit_open'); end
50
+
51
+ def before_enter_closed; log('before_enter_closed'); end
52
+ def enter_closed; log('enter_closed'); end
53
+ def before_exit_closed; log('before_exit_closed'); end
54
+ def exit_closed; log('exit_closed'); end
55
+ def after_enter_closed; log('after_enter_closed'); end
56
+ def after_exit_closed; log('after_exit_closed'); end
57
+
58
+ def event_guard; log('event_guard'); !@fail_event_guard; end
59
+ def transition_guard; log('transition_guard'); !@fail_transition_guard; end
60
+ def transitioning; log('transitioning'); end
61
+
62
+ def before; log('before'); end
63
+ def after; log('after'); end
64
+ end
65
+ end
@@ -0,0 +1,44 @@
1
+ module Callbacks
2
+ class PrivateMethod
3
+ include AASM
4
+
5
+ def initialize(options={})
6
+ @fail_event_guard = options[:fail_event_guard]
7
+ @fail_transition_guard = options[:fail_transition_guard]
8
+ @log = options[:log]
9
+ reset_data
10
+ end
11
+
12
+ def reset_data
13
+ @data = []
14
+ end
15
+
16
+ def data
17
+ @data.join(' ')
18
+ end
19
+
20
+ aasm do
21
+ state :open, :initial => true
22
+ state :closed
23
+
24
+ event :close, :after => :after_event do
25
+ transitions :to => :closed, :from => [:open]
26
+ end
27
+
28
+ event :open, :after => :after_event do
29
+ transitions :to => :open, :from => :closed
30
+ end
31
+ end
32
+
33
+ def log(text)
34
+ @data << text
35
+ puts text if @log
36
+ end
37
+
38
+ def aasm_write_state(*args); log('aasm_write_state'); true; end
39
+
40
+ private
41
+
42
+ def after_event; log('after_event'); end
43
+ end
44
+ end
@@ -0,0 +1,44 @@
1
+ module Callbacks
2
+ class PrivateMethodMultiple
3
+ include AASM
4
+
5
+ def initialize(options={})
6
+ @fail_event_guard = options[:fail_event_guard]
7
+ @fail_transition_guard = options[:fail_transition_guard]
8
+ @log = options[:log]
9
+ reset_data
10
+ end
11
+
12
+ def reset_data
13
+ @data = []
14
+ end
15
+
16
+ def data
17
+ @data.join(' ')
18
+ end
19
+
20
+ aasm(:left) do
21
+ state :open, :initial => true
22
+ state :closed
23
+
24
+ event :close, :after => :after_event do
25
+ transitions :to => :closed, :from => [:open]
26
+ end
27
+
28
+ event :open, :after => :after_event do
29
+ transitions :to => :open, :from => :closed
30
+ end
31
+ end
32
+
33
+ def log(text)
34
+ @data << text
35
+ puts text if @log
36
+ end
37
+
38
+ def aasm_write_state(*args); log('aasm_write_state'); true; end
39
+
40
+ private
41
+
42
+ def after_event; log('after_event'); end
43
+ end
44
+ end
@@ -0,0 +1,62 @@
1
+ module Callbacks
2
+ class WithArgs
3
+ include AASM
4
+
5
+ def initialize(options={})
6
+ @log = options[:log]
7
+ reset_data
8
+ end
9
+
10
+ def reset_data
11
+ @data = []
12
+ end
13
+
14
+ def data
15
+ @data.join(' ')
16
+ end
17
+
18
+ aasm do
19
+ state :open, :initial => true,
20
+ :before_enter => :before_enter_open,
21
+ :after_enter => :after_enter_open,
22
+ :before_exit => :before_exit_open,
23
+ :after_exit => :after_exit_open
24
+
25
+ state :closed,
26
+ :before_enter => :before_enter_closed,
27
+ :after_enter => :after_enter_closed,
28
+ :before_exit => :before_exit_closed,
29
+ :after_exit => :after_exit_closed
30
+
31
+ event :close, :before => :before, :after => :after do
32
+ transitions :to => :closed, :from => [:open], :after => :transition_proc, :success => :transition_success_proc
33
+ end
34
+
35
+ event :open, :before => :before, :after => :after do
36
+ transitions :to => :open, :from => :closed
37
+ end
38
+ end
39
+
40
+ def log(text)
41
+ @data << text
42
+ puts text if @log
43
+ end
44
+
45
+ def aasm_write_state(*args); log('aasm_write_state'); true; end
46
+
47
+ def before_enter_open(*args); log("before_enter_open(#{args.map(&:inspect).join(',')})"); end
48
+ def before_exit_open(*args); log("before_exit_open(#{args.map(&:inspect).join(',')})"); end
49
+ def after_enter_open(*args); log("after_enter_open(#{args.map(&:inspect).join(',')})"); end
50
+ def after_exit_open(*args); log("after_exit_open(#{args.map(&:inspect).join(',')})"); end
51
+
52
+ def before_enter_closed(*args); log("before_enter_closed(#{args.map(&:inspect).join(',')})"); end
53
+ def before_exit_closed(*args); log("before_enter_closed(#{args.map(&:inspect).join(',')})"); end
54
+ def after_enter_closed(*args); log("after_enter_closed(#{args.map(&:inspect).join(',')})"); end
55
+ def after_exit_closed(*args); log("after_exit_closed(#{args.map(&:inspect).join(',')})"); end
56
+
57
+ def before(arg1, *args); log("before(#{arg1.inspect},#{args.map(&:inspect).join(',')})"); end
58
+ def transition_proc(arg1, arg2); log("transition_proc(#{arg1.inspect},#{arg2.inspect})"); end
59
+ def after(*args); log("after(#{args.map(&:inspect).join(',')})"); end
60
+ def transition_success_proc(*args); log("transition_success(#{args.map(&:inspect).join(',')})"); end
61
+ end
62
+ end