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