state_machines 0.5.0 → 0.6.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 (455) hide show
  1. checksums.yaml +5 -5
  2. data/LICENSE.txt +1 -1
  3. data/README.md +7 -4
  4. data/lib/state_machines/branch.rb +81 -79
  5. data/lib/state_machines/callback.rb +22 -21
  6. data/lib/state_machines/eval_helpers.rb +15 -15
  7. data/lib/state_machines/event.rb +31 -28
  8. data/lib/state_machines/event_collection.rb +26 -25
  9. data/lib/state_machines/extensions.rb +1 -1
  10. data/lib/state_machines/helper_module.rb +1 -1
  11. data/lib/state_machines/integrations.rb +8 -8
  12. data/lib/state_machines/machine.rb +372 -369
  13. data/lib/state_machines/machine_collection.rb +11 -10
  14. data/lib/state_machines/macro_methods.rb +100 -100
  15. data/lib/state_machines/matcher.rb +23 -23
  16. data/lib/state_machines/matcher_helpers.rb +11 -11
  17. data/lib/state_machines/node_collection.rb +15 -13
  18. data/lib/state_machines/path.rb +56 -55
  19. data/lib/state_machines/path_collection.rb +35 -35
  20. data/lib/state_machines/state.rb +7 -6
  21. data/lib/state_machines/state_collection.rb +20 -19
  22. data/lib/state_machines/state_context.rb +33 -35
  23. data/lib/state_machines/transition.rb +180 -178
  24. data/lib/state_machines/transition_collection.rb +170 -168
  25. data/lib/state_machines/version.rb +1 -1
  26. metadata +4 -434
  27. data/.gitignore +0 -21
  28. data/.rspec +0 -3
  29. data/.ruby-gemset +0 -1
  30. data/.ruby-version +0 -1
  31. data/.travis.yml +0 -16
  32. data/Changelog.md +0 -22
  33. data/Contributors.md +0 -39
  34. data/Gemfile +0 -8
  35. data/Rakefile +0 -12
  36. data/Testing.md +0 -0
  37. data/state_machines.gemspec +0 -22
  38. data/test/files/integrations/event_on_failure_integration.rb +0 -10
  39. data/test/files/integrations/vehicle.rb +0 -7
  40. data/test/files/models/auto_shop.rb +0 -31
  41. data/test/files/models/car.rb +0 -21
  42. data/test/files/models/driver.rb +0 -13
  43. data/test/files/models/model_base.rb +0 -6
  44. data/test/files/models/motorcycle.rb +0 -16
  45. data/test/files/models/traffic_light.rb +0 -47
  46. data/test/files/models/vehicle.rb +0 -127
  47. data/test/files/node.rb +0 -5
  48. data/test/files/switch.rb +0 -15
  49. data/test/functional/auto_shop_available_test.rb +0 -20
  50. data/test/functional/auto_shop_busy_test.rb +0 -25
  51. data/test/functional/car_backing_up_test.rb +0 -45
  52. data/test/functional/car_test.rb +0 -49
  53. data/test/functional/driver_default_nonstandard_test.rb +0 -13
  54. data/test/functional/motorcycle_test.rb +0 -52
  55. data/test/functional/traffic_light_caution_test.rb +0 -17
  56. data/test/functional/traffic_light_proceed_test.rb +0 -17
  57. data/test/functional/traffic_light_stop_test.rb +0 -26
  58. data/test/functional/vehicle_first_gear_test.rb +0 -42
  59. data/test/functional/vehicle_idling_test.rb +0 -59
  60. data/test/functional/vehicle_locked_test.rb +0 -29
  61. data/test/functional/vehicle_parked_test.rb +0 -53
  62. data/test/functional/vehicle_repaired_test.rb +0 -20
  63. data/test/functional/vehicle_second_gear_test.rb +0 -42
  64. data/test/functional/vehicle_stalled_test.rb +0 -65
  65. data/test/functional/vehicle_test.rb +0 -20
  66. data/test/functional/vehicle_third_gear_test.rb +0 -42
  67. data/test/functional/vehicle_unsaved_test.rb +0 -181
  68. data/test/functional/vehicle_with_event_attributes_test.rb +0 -30
  69. data/test/functional/vehicle_with_parallel_events_test.rb +0 -36
  70. data/test/test_helper.rb +0 -15
  71. data/test/unit/assertions/assert_exclusive_keys_test.rb +0 -22
  72. data/test/unit/assertions/assert_valid_key_test.rb +0 -12
  73. data/test/unit/branch/branch_test.rb +0 -28
  74. data/test/unit/branch/branch_with_conflicting_conditionals_test.rb +0 -27
  75. data/test/unit/branch/branch_with_conflicting_from_requirements_test.rb +0 -8
  76. data/test/unit/branch/branch_with_conflicting_on_requirements_test.rb +0 -8
  77. data/test/unit/branch/branch_with_conflicting_to_requirements_test.rb +0 -8
  78. data/test/unit/branch/branch_with_different_requirements_test.rb +0 -41
  79. data/test/unit/branch/branch_with_except_from_matcher_requirement_test.rb +0 -8
  80. data/test/unit/branch/branch_with_except_from_requirement_test.rb +0 -36
  81. data/test/unit/branch/branch_with_except_on_matcher_requirement_test.rb +0 -8
  82. data/test/unit/branch/branch_with_except_on_requirement_test.rb +0 -36
  83. data/test/unit/branch/branch_with_except_to_matcher_requirement_test.rb +0 -8
  84. data/test/unit/branch/branch_with_except_to_requirement_test.rb +0 -36
  85. data/test/unit/branch/branch_with_from_matcher_requirement_test.rb +0 -20
  86. data/test/unit/branch/branch_with_from_requirement_test.rb +0 -45
  87. data/test/unit/branch/branch_with_if_conditional_test.rb +0 -27
  88. data/test/unit/branch/branch_with_implicit_and_explicit_requirements_test.rb +0 -23
  89. data/test/unit/branch/branch_with_implicit_from_requirement_matcher_test.rb +0 -20
  90. data/test/unit/branch/branch_with_implicit_requirement_test.rb +0 -20
  91. data/test/unit/branch/branch_with_implicit_to_requirement_matcher_test.rb +0 -16
  92. data/test/unit/branch/branch_with_multiple_except_from_requirements_test.rb +0 -20
  93. data/test/unit/branch/branch_with_multiple_except_on_requirements_test.rb +0 -16
  94. data/test/unit/branch/branch_with_multiple_except_to_requirements_test.rb +0 -20
  95. data/test/unit/branch/branch_with_multiple_from_requirements_test.rb +0 -16
  96. data/test/unit/branch/branch_with_multiple_if_conditionals_test.rb +0 -20
  97. data/test/unit/branch/branch_with_multiple_implicit_requirements_test.rb +0 -53
  98. data/test/unit/branch/branch_with_multiple_to_requirements_test.rb +0 -20
  99. data/test/unit/branch/branch_with_multiple_unless_conditionals_test.rb +0 -20
  100. data/test/unit/branch/branch_with_nil_requirements_test.rb +0 -28
  101. data/test/unit/branch/branch_with_no_requirements_test.rb +0 -36
  102. data/test/unit/branch/branch_with_on_matcher_requirement_test.rb +0 -16
  103. data/test/unit/branch/branch_with_on_requirement_test.rb +0 -45
  104. data/test/unit/branch/branch_with_to_matcher_requirement_test.rb +0 -20
  105. data/test/unit/branch/branch_with_to_requirement_test.rb +0 -45
  106. data/test/unit/branch/branch_with_unless_conditional_test.rb +0 -27
  107. data/test/unit/branch/branch_without_guards_test.rb +0 -27
  108. data/test/unit/callback/callback_by_default_test.rb +0 -25
  109. data/test/unit/callback/callback_test.rb +0 -53
  110. data/test/unit/callback/callback_with_application_bound_object_test.rb +0 -23
  111. data/test/unit/callback/callback_with_application_terminator_test.rb +0 -24
  112. data/test/unit/callback/callback_with_arguments_test.rb +0 -14
  113. data/test/unit/callback/callback_with_around_type_and_arguments_test.rb +0 -25
  114. data/test/unit/callback/callback_with_around_type_and_block_test.rb +0 -44
  115. data/test/unit/callback/callback_with_around_type_and_bound_method_test.rb +0 -23
  116. data/test/unit/callback/callback_with_around_type_and_multiple_methods_test.rb +0 -93
  117. data/test/unit/callback/callback_with_around_type_and_terminator_test.rb +0 -17
  118. data/test/unit/callback/callback_with_block_test.rb +0 -20
  119. data/test/unit/callback/callback_with_bound_method_and_arguments_test.rb +0 -28
  120. data/test/unit/callback/callback_with_bound_method_test.rb +0 -35
  121. data/test/unit/callback/callback_with_do_method_test.rb +0 -18
  122. data/test/unit/callback/callback_with_explicit_requirements_test.rb +0 -32
  123. data/test/unit/callback/callback_with_if_condition_test.rb +0 -17
  124. data/test/unit/callback/callback_with_implicit_requirements_test.rb +0 -32
  125. data/test/unit/callback/callback_with_method_argument_test.rb +0 -18
  126. data/test/unit/callback/callback_with_mixed_methods_test.rb +0 -31
  127. data/test/unit/callback/callback_with_multiple_bound_methods_test.rb +0 -21
  128. data/test/unit/callback/callback_with_multiple_do_methods_test.rb +0 -29
  129. data/test/unit/callback/callback_with_multiple_method_arguments_test.rb +0 -29
  130. data/test/unit/callback/callback_with_terminator_test.rb +0 -22
  131. data/test/unit/callback/callback_with_unbound_method_test.rb +0 -14
  132. data/test/unit/callback/callback_with_unless_condition_test.rb +0 -17
  133. data/test/unit/callback/callback_without_arguments_test.rb +0 -14
  134. data/test/unit/callback/callback_without_terminator_test.rb +0 -12
  135. data/test/unit/error/error_by_default_test.rb +0 -21
  136. data/test/unit/error/error_with_message_test.rb +0 -23
  137. data/test/unit/eval_helper/eval_helpers_base_test.rb +0 -8
  138. data/test/unit/eval_helper/eval_helpers_proc_block_and_explicit_arguments_test.rb +0 -14
  139. data/test/unit/eval_helper/eval_helpers_proc_block_and_implicit_arguments_test.rb +0 -14
  140. data/test/unit/eval_helper/eval_helpers_proc_test.rb +0 -13
  141. data/test/unit/eval_helper/eval_helpers_proc_with_arguments_test.rb +0 -13
  142. data/test/unit/eval_helper/eval_helpers_proc_with_block_test.rb +0 -13
  143. data/test/unit/eval_helper/eval_helpers_proc_with_block_without_arguments_test.rb +0 -18
  144. data/test/unit/eval_helper/eval_helpers_proc_with_block_without_object_test.rb +0 -14
  145. data/test/unit/eval_helper/eval_helpers_proc_without_arguments_test.rb +0 -19
  146. data/test/unit/eval_helper/eval_helpers_string_test.rb +0 -25
  147. data/test/unit/eval_helper/eval_helpers_string_with_block_test.rb +0 -12
  148. data/test/unit/eval_helper/eval_helpers_symbol_method_missing_test.rb +0 -20
  149. data/test/unit/eval_helper/eval_helpers_symbol_private_test.rb +0 -17
  150. data/test/unit/eval_helper/eval_helpers_symbol_protected_test.rb +0 -17
  151. data/test/unit/eval_helper/eval_helpers_symbol_tainted_method_test.rb +0 -18
  152. data/test/unit/eval_helper/eval_helpers_symbol_test.rb +0 -16
  153. data/test/unit/eval_helper/eval_helpers_symbol_with_arguments_and_block_test.rb +0 -16
  154. data/test/unit/eval_helper/eval_helpers_symbol_with_arguments_test.rb +0 -16
  155. data/test/unit/eval_helper/eval_helpers_symbol_with_block_test.rb +0 -16
  156. data/test/unit/eval_helper/eval_helpers_test.rb +0 -13
  157. data/test/unit/event/event_after_being_copied_test.rb +0 -17
  158. data/test/unit/event/event_by_default_test.rb +0 -60
  159. data/test/unit/event/event_context_test.rb +0 -16
  160. data/test/unit/event/event_on_failure_test.rb +0 -44
  161. data/test/unit/event/event_test.rb +0 -34
  162. data/test/unit/event/event_transitions_test.rb +0 -62
  163. data/test/unit/event/event_with_conflicting_helpers_after_definition_test.rb +0 -79
  164. data/test/unit/event/event_with_conflicting_helpers_before_definition_test.rb +0 -58
  165. data/test/unit/event/event_with_conflicting_machine_test.rb +0 -48
  166. data/test/unit/event/event_with_dynamic_human_name_test.rb +0 -26
  167. data/test/unit/event/event_with_human_name_test.rb +0 -13
  168. data/test/unit/event/event_with_invalid_current_state_test.rb +0 -30
  169. data/test/unit/event/event_with_machine_action_test.rb +0 -33
  170. data/test/unit/event/event_with_marshalling_test.rb +0 -47
  171. data/test/unit/event/event_with_matching_disabled_transitions_test.rb +0 -115
  172. data/test/unit/event/event_with_matching_enabled_transitions_test.rb +0 -75
  173. data/test/unit/event/event_with_multiple_transitions_test.rb +0 -61
  174. data/test/unit/event/event_with_namespace_test.rb +0 -34
  175. data/test/unit/event/event_with_transition_with_blacklisted_to_state_test.rb +0 -60
  176. data/test/unit/event/event_with_transition_with_loopback_state_test.rb +0 -36
  177. data/test/unit/event/event_with_transition_with_nil_to_state_test.rb +0 -36
  178. data/test/unit/event/event_with_transition_with_whitelisted_to_state_test.rb +0 -51
  179. data/test/unit/event/event_with_transition_without_to_state_test.rb +0 -36
  180. data/test/unit/event/event_with_transitions_test.rb +0 -32
  181. data/test/unit/event/event_without_matching_transitions_test.rb +0 -41
  182. data/test/unit/event/event_without_transitions_test.rb +0 -28
  183. data/test/unit/event/invalid_event_test.rb +0 -20
  184. data/test/unit/event_collection/event_collection_attribute_with_machine_action_test.rb +0 -62
  185. data/test/unit/event_collection/event_collection_attribute_with_namespaced_machine_test.rb +0 -36
  186. data/test/unit/event_collection/event_collection_by_default_test.rb +0 -26
  187. data/test/unit/event_collection/event_collection_test.rb +0 -39
  188. data/test/unit/event_collection/event_collection_with_custom_machine_attribute_test.rb +0 -31
  189. data/test/unit/event_collection/event_collection_with_events_with_transitions_test.rb +0 -76
  190. data/test/unit/event_collection/event_collection_with_multiple_events_test.rb +0 -27
  191. data/test/unit/event_collection/event_collection_with_validations_test.rb +0 -74
  192. data/test/unit/event_collection/event_collection_without_machine_action_test.rb +0 -18
  193. data/test/unit/event_collection/event_string_collection_test.rb +0 -31
  194. data/test/unit/helper_module_test.rb +0 -17
  195. data/test/unit/integrations/integration_finder_test.rb +0 -16
  196. data/test/unit/integrations/integration_matcher_test.rb +0 -29
  197. data/test/unit/invalid_transition/invalid_parallel_transition_test.rb +0 -18
  198. data/test/unit/invalid_transition/invalid_transition_test.rb +0 -47
  199. data/test/unit/invalid_transition/invalid_transition_with_integration_test.rb +0 -45
  200. data/test/unit/invalid_transition/invalid_transition_with_namespace_test.rb +0 -32
  201. data/test/unit/machine/machine_after_being_copied_test.rb +0 -62
  202. data/test/unit/machine/machine_after_changing_initial_state.rb +0 -28
  203. data/test/unit/machine/machine_after_changing_owner_class_test.rb +0 -31
  204. data/test/unit/machine/machine_by_default_test.rb +0 -160
  205. data/test/unit/machine/machine_finder_custom_options_test.rb +0 -17
  206. data/test/unit/machine/machine_finder_with_existing_machine_on_superclass_test.rb +0 -85
  207. data/test/unit/machine/machine_finder_with_existing_on_same_class_test.rb +0 -23
  208. data/test/unit/machine/machine_finder_without_existing_machine_test.rb +0 -25
  209. data/test/unit/machine/machine_persistence_test.rb +0 -52
  210. data/test/unit/machine/machine_state_initialization_test.rb +0 -56
  211. data/test/unit/machine/machine_test.rb +0 -30
  212. data/test/unit/machine/machine_with_action_already_overridden_test.rb +0 -23
  213. data/test/unit/machine/machine_with_action_defined_in_class_test.rb +0 -37
  214. data/test/unit/machine/machine_with_action_defined_in_included_module_test.rb +0 -46
  215. data/test/unit/machine/machine_with_action_defined_in_superclass_test.rb +0 -43
  216. data/test/unit/machine/machine_with_action_undefined_test.rb +0 -33
  217. data/test/unit/machine/machine_with_cached_state_test.rb +0 -20
  218. data/test/unit/machine/machine_with_class_helpers_test.rb +0 -179
  219. data/test/unit/machine/machine_with_conflicting_helpers_after_definition_test.rb +0 -244
  220. data/test/unit/machine/machine_with_conflicting_helpers_before_definition_test.rb +0 -175
  221. data/test/unit/machine/machine_with_custom_action_test.rb +0 -11
  222. data/test/unit/machine/machine_with_custom_attribute_test.rb +0 -103
  223. data/test/unit/machine/machine_with_custom_initialize_test.rb +0 -24
  224. data/test/unit/machine/machine_with_custom_integration_test.rb +0 -72
  225. data/test/unit/machine/machine_with_custom_invalidation_test.rb +0 -39
  226. data/test/unit/machine/machine_with_custom_name_test.rb +0 -57
  227. data/test/unit/machine/machine_with_custom_plural_test.rb +0 -52
  228. data/test/unit/machine/machine_with_dynamic_initial_state_test.rb +0 -65
  229. data/test/unit/machine/machine_with_event_matchers_test.rb +0 -41
  230. data/test/unit/machine/machine_with_events_test.rb +0 -52
  231. data/test/unit/machine/machine_with_events_with_custom_human_names_test.rb +0 -18
  232. data/test/unit/machine/machine_with_events_with_transitions_test.rb +0 -37
  233. data/test/unit/machine/machine_with_existing_event_test.rb +0 -17
  234. data/test/unit/machine/machine_with_existing_machines_on_owner_class_test.rb +0 -20
  235. data/test/unit/machine/machine_with_existing_machines_with_same_attributes_on_owner_class_test.rb +0 -71
  236. data/test/unit/machine/machine_with_existing_machines_with_same_attributes_on_owner_subclass_test.rb +0 -31
  237. data/test/unit/machine/machine_with_existing_state_test.rb +0 -27
  238. data/test/unit/machine/machine_with_failure_callbacks_test.rb +0 -48
  239. data/test/unit/machine/machine_with_helpers_test.rb +0 -14
  240. data/test/unit/machine/machine_with_initial_state_with_value_and_owner_default.rb +0 -25
  241. data/test/unit/machine/machine_with_initialize_and_super_test.rb +0 -17
  242. data/test/unit/machine/machine_with_initialize_arguments_and_block_test.rb +0 -31
  243. data/test/unit/machine/machine_with_initialize_without_super_test.rb +0 -17
  244. data/test/unit/machine/machine_with_instance_helpers_test.rb +0 -179
  245. data/test/unit/machine/machine_with_integration_test.rb +0 -72
  246. data/test/unit/machine/machine_with_multiple_events_test.rb +0 -32
  247. data/test/unit/machine/machine_with_namespace_test.rb +0 -48
  248. data/test/unit/machine/machine_with_nil_action_test.rb +0 -27
  249. data/test/unit/machine/machine_with_other_states.rb +0 -22
  250. data/test/unit/machine/machine_with_owner_subclass_test.rb +0 -18
  251. data/test/unit/machine/machine_with_paths_test.rb +0 -25
  252. data/test/unit/machine/machine_with_private_action_test.rb +0 -43
  253. data/test/unit/machine/machine_with_state_matchers_test.rb +0 -41
  254. data/test/unit/machine/machine_with_state_with_matchers_test.rb +0 -19
  255. data/test/unit/machine/machine_with_states_test.rb +0 -55
  256. data/test/unit/machine/machine_with_states_with_behaviors_test.rb +0 -23
  257. data/test/unit/machine/machine_with_states_with_custom_human_names_test.rb +0 -18
  258. data/test/unit/machine/machine_with_states_with_custom_values_test.rb +0 -21
  259. data/test/unit/machine/machine_with_states_with_runtime_dependencies_test.rb +0 -19
  260. data/test/unit/machine/machine_with_static_initial_state_test.rb +0 -49
  261. data/test/unit/machine/machine_with_superclass_conflicting_helpers_after_definition_test.rb +0 -36
  262. data/test/unit/machine/machine_with_transition_callbacks_test.rb +0 -144
  263. data/test/unit/machine/machine_with_transitions_test.rb +0 -87
  264. data/test/unit/machine/machine_without_initialization_test.rb +0 -31
  265. data/test/unit/machine/machine_without_initialize_test.rb +0 -14
  266. data/test/unit/machine/machine_without_integration_test.rb +0 -31
  267. data/test/unit/machine_collection/machine_collection_by_default_test.rb +0 -11
  268. data/test/unit/machine_collection/machine_collection_fire_test.rb +0 -80
  269. data/test/unit/machine_collection/machine_collection_fire_with_transactions_test.rb +0 -54
  270. data/test/unit/machine_collection/machine_collection_fire_with_validations_test.rb +0 -76
  271. data/test/unit/machine_collection/machine_collection_state_initialization_test.rb +0 -111
  272. data/test/unit/machine_collection/machine_collection_transitions_with_blank_events_test.rb +0 -25
  273. data/test/unit/machine_collection/machine_collection_transitions_with_custom_options_test.rb +0 -20
  274. data/test/unit/machine_collection/machine_collection_transitions_with_different_actions_test.rb +0 -26
  275. data/test/unit/machine_collection/machine_collection_transitions_with_exisiting_transitions_test.rb +0 -25
  276. data/test/unit/machine_collection/machine_collection_transitions_with_invalid_events_test.rb +0 -25
  277. data/test/unit/machine_collection/machine_collection_transitions_with_same_actions_test.rb +0 -31
  278. data/test/unit/machine_collection/machine_collection_transitions_with_transition_test.rb +0 -26
  279. data/test/unit/machine_collection/machine_collection_transitions_without_events_test.rb +0 -25
  280. data/test/unit/machine_collection/machine_collection_transitions_without_transition_test.rb +0 -27
  281. data/test/unit/matcher/all_matcher_test.rb +0 -29
  282. data/test/unit/matcher/blacklist_matcher_test.rb +0 -30
  283. data/test/unit/matcher/loopback_matcher_test.rb +0 -27
  284. data/test/unit/matcher/matcher_by_default_test.rb +0 -15
  285. data/test/unit/matcher/matcher_with_multiple_values_test.rb +0 -15
  286. data/test/unit/matcher/matcher_with_value_test.rb +0 -15
  287. data/test/unit/matcher/whitelist_matcher_test.rb +0 -30
  288. data/test/unit/matcher_helpers/matcher_helpers_all_test.rb +0 -14
  289. data/test/unit/matcher_helpers/matcher_helpers_any_test.rb +0 -14
  290. data/test/unit/matcher_helpers/matcher_helpers_same_test.rb +0 -13
  291. data/test/unit/node_collection/node_collection_after_being_copied_test.rb +0 -46
  292. data/test/unit/node_collection/node_collection_after_update_test.rb +0 -36
  293. data/test/unit/node_collection/node_collection_by_default_test.rb +0 -22
  294. data/test/unit/node_collection/node_collection_test.rb +0 -23
  295. data/test/unit/node_collection/node_collection_with_indices_test.rb +0 -42
  296. data/test/unit/node_collection/node_collection_with_matcher_contexts_test.rb +0 -25
  297. data/test/unit/node_collection/node_collection_with_nodes_test.rb +0 -46
  298. data/test/unit/node_collection/node_collection_with_numeric_index_test.rb +0 -24
  299. data/test/unit/node_collection/node_collection_with_postdefined_contexts_test.rb +0 -22
  300. data/test/unit/node_collection/node_collection_with_predefined_contexts_test.rb +0 -23
  301. data/test/unit/node_collection/node_collection_with_string_index_test.rb +0 -20
  302. data/test/unit/node_collection/node_collection_with_symbol_index_test.rb +0 -20
  303. data/test/unit/node_collection/node_collection_without_indices_test.rb +0 -30
  304. data/test/unit/path/path_by_default_test.rb +0 -54
  305. data/test/unit/path/path_test.rb +0 -14
  306. data/test/unit/path/path_with_available_transitions_after_reaching_target_test.rb +0 -40
  307. data/test/unit/path/path_with_available_transitions_test.rb +0 -54
  308. data/test/unit/path/path_with_deep_target_reached_test.rb +0 -50
  309. data/test/unit/path/path_with_deep_target_test.rb +0 -40
  310. data/test/unit/path/path_with_duplicates_test.rb +0 -32
  311. data/test/unit/path/path_with_encountered_transitions_test.rb +0 -34
  312. data/test/unit/path/path_with_guarded_transitions_test.rb +0 -42
  313. data/test/unit/path/path_with_reached_target_test.rb +0 -35
  314. data/test/unit/path/path_with_transitions_test.rb +0 -54
  315. data/test/unit/path/path_with_unreached_target_test.rb +0 -31
  316. data/test/unit/path/path_without_transitions_test.rb +0 -24
  317. data/test/unit/path_collection/path_collection_by_default_test.rb +0 -46
  318. data/test/unit/path_collection/path_collection_test.rb +0 -24
  319. data/test/unit/path_collection/path_collection_with_deep_paths_test.rb +0 -43
  320. data/test/unit/path_collection/path_collection_with_duplicate_nodes_test.rb +0 -31
  321. data/test/unit/path_collection/path_collection_with_from_state_test.rb +0 -27
  322. data/test/unit/path_collection/path_collection_with_paths_test.rb +0 -47
  323. data/test/unit/path_collection/path_collection_with_to_state_test.rb +0 -29
  324. data/test/unit/path_collection/path_with_guarded_paths_test.rb +0 -25
  325. data/test/unit/state/state_after_being_copied_test.rb +0 -19
  326. data/test/unit/state/state_by_default_test.rb +0 -41
  327. data/test/unit/state/state_final_test.rb +0 -28
  328. data/test/unit/state/state_initial_test.rb +0 -13
  329. data/test/unit/state/state_not_final_test.rb +0 -32
  330. data/test/unit/state/state_not_initial_test.rb +0 -13
  331. data/test/unit/state/state_test.rb +0 -44
  332. data/test/unit/state/state_with_cached_lambda_value_test.rb +0 -29
  333. data/test/unit/state/state_with_conflicting_helpers_after_definition_test.rb +0 -38
  334. data/test/unit/state/state_with_conflicting_helpers_before_definition_test.rb +0 -29
  335. data/test/unit/state/state_with_conflicting_machine_name_test.rb +0 -20
  336. data/test/unit/state/state_with_conflicting_machine_test.rb +0 -37
  337. data/test/unit/state/state_with_context_test.rb +0 -60
  338. data/test/unit/state/state_with_dynamic_human_name_test.rb +0 -25
  339. data/test/unit/state/state_with_existing_context_method_test.rb +0 -24
  340. data/test/unit/state/state_with_human_name_test.rb +0 -13
  341. data/test/unit/state/state_with_integer_value_test.rb +0 -32
  342. data/test/unit/state/state_with_invalid_method_call_test.rb +0 -21
  343. data/test/unit/state/state_with_lambda_value_test.rb +0 -37
  344. data/test/unit/state/state_with_matcher_test.rb +0 -18
  345. data/test/unit/state/state_with_multiple_contexts_test.rb +0 -57
  346. data/test/unit/state/state_with_name_test.rb +0 -43
  347. data/test/unit/state/state_with_namespace_test.rb +0 -22
  348. data/test/unit/state/state_with_nil_value_test.rb +0 -35
  349. data/test/unit/state/state_with_redefined_context_method_test.rb +0 -45
  350. data/test/unit/state/state_with_symbolic_value_test.rb +0 -32
  351. data/test/unit/state/state_with_valid_inherited_method_call_for_current_state_test.rb +0 -40
  352. data/test/unit/state/state_with_valid_method_call_for_current_state_test.rb +0 -33
  353. data/test/unit/state/state_with_valid_method_call_for_different_state_test.rb +0 -41
  354. data/test/unit/state/state_without_cached_lambda_value_test.rb +0 -25
  355. data/test/unit/state/state_without_name_test.rb +0 -39
  356. data/test/unit/state_collection/state_collection_by_default_test.rb +0 -21
  357. data/test/unit/state_collection/state_collection_string_test.rb +0 -35
  358. data/test/unit/state_collection/state_collection_test.rb +0 -74
  359. data/test/unit/state_collection/state_collection_with_custom_state_values_test.rb +0 -29
  360. data/test/unit/state_collection/state_collection_with_event_transitions_test.rb +0 -39
  361. data/test/unit/state_collection/state_collection_with_initial_state_test.rb +0 -40
  362. data/test/unit/state_collection/state_collection_with_namespace_test.rb +0 -21
  363. data/test/unit/state_collection/state_collection_with_state_behaviors_test.rb +0 -40
  364. data/test/unit/state_collection/state_collection_with_state_matchers_test.rb +0 -29
  365. data/test/unit/state_collection/state_collection_with_transition_callbacks_test.rb +0 -40
  366. data/test/unit/state_context/state_context_proxy_test.rb +0 -26
  367. data/test/unit/state_context/state_context_proxy_with_if_and_unless_conditions_test.rb +0 -42
  368. data/test/unit/state_context/state_context_proxy_with_if_condition_test.rb +0 -64
  369. data/test/unit/state_context/state_context_proxy_with_multiple_if_conditions_test.rb +0 -32
  370. data/test/unit/state_context/state_context_proxy_with_multiple_unless_conditions_test.rb +0 -32
  371. data/test/unit/state_context/state_context_proxy_with_unless_condition_test.rb +0 -64
  372. data/test/unit/state_context/state_context_proxy_without_conditions_test.rb +0 -31
  373. data/test/unit/state_context/state_context_test.rb +0 -28
  374. data/test/unit/state_context/state_context_transition_test.rb +0 -104
  375. data/test/unit/state_context/state_context_with_matching_transition_test.rb +0 -27
  376. data/test/unit/state_machine/state_machine_by_default_test.rb +0 -12
  377. data/test/unit/state_machine/state_machine_test.rb +0 -20
  378. data/test/unit/transition/transition_after_being_performed_test.rb +0 -48
  379. data/test/unit/transition/transition_after_being_persisted_test.rb +0 -46
  380. data/test/unit/transition/transition_after_being_rolled_back_test.rb +0 -35
  381. data/test/unit/transition/transition_equality_test.rb +0 -52
  382. data/test/unit/transition/transition_loopback_test.rb +0 -18
  383. data/test/unit/transition/transition_test.rb +0 -96
  384. data/test/unit/transition/transition_transient_test.rb +0 -20
  385. data/test/unit/transition/transition_with_action_test.rb +0 -27
  386. data/test/unit/transition/transition_with_after_callbacks_skipped_test.rb +0 -127
  387. data/test/unit/transition/transition_with_after_callbacks_test.rb +0 -93
  388. data/test/unit/transition/transition_with_around_callbacks_test.rb +0 -141
  389. data/test/unit/transition/transition_with_before_callbacks_skipped_test.rb +0 -30
  390. data/test/unit/transition/transition_with_before_callbacks_test.rb +0 -104
  391. data/test/unit/transition/transition_with_custom_machine_attribute_test.rb +0 -28
  392. data/test/unit/transition/transition_with_different_states_test.rb +0 -18
  393. data/test/unit/transition/transition_with_dynamic_to_value_test.rb +0 -19
  394. data/test/unit/transition/transition_with_failure_callbacks_test.rb +0 -84
  395. data/test/unit/transition/transition_with_invalid_nodes_test.rb +0 -29
  396. data/test/unit/transition/transition_with_mixed_callbacks_test.rb +0 -105
  397. data/test/unit/transition/transition_with_multiple_after_callbacks_test.rb +0 -40
  398. data/test/unit/transition/transition_with_multiple_around_callbacks_test.rb +0 -114
  399. data/test/unit/transition/transition_with_multiple_before_callbacks_test.rb +0 -40
  400. data/test/unit/transition/transition_with_multiple_failure_callbacks_test.rb +0 -40
  401. data/test/unit/transition/transition_with_namespace_test.rb +0 -47
  402. data/test/unit/transition/transition_with_perform_arguments_test.rb +0 -35
  403. data/test/unit/transition/transition_with_transactions_test.rb +0 -42
  404. data/test/unit/transition/transition_without_callbacks_test.rb +0 -33
  405. data/test/unit/transition/transition_without_reading_state_test.rb +0 -22
  406. data/test/unit/transition/transition_without_running_action_test.rb +0 -47
  407. data/test/unit/transition_collection/attribute_transition_collection_by_default_test.rb +0 -23
  408. data/test/unit/transition_collection/attribute_transition_collection_marshalling_test.rb +0 -64
  409. data/test/unit/transition_collection/attribute_transition_collection_with_action_error_test.rb +0 -44
  410. data/test/unit/transition_collection/attribute_transition_collection_with_action_failed_test.rb +0 -44
  411. data/test/unit/transition_collection/attribute_transition_collection_with_after_callback_error_test.rb +0 -32
  412. data/test/unit/transition_collection/attribute_transition_collection_with_after_callback_halt_test.rb +0 -33
  413. data/test/unit/transition_collection/attribute_transition_collection_with_around_after_yield_callback_error_test.rb +0 -32
  414. data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_after_yield_error_test.rb +0 -32
  415. data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_after_yield_halt_test.rb +0 -33
  416. data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_before_yield_halt_test.rb +0 -33
  417. data/test/unit/transition_collection/attribute_transition_collection_with_before_callback_error_test.rb +0 -32
  418. data/test/unit/transition_collection/attribute_transition_collection_with_before_callback_halt_test.rb +0 -33
  419. data/test/unit/transition_collection/attribute_transition_collection_with_callbacks_test.rb +0 -68
  420. data/test/unit/transition_collection/attribute_transition_collection_with_event_transitions_test.rb +0 -41
  421. data/test/unit/transition_collection/attribute_transition_collection_with_events_test.rb +0 -44
  422. data/test/unit/transition_collection/attribute_transition_collection_with_skipped_after_callbacks_test.rb +0 -42
  423. data/test/unit/transition_collection/transition_collection_by_default_test.rb +0 -23
  424. data/test/unit/transition_collection/transition_collection_empty_with_block_test.rb +0 -23
  425. data/test/unit/transition_collection/transition_collection_empty_without_block_test.rb +0 -12
  426. data/test/unit/transition_collection/transition_collection_invalid_test.rb +0 -21
  427. data/test/unit/transition_collection/transition_collection_partial_invalid_test.rb +0 -69
  428. data/test/unit/transition_collection/transition_collection_test.rb +0 -26
  429. data/test/unit/transition_collection/transition_collection_valid_test.rb +0 -57
  430. data/test/unit/transition_collection/transition_collection_with_action_error_test.rb +0 -66
  431. data/test/unit/transition_collection/transition_collection_with_action_failed_test.rb +0 -60
  432. data/test/unit/transition_collection/transition_collection_with_action_hook_and_block_test.rb +0 -17
  433. data/test/unit/transition_collection/transition_collection_with_action_hook_and_skipped_action_test.rb +0 -17
  434. data/test/unit/transition_collection/transition_collection_with_action_hook_and_skipped_after_callbacks_test.rb +0 -37
  435. data/test/unit/transition_collection/transition_collection_with_action_hook_base_test.rb +0 -34
  436. data/test/unit/transition_collection/transition_collection_with_action_hook_error_test.rb +0 -29
  437. data/test/unit/transition_collection/transition_collection_with_action_hook_invalid_test.rb +0 -17
  438. data/test/unit/transition_collection/transition_collection_with_action_hook_multiple_test.rb +0 -79
  439. data/test/unit/transition_collection/transition_collection_with_action_hook_test.rb +0 -45
  440. data/test/unit/transition_collection/transition_collection_with_action_hook_with_different_actions_test.rb +0 -48
  441. data/test/unit/transition_collection/transition_collection_with_action_hook_with_nil_action_test.rb +0 -42
  442. data/test/unit/transition_collection/transition_collection_with_after_callback_halt_test.rb +0 -47
  443. data/test/unit/transition_collection/transition_collection_with_before_callback_halt_test.rb +0 -51
  444. data/test/unit/transition_collection/transition_collection_with_block_test.rb +0 -46
  445. data/test/unit/transition_collection/transition_collection_with_callbacks_test.rb +0 -135
  446. data/test/unit/transition_collection/transition_collection_with_different_actions_test.rb +0 -189
  447. data/test/unit/transition_collection/transition_collection_with_duplicate_actions_test.rb +0 -48
  448. data/test/unit/transition_collection/transition_collection_with_empty_actions_test.rb +0 -41
  449. data/test/unit/transition_collection/transition_collection_with_mixed_actions_test.rb +0 -41
  450. data/test/unit/transition_collection/transition_collection_with_skipped_actions_and_block_test.rb +0 -34
  451. data/test/unit/transition_collection/transition_collection_with_skipped_actions_test.rb +0 -69
  452. data/test/unit/transition_collection/transition_collection_with_skipped_after_callbacks_and_around_callbacks_test.rb +0 -53
  453. data/test/unit/transition_collection/transition_collection_with_skipped_after_callbacks_test.rb +0 -34
  454. data/test/unit/transition_collection/transition_collection_with_transactions_test.rb +0 -65
  455. data/test/unit/transition_collection/transition_collection_without_transactions_test.rb +0 -29
@@ -1,6 +1,6 @@
1
1
  module StateMachines
2
2
  # A transition represents a state change for a specific attribute.
3
- #
3
+ #
4
4
  # Transitions consist of:
5
5
  # * An event
6
6
  # * A starting state
@@ -8,32 +8,32 @@ module StateMachines
8
8
  class Transition
9
9
  # The object being transitioned
10
10
  attr_reader :object
11
-
11
+
12
12
  # The state machine for which this transition is defined
13
13
  attr_reader :machine
14
-
14
+
15
15
  # The original state value *before* the transition
16
16
  attr_reader :from
17
-
17
+
18
18
  # The new state value *after* the transition
19
19
  attr_reader :to
20
-
20
+
21
21
  # The arguments passed in to the event that triggered the transition
22
22
  # (does not include the +run_action+ boolean argument if specified)
23
23
  attr_accessor :args
24
-
24
+
25
25
  # The result of invoking the action associated with the machine
26
26
  attr_reader :result
27
-
27
+
28
28
  # Whether the transition is only existing temporarily for the object
29
29
  attr_writer :transient
30
-
30
+
31
31
  # Determines whether the current ruby implementation supports pausing and
32
32
  # resuming transitions
33
33
  def self.pause_supported?
34
34
  %w(ruby maglev).include?(RUBY_ENGINE)
35
35
  end
36
-
36
+
37
37
  # Creates a new, specific transition
38
38
  def initialize(object, machine, event, from_name, to_name, read_state = true) #:nodoc:
39
39
  @object = object
@@ -41,114 +41,114 @@ module StateMachines
41
41
  @args = []
42
42
  @transient = false
43
43
  @resume_block = nil
44
-
44
+
45
45
  @event = machine.events.fetch(event)
46
46
  @from_state = machine.states.fetch(from_name)
47
47
  @from = read_state ? machine.read(object, :state) : @from_state.value
48
48
  @to_state = machine.states.fetch(to_name)
49
49
  @to = @to_state.value
50
-
50
+
51
51
  reset
52
52
  end
53
-
53
+
54
54
  # The attribute which this transition's machine is defined for
55
55
  def attribute
56
56
  machine.attribute
57
57
  end
58
-
58
+
59
59
  # The action that will be run when this transition is performed
60
60
  def action
61
61
  machine.action
62
62
  end
63
-
63
+
64
64
  # The event that triggered the transition
65
65
  def event
66
66
  @event.name
67
67
  end
68
-
68
+
69
69
  # The fully-qualified name of the event that triggered the transition
70
70
  def qualified_event
71
71
  @event.qualified_name
72
72
  end
73
-
73
+
74
74
  # The human-readable name of the event that triggered the transition
75
75
  def human_event
76
76
  @event.human_name(@object.class)
77
77
  end
78
-
78
+
79
79
  # The state name *before* the transition
80
80
  def from_name
81
81
  @from_state.name
82
82
  end
83
-
83
+
84
84
  # The fully-qualified state name *before* the transition
85
85
  def qualified_from_name
86
86
  @from_state.qualified_name
87
87
  end
88
-
88
+
89
89
  # The human-readable state name *before* the transition
90
90
  def human_from_name
91
91
  @from_state.human_name(@object.class)
92
92
  end
93
-
93
+
94
94
  # The new state name *after* the transition
95
95
  def to_name
96
96
  @to_state.name
97
97
  end
98
-
98
+
99
99
  # The new fully-qualified state name *after* the transition
100
100
  def qualified_to_name
101
101
  @to_state.qualified_name
102
102
  end
103
-
103
+
104
104
  # The new human-readable state name *after* the transition
105
105
  def human_to_name
106
106
  @to_state.human_name(@object.class)
107
107
  end
108
-
108
+
109
109
  # Does this transition represent a loopback (i.e. the from and to state
110
110
  # are the same)
111
- #
111
+ #
112
112
  # == Example
113
- #
113
+ #
114
114
  # machine = StateMachine.new(Vehicle)
115
115
  # StateMachines::Transition.new(Vehicle.new, machine, :park, :parked, :parked).loopback? # => true
116
116
  # StateMachines::Transition.new(Vehicle.new, machine, :park, :idling, :parked).loopback? # => false
117
117
  def loopback?
118
118
  from_name == to_name
119
119
  end
120
-
120
+
121
121
  # Is this transition existing for a short period only? If this is set, it
122
122
  # indicates that the transition (or the event backing it) should not be
123
123
  # written to the object if it fails.
124
124
  def transient?
125
125
  @transient
126
126
  end
127
-
127
+
128
128
  # A hash of all the core attributes defined for this transition with their
129
129
  # names as keys and values of the attributes as values.
130
- #
130
+ #
131
131
  # == Example
132
- #
132
+ #
133
133
  # machine = StateMachine.new(Vehicle)
134
134
  # transition = StateMachines::Transition.new(Vehicle.new, machine, :ignite, :parked, :idling)
135
135
  # transition.attributes # => {:object => #<Vehicle:0xb7d60ea4>, :attribute => :state, :event => :ignite, :from => 'parked', :to => 'idling'}
136
136
  def attributes
137
- @attributes ||= {:object => object, :attribute => attribute, :event => event, :from => from, :to => to}
137
+ @attributes ||= {object: object, attribute: attribute, event: event, from: from, to: to}
138
138
  end
139
-
139
+
140
140
  # Runs the actual transition and any before/after callbacks associated
141
141
  # with the transition. The action associated with the transition/machine
142
142
  # can be skipped by passing in +false+.
143
- #
143
+ #
144
144
  # == Examples
145
- #
145
+ #
146
146
  # class Vehicle
147
147
  # state_machine :action => :save do
148
148
  # ...
149
149
  # end
150
150
  # end
151
- #
151
+ #
152
152
  # vehicle = Vehicle.new
153
153
  # transition = StateMachines::Transition.new(vehicle, machine, :ignite, :parked, :idling)
154
154
  # transition.perform # => Runs the +save+ action after setting the state attribute
@@ -158,11 +158,11 @@ module StateMachines
158
158
  def perform(*args)
159
159
  run_action = [true, false].include?(args.last) ? args.pop : true
160
160
  self.args = args
161
-
161
+
162
162
  # Run the transition
163
163
  !!TransitionCollection.new([self], {use_transactions: machine.use_transactions, actions: run_action}).perform
164
164
  end
165
-
165
+
166
166
  # Runs a block within a transaction for the object being transitioned.
167
167
  # By default, transactions are a no-op unless otherwise defined by the
168
168
  # machine's integration.
@@ -171,38 +171,38 @@ module StateMachines
171
171
  yield
172
172
  end
173
173
  end
174
-
174
+
175
175
  # Runs the before / after callbacks for this transition. If a block is
176
176
  # provided, then it will be executed between the before and after callbacks.
177
- #
177
+ #
178
178
  # Configuration options:
179
179
  # * +before+ - Whether to run before callbacks.
180
180
  # * +after+ - Whether to run after callbacks. If false, then any around
181
181
  # callbacks will be paused until called again with +after+ enabled.
182
182
  # Default is true.
183
- #
183
+ #
184
184
  # This will return true if all before callbacks gets executed. After
185
185
  # callbacks will not have an effect on the result.
186
186
  def run_callbacks(options = {}, &block)
187
- options = {:before => true, :after => true}.merge(options)
187
+ options = {before: true, after: true}.merge(options)
188
188
  @success = false
189
-
189
+
190
190
  halted = pausable { before(options[:after], &block) } if options[:before]
191
-
191
+
192
192
  # After callbacks are only run if:
193
193
  # * An around callback didn't halt after yielding
194
194
  # * They're enabled or the run didn't succeed
195
195
  after if !(@before_run && halted) && (options[:after] || !@success)
196
-
196
+
197
197
  @before_run
198
198
  end
199
-
199
+
200
200
  # Transitions the current value of the state to that specified by the
201
201
  # transition. Once the state is persisted, it cannot be persisted again
202
202
  # until this transition is reset.
203
- #
203
+ #
204
204
  # == Example
205
- #
205
+ #
206
206
  # class Vehicle
207
207
  # state_machine do
208
208
  # event :ignite do
@@ -210,11 +210,11 @@ module StateMachines
210
210
  # end
211
211
  # end
212
212
  # end
213
- #
213
+ #
214
214
  # vehicle = Vehicle.new
215
215
  # transition = StateMachines::Transition.new(vehicle, Vehicle.state_machine, :ignite, :parked, :idling)
216
216
  # transition.persist
217
- #
217
+ #
218
218
  # vehicle.state # => 'idling'
219
219
  def persist
220
220
  unless @persisted
@@ -222,12 +222,12 @@ module StateMachines
222
222
  @persisted = true
223
223
  end
224
224
  end
225
-
225
+
226
226
  # Rolls back changes made to the object's state via this transition. This
227
227
  # will revert the state back to the +from+ value.
228
- #
228
+ #
229
229
  # == Example
230
- #
230
+ #
231
231
  # class Vehicle
232
232
  # state_machine :initial => :parked do
233
233
  # event :ignite do
@@ -235,15 +235,15 @@ module StateMachines
235
235
  # end
236
236
  # end
237
237
  # end
238
- #
238
+ #
239
239
  # vehicle = Vehicle.new # => #<Vehicle:0xb7b7f568 @state="parked">
240
240
  # transition = StateMachines::Transition.new(vehicle, Vehicle.state_machine, :ignite, :parked, :idling)
241
- #
241
+ #
242
242
  # # Persist the new state
243
243
  # vehicle.state # => "parked"
244
244
  # transition.persist
245
245
  # vehicle.state # => "idling"
246
- #
246
+ #
247
247
  # # Roll back to the original state
248
248
  # transition.rollback
249
249
  # vehicle.state # => "parked"
@@ -251,14 +251,14 @@ module StateMachines
251
251
  reset
252
252
  machine.write(object, :state, from)
253
253
  end
254
-
254
+
255
255
  # Resets any tracking of which callbacks have already been run and whether
256
256
  # the state has already been persisted
257
257
  def reset
258
258
  @before_run = @persisted = @after_run = false
259
259
  @paused_block = nil
260
260
  end
261
-
261
+
262
262
  # Determines equality of transitions by testing whether the object, states,
263
263
  # and event involved in the transition are equal
264
264
  def ==(other)
@@ -269,146 +269,148 @@ module StateMachines
269
269
  other.to_name == to_name &&
270
270
  other.event == event
271
271
  end
272
-
272
+
273
273
  # Generates a nicely formatted description of this transitions's contents.
274
- #
274
+ #
275
275
  # For example,
276
- #
276
+ #
277
277
  # transition = StateMachines::Transition.new(object, machine, :ignite, :parked, :idling)
278
278
  # transition # => #<StateMachines::Transition attribute=:state event=:ignite from="parked" from_name=:parked to="idling" to_name=:idling>
279
279
  def inspect
280
- "#<#{self.class} #{%w(attribute event from from_name to to_name).map {|attr| "#{attr}=#{send(attr).inspect}"} * ' '}>"
280
+ "#<#{self.class} #{%w(attribute event from from_name to to_name).map { |attr| "#{attr}=#{send(attr).inspect}" } * ' '}>"
281
281
  end
282
-
283
- private
284
- # Runs a block that may get paused. If the block doesn't pause, then
285
- # execution will continue as normal. If the block gets paused, then it
286
- # will take care of switching the execution context when it's resumed.
287
- #
288
- # This will return true if the given block halts for a reason other than
289
- # getting paused.
290
- def pausable
291
- begin
292
- halted = !catch(:halt) { yield; true }
293
- rescue => error
294
- raise unless @resume_block
295
- end
296
-
297
- if @resume_block
298
- @resume_block.call(halted, error)
299
- else
300
- halted
301
- end
282
+
283
+ private
284
+
285
+ # Runs a block that may get paused. If the block doesn't pause, then
286
+ # execution will continue as normal. If the block gets paused, then it
287
+ # will take care of switching the execution context when it's resumed.
288
+ #
289
+ # This will return true if the given block halts for a reason other than
290
+ # getting paused.
291
+ def pausable
292
+ begin
293
+ halted = !catch(:halt) { yield; true }
294
+ rescue => error
295
+ raise unless @resume_block
302
296
  end
303
-
304
- # Pauses the current callback execution. This should only occur within
305
- # around callbacks when the remainder of the callback will be executed at
306
- # a later point in time.
307
- def pause
308
- raise ArgumentError, 'around_transition callbacks cannot be called in multiple execution contexts in java implementations of Ruby. Use before/after_transitions instead.' unless self.class.pause_supported?
309
-
310
- unless @resume_block
311
- require 'continuation' unless defined?(callcc)
312
- callcc do |block|
313
- @paused_block = block
314
- throw :halt, true
315
- end
297
+
298
+ if @resume_block
299
+ @resume_block.call(halted, error)
300
+ else
301
+ halted
302
+ end
303
+ end
304
+
305
+ # Pauses the current callback execution. This should only occur within
306
+ # around callbacks when the remainder of the callback will be executed at
307
+ # a later point in time.
308
+ def pause
309
+ raise ArgumentError, 'around_transition callbacks cannot be called in multiple execution contexts in java implementations of Ruby. Use before/after_transitions instead.' unless self.class.pause_supported?
310
+
311
+ unless @resume_block
312
+ require 'continuation' unless defined?(callcc)
313
+ callcc do |block|
314
+ @paused_block = block
315
+ throw :halt, true
316
316
  end
317
317
  end
318
-
319
- # Resumes the execution of a previously paused callback execution. Once
320
- # the paused callbacks complete, the current execution will continue.
321
- def resume
322
- if @paused_block
323
- halted, error = callcc do |block|
324
- @resume_block = block
325
- @paused_block.call
326
- end
327
-
328
- @resume_block = @paused_block = nil
329
-
330
- raise error if error
331
- !halted
332
- else
333
- true
318
+ end
319
+
320
+ # Resumes the execution of a previously paused callback execution. Once
321
+ # the paused callbacks complete, the current execution will continue.
322
+ def resume
323
+ if @paused_block
324
+ halted, error = callcc do |block|
325
+ @resume_block = block
326
+ @paused_block.call
334
327
  end
328
+
329
+ @resume_block = @paused_block = nil
330
+
331
+ raise error if error
332
+
333
+ !halted
334
+ else
335
+ true
335
336
  end
336
-
337
- # Runs the machine's +before+ callbacks for this transition. Only
338
- # callbacks that are configured to match the event, from state, and to
339
- # state will be invoked.
340
- #
341
- # Once the callbacks are run, they cannot be run again until this transition
342
- # is reset.
343
- def before(complete = true, index = 0, &block)
344
- unless @before_run
345
- while callback = machine.callbacks[:before][index]
346
- index += 1
347
-
348
- if callback.type == :around
349
- # Around callback: need to handle recursively. Execution only gets
350
- # paused if:
351
- # * The block fails and the callback doesn't run on failures OR
352
- # * The block succeeds, but after callbacks are disabled (in which
353
- # case a continuation is stored for later execution)
354
- return if catch(:cancel) do
355
- callback.call(object, context, self) do
356
- before(complete, index, &block)
357
-
358
- pause if @success && !complete
359
- throw :cancel, true unless @success
360
- end
337
+ end
338
+
339
+ # Runs the machine's +before+ callbacks for this transition. Only
340
+ # callbacks that are configured to match the event, from state, and to
341
+ # state will be invoked.
342
+ #
343
+ # Once the callbacks are run, they cannot be run again until this transition
344
+ # is reset.
345
+ def before(complete = true, index = 0, &block)
346
+ unless @before_run
347
+ while callback = machine.callbacks[:before][index]
348
+ index += 1
349
+
350
+ if callback.type == :around
351
+ # Around callback: need to handle recursively. Execution only gets
352
+ # paused if:
353
+ # * The block fails and the callback doesn't run on failures OR
354
+ # * The block succeeds, but after callbacks are disabled (in which
355
+ # case a continuation is stored for later execution)
356
+ return if catch(:cancel) do
357
+ callback.call(object, context, self) do
358
+ before(complete, index, &block)
359
+
360
+ pause if @success && !complete
361
+ throw :cancel, true unless @success
361
362
  end
362
- else
363
- # Normal before callback
364
- callback.call(object, context, self)
365
363
  end
364
+ else
365
+ # Normal before callback
366
+ callback.call(object, context, self)
366
367
  end
367
-
368
- @before_run = true
369
368
  end
370
-
371
- action = {:success => true}.merge(block_given? ? yield : {})
372
- @result, @success = action[:result], action[:success]
369
+
370
+ @before_run = true
373
371
  end
374
-
375
- # Runs the machine's +after+ callbacks for this transition. Only
376
- # callbacks that are configured to match the event, from state, and to
377
- # state will be invoked.
378
- #
379
- # Once the callbacks are run, they cannot be run again until this transition
380
- # is reset.
381
- #
382
- # == Halting
383
- #
384
- # If any callback throws a <tt>:halt</tt> exception, it will be caught
385
- # and the callback chain will be automatically stopped. However, this
386
- # exception will not bubble up to the caller since +after+ callbacks
387
- # should never halt the execution of a +perform+.
388
- def after
389
- unless @after_run
390
- # First resume previously paused callbacks
391
- if resume
392
- catch(:halt) do
393
- type = @success ? :after : :failure
394
- machine.callbacks[type].each {|callback| callback.call(object, context, self)}
395
- end
372
+
373
+ action = {success: true}.merge(block_given? ? yield : {})
374
+ @result, @success = action[:result], action[:success]
375
+ end
376
+
377
+ # Runs the machine's +after+ callbacks for this transition. Only
378
+ # callbacks that are configured to match the event, from state, and to
379
+ # state will be invoked.
380
+ #
381
+ # Once the callbacks are run, they cannot be run again until this transition
382
+ # is reset.
383
+ #
384
+ # == Halting
385
+ #
386
+ # If any callback throws a <tt>:halt</tt> exception, it will be caught
387
+ # and the callback chain will be automatically stopped. However, this
388
+ # exception will not bubble up to the caller since +after+ callbacks
389
+ # should never halt the execution of a +perform+.
390
+ def after
391
+ unless @after_run
392
+ # First resume previously paused callbacks
393
+ if resume
394
+ catch(:halt) do
395
+ type = @success ? :after : :failure
396
+ machine.callbacks[type].each { |callback| callback.call(object, context, self) }
396
397
  end
397
-
398
- @after_run = true
399
398
  end
399
+
400
+ @after_run = true
400
401
  end
401
-
402
- # Gets a hash of the context defining this unique transition (including
403
- # event, from state, and to state).
404
- #
405
- # == Example
406
- #
407
- # machine = StateMachine.new(Vehicle)
408
- # transition = StateMachines::Transition.new(Vehicle.new, machine, :ignite, :parked, :idling)
409
- # transition.context # => {:on => :ignite, :from => :parked, :to => :idling}
410
- def context
411
- @context ||= {:on => event, :from => from_name, :to => to_name}
412
- end
402
+ end
403
+
404
+ # Gets a hash of the context defining this unique transition (including
405
+ # event, from state, and to state).
406
+ #
407
+ # == Example
408
+ #
409
+ # machine = StateMachine.new(Vehicle)
410
+ # transition = StateMachines::Transition.new(Vehicle.new, machine, :ignite, :parked, :idling)
411
+ # transition.context # => {:on => :ignite, :from => :parked, :to => :idling}
412
+ def context
413
+ @context ||= {on: event, from: from_name, to: to_name}
414
+ end
413
415
  end
414
416
  end