state_machines 0.4.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 (454) hide show
  1. checksums.yaml +5 -5
  2. data/LICENSE.txt +1 -1
  3. data/README.md +18 -13
  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 +2 -2
  10. data/lib/state_machines/helper_module.rb +1 -1
  11. data/lib/state_machines/integrations/base.rb +2 -5
  12. data/lib/state_machines/integrations.rb +9 -13
  13. data/lib/state_machines/machine.rb +386 -379
  14. data/lib/state_machines/machine_collection.rb +11 -10
  15. data/lib/state_machines/macro_methods.rb +100 -100
  16. data/lib/state_machines/matcher.rb +23 -23
  17. data/lib/state_machines/matcher_helpers.rb +11 -11
  18. data/lib/state_machines/node_collection.rb +15 -13
  19. data/lib/state_machines/path.rb +56 -55
  20. data/lib/state_machines/path_collection.rb +38 -38
  21. data/lib/state_machines/state.rb +28 -22
  22. data/lib/state_machines/state_collection.rb +21 -20
  23. data/lib/state_machines/state_context.rb +33 -35
  24. data/lib/state_machines/transition.rb +180 -178
  25. data/lib/state_machines/transition_collection.rb +170 -168
  26. data/lib/state_machines/version.rb +1 -1
  27. metadata +5 -852
  28. data/.gitignore +0 -21
  29. data/.rspec +0 -3
  30. data/.travis.yml +0 -14
  31. data/Changelog.md +0 -16
  32. data/Contributors.md +0 -39
  33. data/Gemfile +0 -8
  34. data/Rakefile +0 -12
  35. data/Testing.md +0 -0
  36. data/state_machines.gemspec +0 -23
  37. data/test/files/integrations/event_on_failure_integration.rb +0 -10
  38. data/test/files/integrations/vehicle.rb +0 -7
  39. data/test/files/models/auto_shop.rb +0 -31
  40. data/test/files/models/car.rb +0 -21
  41. data/test/files/models/model_base.rb +0 -6
  42. data/test/files/models/motorcycle.rb +0 -11
  43. data/test/files/models/traffic_light.rb +0 -47
  44. data/test/files/models/vehicle.rb +0 -127
  45. data/test/files/node.rb +0 -5
  46. data/test/files/switch.rb +0 -15
  47. data/test/functional/auto_shop_available_test.rb +0 -20
  48. data/test/functional/auto_shop_busy_test.rb +0 -25
  49. data/test/functional/car_backing_up_test.rb +0 -45
  50. data/test/functional/car_test.rb +0 -49
  51. data/test/functional/motorcycle_test.rb +0 -46
  52. data/test/functional/traffic_light_caution_test.rb +0 -17
  53. data/test/functional/traffic_light_proceed_test.rb +0 -17
  54. data/test/functional/traffic_light_stop_test.rb +0 -26
  55. data/test/functional/vehicle_first_gear_test.rb +0 -42
  56. data/test/functional/vehicle_idling_test.rb +0 -59
  57. data/test/functional/vehicle_locked_test.rb +0 -29
  58. data/test/functional/vehicle_parked_test.rb +0 -53
  59. data/test/functional/vehicle_repaired_test.rb +0 -20
  60. data/test/functional/vehicle_second_gear_test.rb +0 -42
  61. data/test/functional/vehicle_stalled_test.rb +0 -65
  62. data/test/functional/vehicle_test.rb +0 -20
  63. data/test/functional/vehicle_third_gear_test.rb +0 -42
  64. data/test/functional/vehicle_unsaved_test.rb +0 -181
  65. data/test/functional/vehicle_with_event_attributes_test.rb +0 -30
  66. data/test/functional/vehicle_with_parallel_events_test.rb +0 -36
  67. data/test/test_helper.rb +0 -15
  68. data/test/unit/assertions/assert_exclusive_keys_test.rb +0 -22
  69. data/test/unit/assertions/assert_valid_key_test.rb +0 -12
  70. data/test/unit/branch/branch_test.rb +0 -28
  71. data/test/unit/branch/branch_with_conflicting_conditionals_test.rb +0 -27
  72. data/test/unit/branch/branch_with_conflicting_from_requirements_test.rb +0 -8
  73. data/test/unit/branch/branch_with_conflicting_on_requirements_test.rb +0 -8
  74. data/test/unit/branch/branch_with_conflicting_to_requirements_test.rb +0 -8
  75. data/test/unit/branch/branch_with_different_requirements_test.rb +0 -41
  76. data/test/unit/branch/branch_with_except_from_matcher_requirement_test.rb +0 -8
  77. data/test/unit/branch/branch_with_except_from_requirement_test.rb +0 -36
  78. data/test/unit/branch/branch_with_except_on_matcher_requirement_test.rb +0 -8
  79. data/test/unit/branch/branch_with_except_on_requirement_test.rb +0 -36
  80. data/test/unit/branch/branch_with_except_to_matcher_requirement_test.rb +0 -8
  81. data/test/unit/branch/branch_with_except_to_requirement_test.rb +0 -36
  82. data/test/unit/branch/branch_with_from_matcher_requirement_test.rb +0 -20
  83. data/test/unit/branch/branch_with_from_requirement_test.rb +0 -45
  84. data/test/unit/branch/branch_with_if_conditional_test.rb +0 -27
  85. data/test/unit/branch/branch_with_implicit_and_explicit_requirements_test.rb +0 -23
  86. data/test/unit/branch/branch_with_implicit_from_requirement_matcher_test.rb +0 -20
  87. data/test/unit/branch/branch_with_implicit_requirement_test.rb +0 -20
  88. data/test/unit/branch/branch_with_implicit_to_requirement_matcher_test.rb +0 -16
  89. data/test/unit/branch/branch_with_multiple_except_from_requirements_test.rb +0 -20
  90. data/test/unit/branch/branch_with_multiple_except_on_requirements_test.rb +0 -16
  91. data/test/unit/branch/branch_with_multiple_except_to_requirements_test.rb +0 -20
  92. data/test/unit/branch/branch_with_multiple_from_requirements_test.rb +0 -16
  93. data/test/unit/branch/branch_with_multiple_if_conditionals_test.rb +0 -20
  94. data/test/unit/branch/branch_with_multiple_implicit_requirements_test.rb +0 -53
  95. data/test/unit/branch/branch_with_multiple_on_requirements_test.rb +0 -20
  96. data/test/unit/branch/branch_with_multiple_to_requirements_test.rb +0 -20
  97. data/test/unit/branch/branch_with_multiple_unless_conditionals_test.rb +0 -20
  98. data/test/unit/branch/branch_with_nil_requirements_test.rb +0 -28
  99. data/test/unit/branch/branch_with_no_requirements_test.rb +0 -36
  100. data/test/unit/branch/branch_with_on_matcher_requirement_test.rb +0 -16
  101. data/test/unit/branch/branch_with_on_requirement_test.rb +0 -45
  102. data/test/unit/branch/branch_with_to_matcher_requirement_test.rb +0 -20
  103. data/test/unit/branch/branch_with_to_requirement_test.rb +0 -45
  104. data/test/unit/branch/branch_with_unless_conditional_test.rb +0 -27
  105. data/test/unit/branch/branch_without_guards_test.rb +0 -27
  106. data/test/unit/callback/callback_by_default_test.rb +0 -25
  107. data/test/unit/callback/callback_test.rb +0 -53
  108. data/test/unit/callback/callback_with_application_bound_object_test.rb +0 -23
  109. data/test/unit/callback/callback_with_application_terminator_test.rb +0 -24
  110. data/test/unit/callback/callback_with_arguments_test.rb +0 -14
  111. data/test/unit/callback/callback_with_around_type_and_arguments_test.rb +0 -25
  112. data/test/unit/callback/callback_with_around_type_and_block_test.rb +0 -44
  113. data/test/unit/callback/callback_with_around_type_and_bound_method_test.rb +0 -23
  114. data/test/unit/callback/callback_with_around_type_and_multiple_methods_test.rb +0 -93
  115. data/test/unit/callback/callback_with_around_type_and_terminator_test.rb +0 -17
  116. data/test/unit/callback/callback_with_block_test.rb +0 -20
  117. data/test/unit/callback/callback_with_bound_method_and_arguments_test.rb +0 -28
  118. data/test/unit/callback/callback_with_bound_method_test.rb +0 -35
  119. data/test/unit/callback/callback_with_do_method_test.rb +0 -18
  120. data/test/unit/callback/callback_with_explicit_requirements_test.rb +0 -32
  121. data/test/unit/callback/callback_with_if_condition_test.rb +0 -17
  122. data/test/unit/callback/callback_with_implicit_requirements_test.rb +0 -32
  123. data/test/unit/callback/callback_with_method_argument_test.rb +0 -18
  124. data/test/unit/callback/callback_with_mixed_methods_test.rb +0 -31
  125. data/test/unit/callback/callback_with_multiple_bound_methods_test.rb +0 -21
  126. data/test/unit/callback/callback_with_multiple_do_methods_test.rb +0 -29
  127. data/test/unit/callback/callback_with_multiple_method_arguments_test.rb +0 -29
  128. data/test/unit/callback/callback_with_terminator_test.rb +0 -22
  129. data/test/unit/callback/callback_with_unbound_method_test.rb +0 -14
  130. data/test/unit/callback/callback_with_unless_condition_test.rb +0 -17
  131. data/test/unit/callback/callback_without_arguments_test.rb +0 -14
  132. data/test/unit/callback/callback_without_terminator_test.rb +0 -12
  133. data/test/unit/error/error_by_default_test.rb +0 -21
  134. data/test/unit/error/error_with_message_test.rb +0 -23
  135. data/test/unit/eval_helper/eval_helpers_base_test.rb +0 -8
  136. data/test/unit/eval_helper/eval_helpers_proc_block_and_explicit_arguments_test.rb +0 -14
  137. data/test/unit/eval_helper/eval_helpers_proc_block_and_implicit_arguments_test.rb +0 -14
  138. data/test/unit/eval_helper/eval_helpers_proc_test.rb +0 -13
  139. data/test/unit/eval_helper/eval_helpers_proc_with_arguments_test.rb +0 -13
  140. data/test/unit/eval_helper/eval_helpers_proc_with_block_test.rb +0 -13
  141. data/test/unit/eval_helper/eval_helpers_proc_with_block_without_arguments_test.rb +0 -18
  142. data/test/unit/eval_helper/eval_helpers_proc_with_block_without_object_test.rb +0 -14
  143. data/test/unit/eval_helper/eval_helpers_proc_without_arguments_test.rb +0 -19
  144. data/test/unit/eval_helper/eval_helpers_string_test.rb +0 -25
  145. data/test/unit/eval_helper/eval_helpers_string_with_block_test.rb +0 -12
  146. data/test/unit/eval_helper/eval_helpers_symbol_method_missing_test.rb +0 -20
  147. data/test/unit/eval_helper/eval_helpers_symbol_private_test.rb +0 -17
  148. data/test/unit/eval_helper/eval_helpers_symbol_protected_test.rb +0 -17
  149. data/test/unit/eval_helper/eval_helpers_symbol_tainted_method_test.rb +0 -18
  150. data/test/unit/eval_helper/eval_helpers_symbol_test.rb +0 -16
  151. data/test/unit/eval_helper/eval_helpers_symbol_with_arguments_and_block_test.rb +0 -16
  152. data/test/unit/eval_helper/eval_helpers_symbol_with_arguments_test.rb +0 -16
  153. data/test/unit/eval_helper/eval_helpers_symbol_with_block_test.rb +0 -16
  154. data/test/unit/eval_helper/eval_helpers_test.rb +0 -13
  155. data/test/unit/event/event_after_being_copied_test.rb +0 -17
  156. data/test/unit/event/event_by_default_test.rb +0 -60
  157. data/test/unit/event/event_context_test.rb +0 -16
  158. data/test/unit/event/event_on_failure_test.rb +0 -44
  159. data/test/unit/event/event_test.rb +0 -34
  160. data/test/unit/event/event_transitions_test.rb +0 -62
  161. data/test/unit/event/event_with_conflicting_helpers_after_definition_test.rb +0 -79
  162. data/test/unit/event/event_with_conflicting_helpers_before_definition_test.rb +0 -58
  163. data/test/unit/event/event_with_conflicting_machine_test.rb +0 -48
  164. data/test/unit/event/event_with_dynamic_human_name_test.rb +0 -26
  165. data/test/unit/event/event_with_human_name_test.rb +0 -13
  166. data/test/unit/event/event_with_invalid_current_state_test.rb +0 -30
  167. data/test/unit/event/event_with_machine_action_test.rb +0 -33
  168. data/test/unit/event/event_with_marshalling_test.rb +0 -47
  169. data/test/unit/event/event_with_matching_disabled_transitions_test.rb +0 -115
  170. data/test/unit/event/event_with_matching_enabled_transitions_test.rb +0 -75
  171. data/test/unit/event/event_with_multiple_transitions_test.rb +0 -61
  172. data/test/unit/event/event_with_namespace_test.rb +0 -34
  173. data/test/unit/event/event_with_transition_with_blacklisted_to_state_test.rb +0 -60
  174. data/test/unit/event/event_with_transition_with_loopback_state_test.rb +0 -36
  175. data/test/unit/event/event_with_transition_with_nil_to_state_test.rb +0 -36
  176. data/test/unit/event/event_with_transition_with_whitelisted_to_state_test.rb +0 -51
  177. data/test/unit/event/event_with_transition_without_to_state_test.rb +0 -36
  178. data/test/unit/event/event_with_transitions_test.rb +0 -32
  179. data/test/unit/event/event_without_matching_transitions_test.rb +0 -41
  180. data/test/unit/event/event_without_transitions_test.rb +0 -28
  181. data/test/unit/event/invalid_event_test.rb +0 -20
  182. data/test/unit/event_collection/event_collection_attribute_with_machine_action_test.rb +0 -62
  183. data/test/unit/event_collection/event_collection_attribute_with_namespaced_machine_test.rb +0 -36
  184. data/test/unit/event_collection/event_collection_by_default_test.rb +0 -26
  185. data/test/unit/event_collection/event_collection_test.rb +0 -39
  186. data/test/unit/event_collection/event_collection_with_custom_machine_attribute_test.rb +0 -31
  187. data/test/unit/event_collection/event_collection_with_events_with_transitions_test.rb +0 -76
  188. data/test/unit/event_collection/event_collection_with_multiple_events_test.rb +0 -27
  189. data/test/unit/event_collection/event_collection_with_validations_test.rb +0 -74
  190. data/test/unit/event_collection/event_collection_without_machine_action_test.rb +0 -18
  191. data/test/unit/event_collection/event_string_collection_test.rb +0 -31
  192. data/test/unit/helper_module_test.rb +0 -17
  193. data/test/unit/integrations/integration_finder_test.rb +0 -16
  194. data/test/unit/integrations/integration_matcher_test.rb +0 -27
  195. data/test/unit/invalid_transition/invalid_parallel_transition_test.rb +0 -18
  196. data/test/unit/invalid_transition/invalid_transition_test.rb +0 -47
  197. data/test/unit/invalid_transition/invalid_transition_with_integration_test.rb +0 -45
  198. data/test/unit/invalid_transition/invalid_transition_with_namespace_test.rb +0 -32
  199. data/test/unit/machine/machine_after_being_copied_test.rb +0 -62
  200. data/test/unit/machine/machine_after_changing_initial_state.rb +0 -28
  201. data/test/unit/machine/machine_after_changing_owner_class_test.rb +0 -31
  202. data/test/unit/machine/machine_by_default_test.rb +0 -160
  203. data/test/unit/machine/machine_finder_custom_options_test.rb +0 -17
  204. data/test/unit/machine/machine_finder_with_existing_machine_on_superclass_test.rb +0 -85
  205. data/test/unit/machine/machine_finder_with_existing_on_same_class_test.rb +0 -23
  206. data/test/unit/machine/machine_finder_without_existing_machine_test.rb +0 -25
  207. data/test/unit/machine/machine_persistence_test.rb +0 -52
  208. data/test/unit/machine/machine_state_initialization_test.rb +0 -56
  209. data/test/unit/machine/machine_test.rb +0 -30
  210. data/test/unit/machine/machine_with_action_already_overridden_test.rb +0 -23
  211. data/test/unit/machine/machine_with_action_defined_in_class_test.rb +0 -37
  212. data/test/unit/machine/machine_with_action_defined_in_included_module_test.rb +0 -46
  213. data/test/unit/machine/machine_with_action_defined_in_superclass_test.rb +0 -43
  214. data/test/unit/machine/machine_with_action_undefined_test.rb +0 -33
  215. data/test/unit/machine/machine_with_cached_state_test.rb +0 -20
  216. data/test/unit/machine/machine_with_class_helpers_test.rb +0 -179
  217. data/test/unit/machine/machine_with_conflicting_helpers_after_definition_test.rb +0 -244
  218. data/test/unit/machine/machine_with_conflicting_helpers_before_definition_test.rb +0 -175
  219. data/test/unit/machine/machine_with_custom_action_test.rb +0 -11
  220. data/test/unit/machine/machine_with_custom_attribute_test.rb +0 -103
  221. data/test/unit/machine/machine_with_custom_initialize_test.rb +0 -24
  222. data/test/unit/machine/machine_with_custom_integration_test.rb +0 -72
  223. data/test/unit/machine/machine_with_custom_invalidation_test.rb +0 -39
  224. data/test/unit/machine/machine_with_custom_name_test.rb +0 -57
  225. data/test/unit/machine/machine_with_custom_plural_test.rb +0 -52
  226. data/test/unit/machine/machine_with_dynamic_initial_state_test.rb +0 -65
  227. data/test/unit/machine/machine_with_event_matchers_test.rb +0 -41
  228. data/test/unit/machine/machine_with_events_test.rb +0 -52
  229. data/test/unit/machine/machine_with_events_with_custom_human_names_test.rb +0 -18
  230. data/test/unit/machine/machine_with_events_with_transitions_test.rb +0 -37
  231. data/test/unit/machine/machine_with_existing_event_test.rb +0 -17
  232. data/test/unit/machine/machine_with_existing_machines_on_owner_class_test.rb +0 -20
  233. data/test/unit/machine/machine_with_existing_machines_with_same_attributes_on_owner_class_test.rb +0 -71
  234. data/test/unit/machine/machine_with_existing_machines_with_same_attributes_on_owner_subclass_test.rb +0 -31
  235. data/test/unit/machine/machine_with_existing_state_test.rb +0 -27
  236. data/test/unit/machine/machine_with_failure_callbacks_test.rb +0 -48
  237. data/test/unit/machine/machine_with_helpers_test.rb +0 -14
  238. data/test/unit/machine/machine_with_initial_state_with_value_and_owner_default.rb +0 -25
  239. data/test/unit/machine/machine_with_initialize_and_super_test.rb +0 -17
  240. data/test/unit/machine/machine_with_initialize_arguments_and_block_test.rb +0 -31
  241. data/test/unit/machine/machine_with_initialize_without_super_test.rb +0 -17
  242. data/test/unit/machine/machine_with_instance_helpers_test.rb +0 -179
  243. data/test/unit/machine/machine_with_integration_test.rb +0 -72
  244. data/test/unit/machine/machine_with_multiple_events_test.rb +0 -32
  245. data/test/unit/machine/machine_with_namespace_test.rb +0 -48
  246. data/test/unit/machine/machine_with_nil_action_test.rb +0 -27
  247. data/test/unit/machine/machine_with_other_states.rb +0 -22
  248. data/test/unit/machine/machine_with_owner_subclass_test.rb +0 -18
  249. data/test/unit/machine/machine_with_paths_test.rb +0 -25
  250. data/test/unit/machine/machine_with_private_action_test.rb +0 -43
  251. data/test/unit/machine/machine_with_state_matchers_test.rb +0 -41
  252. data/test/unit/machine/machine_with_state_with_matchers_test.rb +0 -19
  253. data/test/unit/machine/machine_with_states_test.rb +0 -55
  254. data/test/unit/machine/machine_with_states_with_behaviors_test.rb +0 -23
  255. data/test/unit/machine/machine_with_states_with_custom_human_names_test.rb +0 -18
  256. data/test/unit/machine/machine_with_states_with_custom_values_test.rb +0 -21
  257. data/test/unit/machine/machine_with_states_with_runtime_dependencies_test.rb +0 -19
  258. data/test/unit/machine/machine_with_static_initial_state_test.rb +0 -49
  259. data/test/unit/machine/machine_with_superclass_conflicting_helpers_after_definition_test.rb +0 -36
  260. data/test/unit/machine/machine_with_transition_callbacks_test.rb +0 -144
  261. data/test/unit/machine/machine_with_transitions_test.rb +0 -87
  262. data/test/unit/machine/machine_without_initialization_test.rb +0 -31
  263. data/test/unit/machine/machine_without_initialize_test.rb +0 -14
  264. data/test/unit/machine/machine_without_integration_test.rb +0 -31
  265. data/test/unit/machine_collection/machine_collection_by_default_test.rb +0 -11
  266. data/test/unit/machine_collection/machine_collection_fire_attributes_with_validations_test.rb +0 -72
  267. data/test/unit/machine_collection/machine_collection_fire_test.rb +0 -80
  268. data/test/unit/machine_collection/machine_collection_fire_with_transactions_test.rb +0 -54
  269. data/test/unit/machine_collection/machine_collection_fire_with_validations_test.rb +0 -76
  270. data/test/unit/machine_collection/machine_collection_state_initialization_test.rb +0 -111
  271. data/test/unit/machine_collection/machine_collection_transitions_with_blank_events_test.rb +0 -25
  272. data/test/unit/machine_collection/machine_collection_transitions_with_custom_options_test.rb +0 -20
  273. data/test/unit/machine_collection/machine_collection_transitions_with_different_actions_test.rb +0 -26
  274. data/test/unit/machine_collection/machine_collection_transitions_with_exisiting_transitions_test.rb +0 -25
  275. data/test/unit/machine_collection/machine_collection_transitions_with_invalid_events_test.rb +0 -25
  276. data/test/unit/machine_collection/machine_collection_transitions_with_same_actions_test.rb +0 -31
  277. data/test/unit/machine_collection/machine_collection_transitions_with_transition_test.rb +0 -26
  278. data/test/unit/machine_collection/machine_collection_transitions_without_events_test.rb +0 -25
  279. data/test/unit/machine_collection/machine_collection_transitions_without_transition_test.rb +0 -27
  280. data/test/unit/matcher/all_matcher_test.rb +0 -29
  281. data/test/unit/matcher/blacklist_matcher_test.rb +0 -30
  282. data/test/unit/matcher/loopback_matcher_test.rb +0 -27
  283. data/test/unit/matcher/matcher_by_default_test.rb +0 -15
  284. data/test/unit/matcher/matcher_with_multiple_values_test.rb +0 -15
  285. data/test/unit/matcher/matcher_with_value_test.rb +0 -15
  286. data/test/unit/matcher/whitelist_matcher_test.rb +0 -30
  287. data/test/unit/matcher_helpers/matcher_helpers_all_test.rb +0 -14
  288. data/test/unit/matcher_helpers/matcher_helpers_any_test.rb +0 -14
  289. data/test/unit/matcher_helpers/matcher_helpers_same_test.rb +0 -13
  290. data/test/unit/node_collection/node_collection_after_being_copied_test.rb +0 -46
  291. data/test/unit/node_collection/node_collection_after_update_test.rb +0 -36
  292. data/test/unit/node_collection/node_collection_by_default_test.rb +0 -22
  293. data/test/unit/node_collection/node_collection_test.rb +0 -23
  294. data/test/unit/node_collection/node_collection_with_indices_test.rb +0 -42
  295. data/test/unit/node_collection/node_collection_with_matcher_contexts_test.rb +0 -25
  296. data/test/unit/node_collection/node_collection_with_nodes_test.rb +0 -46
  297. data/test/unit/node_collection/node_collection_with_numeric_index_test.rb +0 -24
  298. data/test/unit/node_collection/node_collection_with_postdefined_contexts_test.rb +0 -22
  299. data/test/unit/node_collection/node_collection_with_predefined_contexts_test.rb +0 -23
  300. data/test/unit/node_collection/node_collection_with_string_index_test.rb +0 -20
  301. data/test/unit/node_collection/node_collection_with_symbol_index_test.rb +0 -20
  302. data/test/unit/node_collection/node_collection_without_indices_test.rb +0 -30
  303. data/test/unit/path/path_by_default_test.rb +0 -54
  304. data/test/unit/path/path_test.rb +0 -14
  305. data/test/unit/path/path_with_available_transitions_after_reaching_target_test.rb +0 -40
  306. data/test/unit/path/path_with_available_transitions_test.rb +0 -54
  307. data/test/unit/path/path_with_deep_target_reached_test.rb +0 -50
  308. data/test/unit/path/path_with_deep_target_test.rb +0 -40
  309. data/test/unit/path/path_with_duplicates_test.rb +0 -32
  310. data/test/unit/path/path_with_encountered_transitions_test.rb +0 -34
  311. data/test/unit/path/path_with_guarded_transitions_test.rb +0 -42
  312. data/test/unit/path/path_with_reached_target_test.rb +0 -35
  313. data/test/unit/path/path_with_transitions_test.rb +0 -54
  314. data/test/unit/path/path_with_unreached_target_test.rb +0 -31
  315. data/test/unit/path/path_without_transitions_test.rb +0 -24
  316. data/test/unit/path_collection/path_collection_by_default_test.rb +0 -46
  317. data/test/unit/path_collection/path_collection_test.rb +0 -24
  318. data/test/unit/path_collection/path_collection_with_deep_paths_test.rb +0 -43
  319. data/test/unit/path_collection/path_collection_with_duplicate_nodes_test.rb +0 -31
  320. data/test/unit/path_collection/path_collection_with_from_state_test.rb +0 -27
  321. data/test/unit/path_collection/path_collection_with_paths_test.rb +0 -47
  322. data/test/unit/path_collection/path_collection_with_to_state_test.rb +0 -29
  323. data/test/unit/path_collection/path_with_guarded_paths_test.rb +0 -25
  324. data/test/unit/state/state_after_being_copied_test.rb +0 -19
  325. data/test/unit/state/state_by_default_test.rb +0 -41
  326. data/test/unit/state/state_final_test.rb +0 -28
  327. data/test/unit/state/state_initial_test.rb +0 -13
  328. data/test/unit/state/state_not_final_test.rb +0 -32
  329. data/test/unit/state/state_not_initial_test.rb +0 -13
  330. data/test/unit/state/state_test.rb +0 -44
  331. data/test/unit/state/state_with_cached_lambda_value_test.rb +0 -29
  332. data/test/unit/state/state_with_conflicting_helpers_after_definition_test.rb +0 -38
  333. data/test/unit/state/state_with_conflicting_helpers_before_definition_test.rb +0 -29
  334. data/test/unit/state/state_with_conflicting_machine_name_test.rb +0 -20
  335. data/test/unit/state/state_with_conflicting_machine_test.rb +0 -37
  336. data/test/unit/state/state_with_context_test.rb +0 -60
  337. data/test/unit/state/state_with_dynamic_human_name_test.rb +0 -25
  338. data/test/unit/state/state_with_existing_context_method_test.rb +0 -24
  339. data/test/unit/state/state_with_human_name_test.rb +0 -13
  340. data/test/unit/state/state_with_integer_value_test.rb +0 -32
  341. data/test/unit/state/state_with_invalid_method_call_test.rb +0 -21
  342. data/test/unit/state/state_with_lambda_value_test.rb +0 -37
  343. data/test/unit/state/state_with_matcher_test.rb +0 -18
  344. data/test/unit/state/state_with_multiple_contexts_test.rb +0 -57
  345. data/test/unit/state/state_with_name_test.rb +0 -43
  346. data/test/unit/state/state_with_namespace_test.rb +0 -22
  347. data/test/unit/state/state_with_nil_value_test.rb +0 -35
  348. data/test/unit/state/state_with_redefined_context_method_test.rb +0 -45
  349. data/test/unit/state/state_with_symbolic_value_test.rb +0 -32
  350. data/test/unit/state/state_with_valid_inherited_method_call_for_current_state_test.rb +0 -40
  351. data/test/unit/state/state_with_valid_method_call_for_current_state_test.rb +0 -33
  352. data/test/unit/state/state_with_valid_method_call_for_different_state_test.rb +0 -41
  353. data/test/unit/state/state_without_cached_lambda_value_test.rb +0 -25
  354. data/test/unit/state/state_without_name_test.rb +0 -39
  355. data/test/unit/state_collection/state_collection_by_default_test.rb +0 -21
  356. data/test/unit/state_collection/state_collection_string_test.rb +0 -35
  357. data/test/unit/state_collection/state_collection_test.rb +0 -74
  358. data/test/unit/state_collection/state_collection_with_custom_state_values_test.rb +0 -29
  359. data/test/unit/state_collection/state_collection_with_event_transitions_test.rb +0 -39
  360. data/test/unit/state_collection/state_collection_with_initial_state_test.rb +0 -40
  361. data/test/unit/state_collection/state_collection_with_namespace_test.rb +0 -21
  362. data/test/unit/state_collection/state_collection_with_state_behaviors_test.rb +0 -40
  363. data/test/unit/state_collection/state_collection_with_state_matchers_test.rb +0 -29
  364. data/test/unit/state_collection/state_collection_with_transition_callbacks_test.rb +0 -40
  365. data/test/unit/state_context/state_context_proxy_test.rb +0 -26
  366. data/test/unit/state_context/state_context_proxy_with_if_and_unless_conditions_test.rb +0 -42
  367. data/test/unit/state_context/state_context_proxy_with_if_condition_test.rb +0 -64
  368. data/test/unit/state_context/state_context_proxy_with_multiple_if_conditions_test.rb +0 -32
  369. data/test/unit/state_context/state_context_proxy_with_multiple_unless_conditions_test.rb +0 -32
  370. data/test/unit/state_context/state_context_proxy_with_unless_condition_test.rb +0 -64
  371. data/test/unit/state_context/state_context_proxy_without_conditions_test.rb +0 -31
  372. data/test/unit/state_context/state_context_test.rb +0 -28
  373. data/test/unit/state_context/state_context_transition_test.rb +0 -104
  374. data/test/unit/state_context/state_context_with_matching_transition_test.rb +0 -27
  375. data/test/unit/state_machine/state_machine_by_default_test.rb +0 -12
  376. data/test/unit/state_machine/state_machine_test.rb +0 -20
  377. data/test/unit/transition/transition_after_being_performed_test.rb +0 -48
  378. data/test/unit/transition/transition_after_being_persisted_test.rb +0 -46
  379. data/test/unit/transition/transition_after_being_rolled_back_test.rb +0 -35
  380. data/test/unit/transition/transition_equality_test.rb +0 -52
  381. data/test/unit/transition/transition_loopback_test.rb +0 -18
  382. data/test/unit/transition/transition_test.rb +0 -96
  383. data/test/unit/transition/transition_transient_test.rb +0 -20
  384. data/test/unit/transition/transition_with_action_test.rb +0 -27
  385. data/test/unit/transition/transition_with_after_callbacks_skipped_test.rb +0 -127
  386. data/test/unit/transition/transition_with_after_callbacks_test.rb +0 -93
  387. data/test/unit/transition/transition_with_around_callbacks_test.rb +0 -141
  388. data/test/unit/transition/transition_with_before_callbacks_skipped_test.rb +0 -30
  389. data/test/unit/transition/transition_with_before_callbacks_test.rb +0 -104
  390. data/test/unit/transition/transition_with_custom_machine_attribute_test.rb +0 -28
  391. data/test/unit/transition/transition_with_different_states_test.rb +0 -18
  392. data/test/unit/transition/transition_with_dynamic_to_value_test.rb +0 -19
  393. data/test/unit/transition/transition_with_failure_callbacks_test.rb +0 -84
  394. data/test/unit/transition/transition_with_invalid_nodes_test.rb +0 -29
  395. data/test/unit/transition/transition_with_mixed_callbacks_test.rb +0 -105
  396. data/test/unit/transition/transition_with_multiple_after_callbacks_test.rb +0 -40
  397. data/test/unit/transition/transition_with_multiple_around_callbacks_test.rb +0 -114
  398. data/test/unit/transition/transition_with_multiple_before_callbacks_test.rb +0 -40
  399. data/test/unit/transition/transition_with_multiple_failure_callbacks_test.rb +0 -40
  400. data/test/unit/transition/transition_with_namespace_test.rb +0 -47
  401. data/test/unit/transition/transition_with_perform_arguments_test.rb +0 -35
  402. data/test/unit/transition/transition_with_transactions_test.rb +0 -42
  403. data/test/unit/transition/transition_without_callbacks_test.rb +0 -33
  404. data/test/unit/transition/transition_without_reading_state_test.rb +0 -22
  405. data/test/unit/transition/transition_without_running_action_test.rb +0 -47
  406. data/test/unit/transition_collection/attribute_transition_collection_by_default_test.rb +0 -23
  407. data/test/unit/transition_collection/attribute_transition_collection_marshalling_test.rb +0 -64
  408. data/test/unit/transition_collection/attribute_transition_collection_with_action_error_test.rb +0 -44
  409. data/test/unit/transition_collection/attribute_transition_collection_with_action_failed_test.rb +0 -44
  410. data/test/unit/transition_collection/attribute_transition_collection_with_after_callback_error_test.rb +0 -32
  411. data/test/unit/transition_collection/attribute_transition_collection_with_after_callback_halt_test.rb +0 -33
  412. data/test/unit/transition_collection/attribute_transition_collection_with_around_after_yield_callback_error_test.rb +0 -32
  413. data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_after_yield_error_test.rb +0 -32
  414. data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_after_yield_halt_test.rb +0 -33
  415. data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_before_yield_halt_test.rb +0 -33
  416. data/test/unit/transition_collection/attribute_transition_collection_with_before_callback_error_test.rb +0 -32
  417. data/test/unit/transition_collection/attribute_transition_collection_with_before_callback_halt_test.rb +0 -33
  418. data/test/unit/transition_collection/attribute_transition_collection_with_callbacks_test.rb +0 -68
  419. data/test/unit/transition_collection/attribute_transition_collection_with_event_transitions_test.rb +0 -41
  420. data/test/unit/transition_collection/attribute_transition_collection_with_events_test.rb +0 -44
  421. data/test/unit/transition_collection/attribute_transition_collection_with_skipped_after_callbacks_test.rb +0 -42
  422. data/test/unit/transition_collection/transition_collection_by_default_test.rb +0 -23
  423. data/test/unit/transition_collection/transition_collection_empty_with_block_test.rb +0 -23
  424. data/test/unit/transition_collection/transition_collection_empty_without_block_test.rb +0 -12
  425. data/test/unit/transition_collection/transition_collection_invalid_test.rb +0 -21
  426. data/test/unit/transition_collection/transition_collection_partial_invalid_test.rb +0 -69
  427. data/test/unit/transition_collection/transition_collection_test.rb +0 -26
  428. data/test/unit/transition_collection/transition_collection_valid_test.rb +0 -57
  429. data/test/unit/transition_collection/transition_collection_with_action_error_test.rb +0 -66
  430. data/test/unit/transition_collection/transition_collection_with_action_failed_test.rb +0 -60
  431. data/test/unit/transition_collection/transition_collection_with_action_hook_and_block_test.rb +0 -17
  432. data/test/unit/transition_collection/transition_collection_with_action_hook_and_skipped_action_test.rb +0 -17
  433. data/test/unit/transition_collection/transition_collection_with_action_hook_and_skipped_after_callbacks_test.rb +0 -37
  434. data/test/unit/transition_collection/transition_collection_with_action_hook_base_test.rb +0 -34
  435. data/test/unit/transition_collection/transition_collection_with_action_hook_error_test.rb +0 -29
  436. data/test/unit/transition_collection/transition_collection_with_action_hook_invalid_test.rb +0 -17
  437. data/test/unit/transition_collection/transition_collection_with_action_hook_multiple_test.rb +0 -79
  438. data/test/unit/transition_collection/transition_collection_with_action_hook_test.rb +0 -45
  439. data/test/unit/transition_collection/transition_collection_with_action_hook_with_different_actions_test.rb +0 -48
  440. data/test/unit/transition_collection/transition_collection_with_action_hook_with_nil_action_test.rb +0 -42
  441. data/test/unit/transition_collection/transition_collection_with_after_callback_halt_test.rb +0 -51
  442. data/test/unit/transition_collection/transition_collection_with_before_callback_halt_test.rb +0 -47
  443. data/test/unit/transition_collection/transition_collection_with_block_test.rb +0 -46
  444. data/test/unit/transition_collection/transition_collection_with_callbacks_test.rb +0 -135
  445. data/test/unit/transition_collection/transition_collection_with_different_actions_test.rb +0 -189
  446. data/test/unit/transition_collection/transition_collection_with_duplicate_actions_test.rb +0 -48
  447. data/test/unit/transition_collection/transition_collection_with_empty_actions_test.rb +0 -41
  448. data/test/unit/transition_collection/transition_collection_with_mixed_actions_test.rb +0 -41
  449. data/test/unit/transition_collection/transition_collection_with_skipped_actions_and_block_test.rb +0 -34
  450. data/test/unit/transition_collection/transition_collection_with_skipped_actions_test.rb +0 -69
  451. data/test/unit/transition_collection/transition_collection_with_skipped_after_callbacks_and_around_callbacks_test.rb +0 -53
  452. data/test/unit/transition_collection/transition_collection_with_skipped_after_callbacks_test.rb +0 -34
  453. data/test/unit/transition_collection/transition_collection_with_transactions_test.rb +0 -65
  454. data/test/unit/transition_collection/transition_collection_without_transactions_test.rb +0 -29
@@ -12,7 +12,7 @@ module StateMachines
12
12
  # The name of the event
13
13
  attr_reader :name
14
14
 
15
- # The fully-qualified name of the event, scoped by the machine's namespace
15
+ # The fully-qualified name of the event, scoped by the machine's namespace
16
16
  attr_reader :qualified_name
17
17
 
18
18
  # The human-readable name for the event
@@ -27,7 +27,7 @@ module StateMachines
27
27
  attr_reader :known_states
28
28
 
29
29
  # Creates a new event within the context of the given machine
30
- #
30
+ #
31
31
  # Configuration options:
32
32
  # * <tt>:human_name</tt> - The human-readable version of this event's name
33
33
  def initialize(machine, name, options = {}) #:nodoc:
@@ -40,7 +40,7 @@ module StateMachines
40
40
  reset
41
41
 
42
42
  # Output a warning if another event has a conflicting qualified name
43
- if conflict = machine.owner_class.state_machines.detect { |_other_name, other_machine| other_machine != @machine && other_machine.events[qualified_name, :qualified_name] }
43
+ if (conflict = machine.owner_class.state_machines.detect { |_other_name, other_machine| other_machine != @machine && other_machine.events[qualified_name, :qualified_name] })
44
44
  _name, other_machine = conflict
45
45
  warn "Event #{qualified_name.inspect} for #{machine.name.inspect} is already defined in #{other_machine.name.inspect}"
46
46
  else
@@ -70,18 +70,18 @@ module StateMachines
70
70
 
71
71
  # Creates a new transition that determines what to change the current state
72
72
  # to when this event fires.
73
- #
73
+ #
74
74
  # Since this transition is being defined within an event context, you do
75
75
  # *not* need to specify the <tt>:on</tt> option for the transition. For
76
76
  # example:
77
- #
77
+ #
78
78
  # state_machine do
79
79
  # event :ignite do
80
80
  # transition :parked => :idling, :idling => same, :if => :seatbelt_on? # Transitions to :idling if seatbelt is on
81
81
  # transition all => :parked, :unless => :seatbelt_on? # Transitions to :parked if seatbelt is off
82
82
  # end
83
83
  # end
84
- #
84
+ #
85
85
  # See StateMachines::Machine#transition for a description of the possible
86
86
  # configurations for defining transitions.
87
87
  def transition(options)
@@ -91,16 +91,16 @@ module StateMachines
91
91
  # requirements
92
92
  options.assert_valid_keys(:from, :to, :except_from, :except_to, :if, :unless) if (options.keys - [:from, :to, :on, :except_from, :except_to, :except_on, :if, :unless]).empty?
93
93
 
94
- branches << branch = Branch.new(options.merge(:on => name))
94
+ branches << branch = Branch.new(options.merge(on: name))
95
95
  @known_states |= branch.known_states
96
96
  branch
97
97
  end
98
98
 
99
99
  # Determines whether any transitions can be performed for this event based
100
100
  # on the current state of the given object.
101
- #
101
+ #
102
102
  # If the event can't be fired, then this will return false, otherwise true.
103
- #
103
+ #
104
104
  # *Note* that this will not take the object context into account. Although
105
105
  # a transition may be possible based on the state machine definition,
106
106
  # object-specific behaviors (like validations) may prevent it from firing.
@@ -110,7 +110,7 @@ module StateMachines
110
110
 
111
111
  # Finds and builds the next transition that can be performed on the given
112
112
  # object. If no transitions can be made, then this will return nil.
113
- #
113
+ #
114
114
  # Valid requirement options:
115
115
  # * <tt>:from</tt> - One or more states being transitioned from. If none
116
116
  # are specified, then this will be the object's current state.
@@ -120,10 +120,10 @@ module StateMachines
120
120
  # conditionals defined for each one. Default is true.
121
121
  def transition_for(object, requirements = {})
122
122
  requirements.assert_valid_keys(:from, :to, :guard)
123
- requirements[:from] = machine.states.match!(object).name unless custom_from_state = requirements.include?(:from)
123
+ requirements[:from] = machine.states.match!(object).name unless (custom_from_state = requirements.include?(:from))
124
124
 
125
125
  branches.each do |branch|
126
- if match = branch.match(object, requirements)
126
+ if (match = branch.match(object, requirements))
127
127
  # Branch allows for the transition to occur
128
128
  from = requirements[:from]
129
129
  to = if match[:to].is_a?(LoopbackMatcher)
@@ -145,27 +145,29 @@ module StateMachines
145
145
  # Attempts to perform the next available transition on the given object.
146
146
  # If no transitions can be made, then this will return false, otherwise
147
147
  # true.
148
- #
148
+ #
149
149
  # Any additional arguments are passed to the StateMachines::Transition#perform
150
150
  # instance method.
151
151
  def fire(object, *args)
152
152
  machine.reset(object)
153
153
 
154
- if transition = transition_for(object)
154
+ if (transition = transition_for(object))
155
155
  transition.perform(*args)
156
156
  else
157
- on_failure(object)
157
+ on_failure(object, *args)
158
158
  false
159
159
  end
160
160
  end
161
161
 
162
162
  # Marks the object as invalid and runs any failure callbacks associated with
163
163
  # this event. This should get called anytime this event fails to transition.
164
- def on_failure(object)
164
+ def on_failure(object, *args)
165
165
  state = machine.states.match!(object)
166
166
  machine.invalidate(object, :state, :invalid_transition, [[:event, human_name(object.class)], [:state, state.human_name(object.class)]])
167
167
 
168
- Transition.new(object, machine, name, state.name, state.name).run_callbacks(:before => false)
168
+ transition = Transition.new(object, machine, name, state.name, state.name)
169
+ transition.args = args if args.any?
170
+ transition.run_callbacks(before: false)
169
171
  end
170
172
 
171
173
  # Resets back to the initial state of the event, with no branches / known
@@ -183,9 +185,9 @@ module StateMachines
183
185
  end
184
186
 
185
187
  # Generates a nicely formatted description of this event's contents.
186
- #
188
+ #
187
189
  # For example,
188
- #
190
+ #
189
191
  # event = StateMachines::Event.new(machine, :park)
190
192
  # event.transition all - :idling => :parked, :idling => same
191
193
  # event # => #<StateMachines::Event name=:park transitions=[all - :idling => :parked, :idling => same]>
@@ -199,29 +201,30 @@ module StateMachines
199
201
  "#<#{self.class} name=#{name.inspect} transitions=[#{transitions * ', '}]>"
200
202
  end
201
203
 
202
- protected
204
+ protected
205
+
203
206
  # Add the various instance methods that can transition the object using
204
207
  # the current event
205
208
  def add_actions
206
209
  # Checks whether the event can be fired on the current object
207
- machine.define_helper(:instance, "can_#{qualified_name}?") do |machine, object, *args|
208
- machine.event(name).can_fire?(object, *args)
210
+ machine.define_helper(:instance, "can_#{qualified_name}?") do |machine, object, *args, **kwargs|
211
+ machine.event(name).can_fire?(object, *args, **kwargs)
209
212
  end
210
213
 
211
214
  # Gets the next transition that would be performed if the event were
212
215
  # fired now
213
- machine.define_helper(:instance, "#{qualified_name}_transition") do |machine, object, *args|
214
- machine.event(name).transition_for(object, *args)
216
+ machine.define_helper(:instance, "#{qualified_name}_transition") do |machine, object, *args, **kwargs|
217
+ machine.event(name).transition_for(object, *args, **kwargs)
215
218
  end
216
219
 
217
220
  # Fires the event
218
- machine.define_helper(:instance, qualified_name) do |machine, object, *args|
219
- machine.event(name).fire(object, *args)
221
+ machine.define_helper(:instance, qualified_name) do |machine, object, *args, **kwargs|
222
+ machine.event(name).fire(object, *args, **kwargs)
220
223
  end
221
224
 
222
225
  # Fires the event, raising an exception if it fails
223
- machine.define_helper(:instance, "#{qualified_name}!") do |machine, object, *args|
224
- object.send(qualified_name, *args) || raise(StateMachines::InvalidTransition.new(object, machine, name))
226
+ machine.define_helper(:instance, "#{qualified_name}!") do |machine, object, *args, **kwargs|
227
+ object.send(qualified_name, *args, **kwargs) || raise(StateMachines::InvalidTransition.new(object, machine, name))
225
228
  end
226
229
  end
227
230
  end
@@ -2,11 +2,11 @@ module StateMachines
2
2
  # Represents a collection of events in a state machine
3
3
  class EventCollection < NodeCollection
4
4
  def initialize(machine) #:nodoc:
5
- super(machine, :index => [:name, :qualified_name])
5
+ super(machine, index: [:name, :qualified_name])
6
6
  end
7
7
 
8
8
  # Gets the list of events that can be fired on the given object.
9
- #
9
+ #
10
10
  # Valid requirement options:
11
11
  # * <tt>:from</tt> - One or more states being transitioned from. If none
12
12
  # are specified, then this will be the object's current state.
@@ -16,26 +16,26 @@ module StateMachines
16
16
  # are specified, then this will match any event.
17
17
  # * <tt>:guard</tt> - Whether to guard transitions with the if/unless
18
18
  # conditionals defined for each one. Default is true.
19
- #
19
+ #
20
20
  # == Examples
21
- #
21
+ #
22
22
  # class Vehicle
23
23
  # state_machine :initial => :parked do
24
24
  # event :park do
25
25
  # transition :idling => :parked
26
26
  # end
27
- #
27
+ #
28
28
  # event :ignite do
29
29
  # transition :parked => :idling
30
30
  # end
31
31
  # end
32
32
  # end
33
- #
33
+ #
34
34
  # events = Vehicle.state_machine(:state).events
35
- #
35
+ #
36
36
  # vehicle = Vehicle.new # => #<Vehicle:0xb7c464b0 @state="parked">
37
37
  # events.valid_for(vehicle) # => [#<StateMachines::Event name=:ignite transitions=[:parked => :idling]>]
38
- #
38
+ #
39
39
  # vehicle.state = 'idling'
40
40
  # events.valid_for(vehicle) # => [#<StateMachines::Event name=:park transitions=[:idling => :parked]>]
41
41
  def valid_for(object, requirements = {})
@@ -43,7 +43,7 @@ module StateMachines
43
43
  end
44
44
 
45
45
  # Gets the list of transitions that can be run on the given object.
46
- #
46
+ #
47
47
  # Valid requirement options:
48
48
  # * <tt>:from</tt> - One or more states being transitioned from. If none
49
49
  # are specified, then this will be the object's current state.
@@ -53,29 +53,29 @@ module StateMachines
53
53
  # are specified, then this will match any event.
54
54
  # * <tt>:guard</tt> - Whether to guard transitions with the if/unless
55
55
  # conditionals defined for each one. Default is true.
56
- #
56
+ #
57
57
  # == Examples
58
- #
58
+ #
59
59
  # class Vehicle
60
60
  # state_machine :initial => :parked do
61
61
  # event :park do
62
62
  # transition :idling => :parked
63
63
  # end
64
- #
64
+ #
65
65
  # event :ignite do
66
66
  # transition :parked => :idling
67
67
  # end
68
68
  # end
69
69
  # end
70
- #
70
+ #
71
71
  # events = Vehicle.state_machine.events
72
- #
72
+ #
73
73
  # vehicle = Vehicle.new # => #<Vehicle:0xb7c464b0 @state="parked">
74
74
  # events.transitions_for(vehicle) # => [#<StateMachines::Transition attribute=:state event=:ignite from="parked" from_name=:parked to="idling" to_name=:idling>]
75
- #
75
+ #
76
76
  # vehicle.state = 'idling'
77
77
  # events.transitions_for(vehicle) # => [#<StateMachines::Transition attribute=:state event=:park from="idling" from_name=:idling to="parked" to_name=:parked>]
78
- #
78
+ #
79
79
  # # Search for explicit transitions regardless of the current state
80
80
  # events.transitions_for(vehicle, :from => :parked) # => [#<StateMachines::Transition attribute=:state event=:ignite from="parked" from_name=:parked to="idling" to_name=:idling>]
81
81
  def transitions_for(object, requirements = {})
@@ -86,12 +86,12 @@ module StateMachines
86
86
  # given object's event attribute. This also takes an additional parameter
87
87
  # for automatically invalidating the object if the event or transition are
88
88
  # invalid. By default, this is turned off.
89
- #
89
+ #
90
90
  # *Note* that if a transition has already been generated for the event, then
91
91
  # that transition will be used.
92
- #
92
+ #
93
93
  # == Examples
94
- #
94
+ #
95
95
  # class Vehicle < ActiveRecord::Base
96
96
  # state_machine :initial => :parked do
97
97
  # event :ignite do
@@ -99,16 +99,16 @@ module StateMachines
99
99
  # end
100
100
  # end
101
101
  # end
102
- #
102
+ #
103
103
  # vehicle = Vehicle.new # => #<Vehicle id: nil, state: "parked">
104
104
  # events = Vehicle.state_machine.events
105
- #
105
+ #
106
106
  # vehicle.state_event = nil
107
107
  # events.attribute_transition_for(vehicle) # => nil # Event isn't defined
108
- #
108
+ #
109
109
  # vehicle.state_event = 'invalid'
110
110
  # events.attribute_transition_for(vehicle) # => false # Event is invalid
111
- #
111
+ #
112
112
  # vehicle.state_event = 'ignite'
113
113
  # events.attribute_transition_for(vehicle) # => #<StateMachines::Transition attribute=:state event=:ignite from="parked" from_name=:parked to="idling" to_name=:idling>
114
114
  def attribute_transition_for(object, invalidate = false)
@@ -118,7 +118,7 @@ module StateMachines
118
118
  machine.read(object, :event_transition) || if event_name = machine.read(object, :event)
119
119
  if event = self[event_name.to_sym, :name]
120
120
  event.transition_for(object) || begin
121
- # No valid transition: invalidate
121
+ # No valid transition: invalidate
122
122
  machine.invalidate(object, :event, :invalid_event, [[:state, machine.states.match!(object).human_name(object.class)]]) if invalidate
123
123
  false
124
124
  end
@@ -131,7 +131,8 @@ module StateMachines
131
131
 
132
132
  end
133
133
 
134
- private
134
+ private
135
+
135
136
  def match(requirements) #:nodoc:
136
137
  requirements && requirements[:on] ? [fetch(requirements.delete(:on))] : self
137
138
  end
@@ -133,13 +133,13 @@ module StateMachines
133
133
  # vehicle = Vehicle.new # => #<Vehicle:0xb7c02850 @state="parked", @alarm_state="active">
134
134
  # vehicle.fire_events(:ignite, :disable_alarm) # => true
135
135
  #
136
- # vehicle.fire_events!(:ignite, :disable_alarm) # => StateMachines::InvalidTranstion: Cannot run events in parallel: ignite, disable_alarm
136
+ # vehicle.fire_events!(:ignite, :disable_alarm) # => StateMachines::InvalidParallelTransition: Cannot run events in parallel: ignite, disable_alarm
137
137
  def fire_events!(*events)
138
138
  run_action = [true, false].include?(events.last) ? events.pop : true
139
139
  fire_events(*(events + [run_action])) || fail(StateMachines::InvalidParallelTransition.new(self, events))
140
140
  end
141
141
 
142
- protected
142
+ protected
143
143
 
144
144
  def initialize_state_machines(options = {}, &block) #:nodoc:
145
145
  self.class.state_machines.initialize_states(self, options, &block)
@@ -6,7 +6,7 @@ module StateMachines
6
6
  @machine = machine
7
7
  @kind = kind
8
8
  end
9
-
9
+
10
10
  # Provides a human-readable description of the module
11
11
  def to_s
12
12
  owner_class = @machine.owner_class
@@ -24,20 +24,17 @@ module StateMachines
24
24
 
25
25
  # Whether the integration should be used for the given class.
26
26
  def matches?(klass)
27
- matches_ancestors?(klass.ancestors.map { |ancestor| ancestor.name })
27
+ matching_ancestors.any? { |ancestor| klass <= ancestor }
28
28
  end
29
29
 
30
30
  # Whether the integration should be used for the given list of ancestors.
31
31
  def matches_ancestors?(ancestors)
32
32
  (ancestors & matching_ancestors).any?
33
33
  end
34
-
35
34
  end
36
35
 
37
- extend ClassMethods
38
-
39
36
  def self.included(base) #:nodoc:
40
- base.class_eval { extend ClassMethods }
37
+ base.extend ClassMethods
41
38
  end
42
39
  end
43
40
  end
@@ -1,5 +1,3 @@
1
- require 'set'
2
-
3
1
  module StateMachines
4
2
  # Integrations allow state machines to take advantage of features within the
5
3
  # context of a particular library. This is currently most useful with
@@ -11,10 +9,10 @@ module StateMachines
11
9
  # * Scopes
12
10
  # * Callbacks
13
11
  # * Validation errors
14
- #
12
+ #
15
13
  # This type of integration allows the user to work with state machines in a
16
14
  # fashion similar to other object models in their application.
17
- #
15
+ #
18
16
  # The integration interface is loosely defined by various unimplemented
19
17
  # methods in the StateMachines::Machine class. See that class or the various
20
18
  # built-in integrations for more information about how to define additional
@@ -54,24 +52,23 @@ module StateMachines
54
52
 
55
53
  alias_method :list, :integrations
56
54
 
57
-
58
55
  # Attempts to find an integration that matches the given class. This will
59
56
  # look through all of the built-in integrations under the StateMachines::Integrations
60
57
  # namespace and find one that successfully matches the class.
61
- #
58
+ #
62
59
  # == Examples
63
- #
60
+ #
64
61
  # class Vehicle
65
62
  # end
66
- #
63
+ #
67
64
  # class ActiveModelVehicle
68
65
  # include ActiveModel::Observing
69
66
  # include ActiveModel::Validations
70
67
  # end
71
- #
68
+ #
72
69
  # class ActiveRecordVehicle < ActiveRecord::Base
73
70
  # end
74
- #
71
+ #
75
72
  # StateMachines::Integrations.match(Vehicle) # => nil
76
73
  # StateMachines::Integrations.match(ActiveModelVehicle) # => StateMachines::Integrations::ActiveModel
77
74
  # StateMachines::Integrations.match(ActiveRecordVehicle) # => StateMachines::Integrations::ActiveRecord
@@ -86,7 +83,7 @@ module StateMachines
86
83
  # == Examples
87
84
  #
88
85
  # StateMachines::Integrations.match_ancestors([]) # => nil
89
- # StateMachines::Integrations.match_ancestors(['ActiveRecord::Base']) # => StateMachines::Integrations::ActiveModel
86
+ # StateMachines::Integrations.match_ancestors([ActiveRecord::Base]) # => StateMachines::Integrations::ActiveModel
90
87
  def match_ancestors(ancestors)
91
88
  integrations.detect { |integration| integration.matches_ancestors?(ancestors) }
92
89
  end
@@ -103,8 +100,7 @@ module StateMachines
103
100
  integrations.detect { |integration| integration.integration_name == name } || raise(IntegrationNotFound.new(name))
104
101
  end
105
102
 
106
-
107
- private
103
+ private
108
104
 
109
105
  def add(integration)
110
106
  if integration.respond_to?(:integration_name)