state_machines 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (455) hide show
  1. checksums.yaml +5 -5
  2. data/LICENSE.txt +1 -1
  3. data/README.md +7 -4
  4. data/lib/state_machines/branch.rb +81 -79
  5. data/lib/state_machines/callback.rb +22 -21
  6. data/lib/state_machines/eval_helpers.rb +15 -15
  7. data/lib/state_machines/event.rb +31 -28
  8. data/lib/state_machines/event_collection.rb +26 -25
  9. data/lib/state_machines/extensions.rb +1 -1
  10. data/lib/state_machines/helper_module.rb +1 -1
  11. data/lib/state_machines/integrations.rb +8 -8
  12. data/lib/state_machines/machine.rb +372 -369
  13. data/lib/state_machines/machine_collection.rb +11 -10
  14. data/lib/state_machines/macro_methods.rb +100 -100
  15. data/lib/state_machines/matcher.rb +23 -23
  16. data/lib/state_machines/matcher_helpers.rb +11 -11
  17. data/lib/state_machines/node_collection.rb +15 -13
  18. data/lib/state_machines/path.rb +56 -55
  19. data/lib/state_machines/path_collection.rb +35 -35
  20. data/lib/state_machines/state.rb +7 -6
  21. data/lib/state_machines/state_collection.rb +20 -19
  22. data/lib/state_machines/state_context.rb +33 -35
  23. data/lib/state_machines/transition.rb +180 -178
  24. data/lib/state_machines/transition_collection.rb +170 -168
  25. data/lib/state_machines/version.rb +1 -1
  26. metadata +4 -434
  27. data/.gitignore +0 -21
  28. data/.rspec +0 -3
  29. data/.ruby-gemset +0 -1
  30. data/.ruby-version +0 -1
  31. data/.travis.yml +0 -16
  32. data/Changelog.md +0 -22
  33. data/Contributors.md +0 -39
  34. data/Gemfile +0 -8
  35. data/Rakefile +0 -12
  36. data/Testing.md +0 -0
  37. data/state_machines.gemspec +0 -22
  38. data/test/files/integrations/event_on_failure_integration.rb +0 -10
  39. data/test/files/integrations/vehicle.rb +0 -7
  40. data/test/files/models/auto_shop.rb +0 -31
  41. data/test/files/models/car.rb +0 -21
  42. data/test/files/models/driver.rb +0 -13
  43. data/test/files/models/model_base.rb +0 -6
  44. data/test/files/models/motorcycle.rb +0 -16
  45. data/test/files/models/traffic_light.rb +0 -47
  46. data/test/files/models/vehicle.rb +0 -127
  47. data/test/files/node.rb +0 -5
  48. data/test/files/switch.rb +0 -15
  49. data/test/functional/auto_shop_available_test.rb +0 -20
  50. data/test/functional/auto_shop_busy_test.rb +0 -25
  51. data/test/functional/car_backing_up_test.rb +0 -45
  52. data/test/functional/car_test.rb +0 -49
  53. data/test/functional/driver_default_nonstandard_test.rb +0 -13
  54. data/test/functional/motorcycle_test.rb +0 -52
  55. data/test/functional/traffic_light_caution_test.rb +0 -17
  56. data/test/functional/traffic_light_proceed_test.rb +0 -17
  57. data/test/functional/traffic_light_stop_test.rb +0 -26
  58. data/test/functional/vehicle_first_gear_test.rb +0 -42
  59. data/test/functional/vehicle_idling_test.rb +0 -59
  60. data/test/functional/vehicle_locked_test.rb +0 -29
  61. data/test/functional/vehicle_parked_test.rb +0 -53
  62. data/test/functional/vehicle_repaired_test.rb +0 -20
  63. data/test/functional/vehicle_second_gear_test.rb +0 -42
  64. data/test/functional/vehicle_stalled_test.rb +0 -65
  65. data/test/functional/vehicle_test.rb +0 -20
  66. data/test/functional/vehicle_third_gear_test.rb +0 -42
  67. data/test/functional/vehicle_unsaved_test.rb +0 -181
  68. data/test/functional/vehicle_with_event_attributes_test.rb +0 -30
  69. data/test/functional/vehicle_with_parallel_events_test.rb +0 -36
  70. data/test/test_helper.rb +0 -15
  71. data/test/unit/assertions/assert_exclusive_keys_test.rb +0 -22
  72. data/test/unit/assertions/assert_valid_key_test.rb +0 -12
  73. data/test/unit/branch/branch_test.rb +0 -28
  74. data/test/unit/branch/branch_with_conflicting_conditionals_test.rb +0 -27
  75. data/test/unit/branch/branch_with_conflicting_from_requirements_test.rb +0 -8
  76. data/test/unit/branch/branch_with_conflicting_on_requirements_test.rb +0 -8
  77. data/test/unit/branch/branch_with_conflicting_to_requirements_test.rb +0 -8
  78. data/test/unit/branch/branch_with_different_requirements_test.rb +0 -41
  79. data/test/unit/branch/branch_with_except_from_matcher_requirement_test.rb +0 -8
  80. data/test/unit/branch/branch_with_except_from_requirement_test.rb +0 -36
  81. data/test/unit/branch/branch_with_except_on_matcher_requirement_test.rb +0 -8
  82. data/test/unit/branch/branch_with_except_on_requirement_test.rb +0 -36
  83. data/test/unit/branch/branch_with_except_to_matcher_requirement_test.rb +0 -8
  84. data/test/unit/branch/branch_with_except_to_requirement_test.rb +0 -36
  85. data/test/unit/branch/branch_with_from_matcher_requirement_test.rb +0 -20
  86. data/test/unit/branch/branch_with_from_requirement_test.rb +0 -45
  87. data/test/unit/branch/branch_with_if_conditional_test.rb +0 -27
  88. data/test/unit/branch/branch_with_implicit_and_explicit_requirements_test.rb +0 -23
  89. data/test/unit/branch/branch_with_implicit_from_requirement_matcher_test.rb +0 -20
  90. data/test/unit/branch/branch_with_implicit_requirement_test.rb +0 -20
  91. data/test/unit/branch/branch_with_implicit_to_requirement_matcher_test.rb +0 -16
  92. data/test/unit/branch/branch_with_multiple_except_from_requirements_test.rb +0 -20
  93. data/test/unit/branch/branch_with_multiple_except_on_requirements_test.rb +0 -16
  94. data/test/unit/branch/branch_with_multiple_except_to_requirements_test.rb +0 -20
  95. data/test/unit/branch/branch_with_multiple_from_requirements_test.rb +0 -16
  96. data/test/unit/branch/branch_with_multiple_if_conditionals_test.rb +0 -20
  97. data/test/unit/branch/branch_with_multiple_implicit_requirements_test.rb +0 -53
  98. data/test/unit/branch/branch_with_multiple_to_requirements_test.rb +0 -20
  99. data/test/unit/branch/branch_with_multiple_unless_conditionals_test.rb +0 -20
  100. data/test/unit/branch/branch_with_nil_requirements_test.rb +0 -28
  101. data/test/unit/branch/branch_with_no_requirements_test.rb +0 -36
  102. data/test/unit/branch/branch_with_on_matcher_requirement_test.rb +0 -16
  103. data/test/unit/branch/branch_with_on_requirement_test.rb +0 -45
  104. data/test/unit/branch/branch_with_to_matcher_requirement_test.rb +0 -20
  105. data/test/unit/branch/branch_with_to_requirement_test.rb +0 -45
  106. data/test/unit/branch/branch_with_unless_conditional_test.rb +0 -27
  107. data/test/unit/branch/branch_without_guards_test.rb +0 -27
  108. data/test/unit/callback/callback_by_default_test.rb +0 -25
  109. data/test/unit/callback/callback_test.rb +0 -53
  110. data/test/unit/callback/callback_with_application_bound_object_test.rb +0 -23
  111. data/test/unit/callback/callback_with_application_terminator_test.rb +0 -24
  112. data/test/unit/callback/callback_with_arguments_test.rb +0 -14
  113. data/test/unit/callback/callback_with_around_type_and_arguments_test.rb +0 -25
  114. data/test/unit/callback/callback_with_around_type_and_block_test.rb +0 -44
  115. data/test/unit/callback/callback_with_around_type_and_bound_method_test.rb +0 -23
  116. data/test/unit/callback/callback_with_around_type_and_multiple_methods_test.rb +0 -93
  117. data/test/unit/callback/callback_with_around_type_and_terminator_test.rb +0 -17
  118. data/test/unit/callback/callback_with_block_test.rb +0 -20
  119. data/test/unit/callback/callback_with_bound_method_and_arguments_test.rb +0 -28
  120. data/test/unit/callback/callback_with_bound_method_test.rb +0 -35
  121. data/test/unit/callback/callback_with_do_method_test.rb +0 -18
  122. data/test/unit/callback/callback_with_explicit_requirements_test.rb +0 -32
  123. data/test/unit/callback/callback_with_if_condition_test.rb +0 -17
  124. data/test/unit/callback/callback_with_implicit_requirements_test.rb +0 -32
  125. data/test/unit/callback/callback_with_method_argument_test.rb +0 -18
  126. data/test/unit/callback/callback_with_mixed_methods_test.rb +0 -31
  127. data/test/unit/callback/callback_with_multiple_bound_methods_test.rb +0 -21
  128. data/test/unit/callback/callback_with_multiple_do_methods_test.rb +0 -29
  129. data/test/unit/callback/callback_with_multiple_method_arguments_test.rb +0 -29
  130. data/test/unit/callback/callback_with_terminator_test.rb +0 -22
  131. data/test/unit/callback/callback_with_unbound_method_test.rb +0 -14
  132. data/test/unit/callback/callback_with_unless_condition_test.rb +0 -17
  133. data/test/unit/callback/callback_without_arguments_test.rb +0 -14
  134. data/test/unit/callback/callback_without_terminator_test.rb +0 -12
  135. data/test/unit/error/error_by_default_test.rb +0 -21
  136. data/test/unit/error/error_with_message_test.rb +0 -23
  137. data/test/unit/eval_helper/eval_helpers_base_test.rb +0 -8
  138. data/test/unit/eval_helper/eval_helpers_proc_block_and_explicit_arguments_test.rb +0 -14
  139. data/test/unit/eval_helper/eval_helpers_proc_block_and_implicit_arguments_test.rb +0 -14
  140. data/test/unit/eval_helper/eval_helpers_proc_test.rb +0 -13
  141. data/test/unit/eval_helper/eval_helpers_proc_with_arguments_test.rb +0 -13
  142. data/test/unit/eval_helper/eval_helpers_proc_with_block_test.rb +0 -13
  143. data/test/unit/eval_helper/eval_helpers_proc_with_block_without_arguments_test.rb +0 -18
  144. data/test/unit/eval_helper/eval_helpers_proc_with_block_without_object_test.rb +0 -14
  145. data/test/unit/eval_helper/eval_helpers_proc_without_arguments_test.rb +0 -19
  146. data/test/unit/eval_helper/eval_helpers_string_test.rb +0 -25
  147. data/test/unit/eval_helper/eval_helpers_string_with_block_test.rb +0 -12
  148. data/test/unit/eval_helper/eval_helpers_symbol_method_missing_test.rb +0 -20
  149. data/test/unit/eval_helper/eval_helpers_symbol_private_test.rb +0 -17
  150. data/test/unit/eval_helper/eval_helpers_symbol_protected_test.rb +0 -17
  151. data/test/unit/eval_helper/eval_helpers_symbol_tainted_method_test.rb +0 -18
  152. data/test/unit/eval_helper/eval_helpers_symbol_test.rb +0 -16
  153. data/test/unit/eval_helper/eval_helpers_symbol_with_arguments_and_block_test.rb +0 -16
  154. data/test/unit/eval_helper/eval_helpers_symbol_with_arguments_test.rb +0 -16
  155. data/test/unit/eval_helper/eval_helpers_symbol_with_block_test.rb +0 -16
  156. data/test/unit/eval_helper/eval_helpers_test.rb +0 -13
  157. data/test/unit/event/event_after_being_copied_test.rb +0 -17
  158. data/test/unit/event/event_by_default_test.rb +0 -60
  159. data/test/unit/event/event_context_test.rb +0 -16
  160. data/test/unit/event/event_on_failure_test.rb +0 -44
  161. data/test/unit/event/event_test.rb +0 -34
  162. data/test/unit/event/event_transitions_test.rb +0 -62
  163. data/test/unit/event/event_with_conflicting_helpers_after_definition_test.rb +0 -79
  164. data/test/unit/event/event_with_conflicting_helpers_before_definition_test.rb +0 -58
  165. data/test/unit/event/event_with_conflicting_machine_test.rb +0 -48
  166. data/test/unit/event/event_with_dynamic_human_name_test.rb +0 -26
  167. data/test/unit/event/event_with_human_name_test.rb +0 -13
  168. data/test/unit/event/event_with_invalid_current_state_test.rb +0 -30
  169. data/test/unit/event/event_with_machine_action_test.rb +0 -33
  170. data/test/unit/event/event_with_marshalling_test.rb +0 -47
  171. data/test/unit/event/event_with_matching_disabled_transitions_test.rb +0 -115
  172. data/test/unit/event/event_with_matching_enabled_transitions_test.rb +0 -75
  173. data/test/unit/event/event_with_multiple_transitions_test.rb +0 -61
  174. data/test/unit/event/event_with_namespace_test.rb +0 -34
  175. data/test/unit/event/event_with_transition_with_blacklisted_to_state_test.rb +0 -60
  176. data/test/unit/event/event_with_transition_with_loopback_state_test.rb +0 -36
  177. data/test/unit/event/event_with_transition_with_nil_to_state_test.rb +0 -36
  178. data/test/unit/event/event_with_transition_with_whitelisted_to_state_test.rb +0 -51
  179. data/test/unit/event/event_with_transition_without_to_state_test.rb +0 -36
  180. data/test/unit/event/event_with_transitions_test.rb +0 -32
  181. data/test/unit/event/event_without_matching_transitions_test.rb +0 -41
  182. data/test/unit/event/event_without_transitions_test.rb +0 -28
  183. data/test/unit/event/invalid_event_test.rb +0 -20
  184. data/test/unit/event_collection/event_collection_attribute_with_machine_action_test.rb +0 -62
  185. data/test/unit/event_collection/event_collection_attribute_with_namespaced_machine_test.rb +0 -36
  186. data/test/unit/event_collection/event_collection_by_default_test.rb +0 -26
  187. data/test/unit/event_collection/event_collection_test.rb +0 -39
  188. data/test/unit/event_collection/event_collection_with_custom_machine_attribute_test.rb +0 -31
  189. data/test/unit/event_collection/event_collection_with_events_with_transitions_test.rb +0 -76
  190. data/test/unit/event_collection/event_collection_with_multiple_events_test.rb +0 -27
  191. data/test/unit/event_collection/event_collection_with_validations_test.rb +0 -74
  192. data/test/unit/event_collection/event_collection_without_machine_action_test.rb +0 -18
  193. data/test/unit/event_collection/event_string_collection_test.rb +0 -31
  194. data/test/unit/helper_module_test.rb +0 -17
  195. data/test/unit/integrations/integration_finder_test.rb +0 -16
  196. data/test/unit/integrations/integration_matcher_test.rb +0 -29
  197. data/test/unit/invalid_transition/invalid_parallel_transition_test.rb +0 -18
  198. data/test/unit/invalid_transition/invalid_transition_test.rb +0 -47
  199. data/test/unit/invalid_transition/invalid_transition_with_integration_test.rb +0 -45
  200. data/test/unit/invalid_transition/invalid_transition_with_namespace_test.rb +0 -32
  201. data/test/unit/machine/machine_after_being_copied_test.rb +0 -62
  202. data/test/unit/machine/machine_after_changing_initial_state.rb +0 -28
  203. data/test/unit/machine/machine_after_changing_owner_class_test.rb +0 -31
  204. data/test/unit/machine/machine_by_default_test.rb +0 -160
  205. data/test/unit/machine/machine_finder_custom_options_test.rb +0 -17
  206. data/test/unit/machine/machine_finder_with_existing_machine_on_superclass_test.rb +0 -85
  207. data/test/unit/machine/machine_finder_with_existing_on_same_class_test.rb +0 -23
  208. data/test/unit/machine/machine_finder_without_existing_machine_test.rb +0 -25
  209. data/test/unit/machine/machine_persistence_test.rb +0 -52
  210. data/test/unit/machine/machine_state_initialization_test.rb +0 -56
  211. data/test/unit/machine/machine_test.rb +0 -30
  212. data/test/unit/machine/machine_with_action_already_overridden_test.rb +0 -23
  213. data/test/unit/machine/machine_with_action_defined_in_class_test.rb +0 -37
  214. data/test/unit/machine/machine_with_action_defined_in_included_module_test.rb +0 -46
  215. data/test/unit/machine/machine_with_action_defined_in_superclass_test.rb +0 -43
  216. data/test/unit/machine/machine_with_action_undefined_test.rb +0 -33
  217. data/test/unit/machine/machine_with_cached_state_test.rb +0 -20
  218. data/test/unit/machine/machine_with_class_helpers_test.rb +0 -179
  219. data/test/unit/machine/machine_with_conflicting_helpers_after_definition_test.rb +0 -244
  220. data/test/unit/machine/machine_with_conflicting_helpers_before_definition_test.rb +0 -175
  221. data/test/unit/machine/machine_with_custom_action_test.rb +0 -11
  222. data/test/unit/machine/machine_with_custom_attribute_test.rb +0 -103
  223. data/test/unit/machine/machine_with_custom_initialize_test.rb +0 -24
  224. data/test/unit/machine/machine_with_custom_integration_test.rb +0 -72
  225. data/test/unit/machine/machine_with_custom_invalidation_test.rb +0 -39
  226. data/test/unit/machine/machine_with_custom_name_test.rb +0 -57
  227. data/test/unit/machine/machine_with_custom_plural_test.rb +0 -52
  228. data/test/unit/machine/machine_with_dynamic_initial_state_test.rb +0 -65
  229. data/test/unit/machine/machine_with_event_matchers_test.rb +0 -41
  230. data/test/unit/machine/machine_with_events_test.rb +0 -52
  231. data/test/unit/machine/machine_with_events_with_custom_human_names_test.rb +0 -18
  232. data/test/unit/machine/machine_with_events_with_transitions_test.rb +0 -37
  233. data/test/unit/machine/machine_with_existing_event_test.rb +0 -17
  234. data/test/unit/machine/machine_with_existing_machines_on_owner_class_test.rb +0 -20
  235. data/test/unit/machine/machine_with_existing_machines_with_same_attributes_on_owner_class_test.rb +0 -71
  236. data/test/unit/machine/machine_with_existing_machines_with_same_attributes_on_owner_subclass_test.rb +0 -31
  237. data/test/unit/machine/machine_with_existing_state_test.rb +0 -27
  238. data/test/unit/machine/machine_with_failure_callbacks_test.rb +0 -48
  239. data/test/unit/machine/machine_with_helpers_test.rb +0 -14
  240. data/test/unit/machine/machine_with_initial_state_with_value_and_owner_default.rb +0 -25
  241. data/test/unit/machine/machine_with_initialize_and_super_test.rb +0 -17
  242. data/test/unit/machine/machine_with_initialize_arguments_and_block_test.rb +0 -31
  243. data/test/unit/machine/machine_with_initialize_without_super_test.rb +0 -17
  244. data/test/unit/machine/machine_with_instance_helpers_test.rb +0 -179
  245. data/test/unit/machine/machine_with_integration_test.rb +0 -72
  246. data/test/unit/machine/machine_with_multiple_events_test.rb +0 -32
  247. data/test/unit/machine/machine_with_namespace_test.rb +0 -48
  248. data/test/unit/machine/machine_with_nil_action_test.rb +0 -27
  249. data/test/unit/machine/machine_with_other_states.rb +0 -22
  250. data/test/unit/machine/machine_with_owner_subclass_test.rb +0 -18
  251. data/test/unit/machine/machine_with_paths_test.rb +0 -25
  252. data/test/unit/machine/machine_with_private_action_test.rb +0 -43
  253. data/test/unit/machine/machine_with_state_matchers_test.rb +0 -41
  254. data/test/unit/machine/machine_with_state_with_matchers_test.rb +0 -19
  255. data/test/unit/machine/machine_with_states_test.rb +0 -55
  256. data/test/unit/machine/machine_with_states_with_behaviors_test.rb +0 -23
  257. data/test/unit/machine/machine_with_states_with_custom_human_names_test.rb +0 -18
  258. data/test/unit/machine/machine_with_states_with_custom_values_test.rb +0 -21
  259. data/test/unit/machine/machine_with_states_with_runtime_dependencies_test.rb +0 -19
  260. data/test/unit/machine/machine_with_static_initial_state_test.rb +0 -49
  261. data/test/unit/machine/machine_with_superclass_conflicting_helpers_after_definition_test.rb +0 -36
  262. data/test/unit/machine/machine_with_transition_callbacks_test.rb +0 -144
  263. data/test/unit/machine/machine_with_transitions_test.rb +0 -87
  264. data/test/unit/machine/machine_without_initialization_test.rb +0 -31
  265. data/test/unit/machine/machine_without_initialize_test.rb +0 -14
  266. data/test/unit/machine/machine_without_integration_test.rb +0 -31
  267. data/test/unit/machine_collection/machine_collection_by_default_test.rb +0 -11
  268. data/test/unit/machine_collection/machine_collection_fire_test.rb +0 -80
  269. data/test/unit/machine_collection/machine_collection_fire_with_transactions_test.rb +0 -54
  270. data/test/unit/machine_collection/machine_collection_fire_with_validations_test.rb +0 -76
  271. data/test/unit/machine_collection/machine_collection_state_initialization_test.rb +0 -111
  272. data/test/unit/machine_collection/machine_collection_transitions_with_blank_events_test.rb +0 -25
  273. data/test/unit/machine_collection/machine_collection_transitions_with_custom_options_test.rb +0 -20
  274. data/test/unit/machine_collection/machine_collection_transitions_with_different_actions_test.rb +0 -26
  275. data/test/unit/machine_collection/machine_collection_transitions_with_exisiting_transitions_test.rb +0 -25
  276. data/test/unit/machine_collection/machine_collection_transitions_with_invalid_events_test.rb +0 -25
  277. data/test/unit/machine_collection/machine_collection_transitions_with_same_actions_test.rb +0 -31
  278. data/test/unit/machine_collection/machine_collection_transitions_with_transition_test.rb +0 -26
  279. data/test/unit/machine_collection/machine_collection_transitions_without_events_test.rb +0 -25
  280. data/test/unit/machine_collection/machine_collection_transitions_without_transition_test.rb +0 -27
  281. data/test/unit/matcher/all_matcher_test.rb +0 -29
  282. data/test/unit/matcher/blacklist_matcher_test.rb +0 -30
  283. data/test/unit/matcher/loopback_matcher_test.rb +0 -27
  284. data/test/unit/matcher/matcher_by_default_test.rb +0 -15
  285. data/test/unit/matcher/matcher_with_multiple_values_test.rb +0 -15
  286. data/test/unit/matcher/matcher_with_value_test.rb +0 -15
  287. data/test/unit/matcher/whitelist_matcher_test.rb +0 -30
  288. data/test/unit/matcher_helpers/matcher_helpers_all_test.rb +0 -14
  289. data/test/unit/matcher_helpers/matcher_helpers_any_test.rb +0 -14
  290. data/test/unit/matcher_helpers/matcher_helpers_same_test.rb +0 -13
  291. data/test/unit/node_collection/node_collection_after_being_copied_test.rb +0 -46
  292. data/test/unit/node_collection/node_collection_after_update_test.rb +0 -36
  293. data/test/unit/node_collection/node_collection_by_default_test.rb +0 -22
  294. data/test/unit/node_collection/node_collection_test.rb +0 -23
  295. data/test/unit/node_collection/node_collection_with_indices_test.rb +0 -42
  296. data/test/unit/node_collection/node_collection_with_matcher_contexts_test.rb +0 -25
  297. data/test/unit/node_collection/node_collection_with_nodes_test.rb +0 -46
  298. data/test/unit/node_collection/node_collection_with_numeric_index_test.rb +0 -24
  299. data/test/unit/node_collection/node_collection_with_postdefined_contexts_test.rb +0 -22
  300. data/test/unit/node_collection/node_collection_with_predefined_contexts_test.rb +0 -23
  301. data/test/unit/node_collection/node_collection_with_string_index_test.rb +0 -20
  302. data/test/unit/node_collection/node_collection_with_symbol_index_test.rb +0 -20
  303. data/test/unit/node_collection/node_collection_without_indices_test.rb +0 -30
  304. data/test/unit/path/path_by_default_test.rb +0 -54
  305. data/test/unit/path/path_test.rb +0 -14
  306. data/test/unit/path/path_with_available_transitions_after_reaching_target_test.rb +0 -40
  307. data/test/unit/path/path_with_available_transitions_test.rb +0 -54
  308. data/test/unit/path/path_with_deep_target_reached_test.rb +0 -50
  309. data/test/unit/path/path_with_deep_target_test.rb +0 -40
  310. data/test/unit/path/path_with_duplicates_test.rb +0 -32
  311. data/test/unit/path/path_with_encountered_transitions_test.rb +0 -34
  312. data/test/unit/path/path_with_guarded_transitions_test.rb +0 -42
  313. data/test/unit/path/path_with_reached_target_test.rb +0 -35
  314. data/test/unit/path/path_with_transitions_test.rb +0 -54
  315. data/test/unit/path/path_with_unreached_target_test.rb +0 -31
  316. data/test/unit/path/path_without_transitions_test.rb +0 -24
  317. data/test/unit/path_collection/path_collection_by_default_test.rb +0 -46
  318. data/test/unit/path_collection/path_collection_test.rb +0 -24
  319. data/test/unit/path_collection/path_collection_with_deep_paths_test.rb +0 -43
  320. data/test/unit/path_collection/path_collection_with_duplicate_nodes_test.rb +0 -31
  321. data/test/unit/path_collection/path_collection_with_from_state_test.rb +0 -27
  322. data/test/unit/path_collection/path_collection_with_paths_test.rb +0 -47
  323. data/test/unit/path_collection/path_collection_with_to_state_test.rb +0 -29
  324. data/test/unit/path_collection/path_with_guarded_paths_test.rb +0 -25
  325. data/test/unit/state/state_after_being_copied_test.rb +0 -19
  326. data/test/unit/state/state_by_default_test.rb +0 -41
  327. data/test/unit/state/state_final_test.rb +0 -28
  328. data/test/unit/state/state_initial_test.rb +0 -13
  329. data/test/unit/state/state_not_final_test.rb +0 -32
  330. data/test/unit/state/state_not_initial_test.rb +0 -13
  331. data/test/unit/state/state_test.rb +0 -44
  332. data/test/unit/state/state_with_cached_lambda_value_test.rb +0 -29
  333. data/test/unit/state/state_with_conflicting_helpers_after_definition_test.rb +0 -38
  334. data/test/unit/state/state_with_conflicting_helpers_before_definition_test.rb +0 -29
  335. data/test/unit/state/state_with_conflicting_machine_name_test.rb +0 -20
  336. data/test/unit/state/state_with_conflicting_machine_test.rb +0 -37
  337. data/test/unit/state/state_with_context_test.rb +0 -60
  338. data/test/unit/state/state_with_dynamic_human_name_test.rb +0 -25
  339. data/test/unit/state/state_with_existing_context_method_test.rb +0 -24
  340. data/test/unit/state/state_with_human_name_test.rb +0 -13
  341. data/test/unit/state/state_with_integer_value_test.rb +0 -32
  342. data/test/unit/state/state_with_invalid_method_call_test.rb +0 -21
  343. data/test/unit/state/state_with_lambda_value_test.rb +0 -37
  344. data/test/unit/state/state_with_matcher_test.rb +0 -18
  345. data/test/unit/state/state_with_multiple_contexts_test.rb +0 -57
  346. data/test/unit/state/state_with_name_test.rb +0 -43
  347. data/test/unit/state/state_with_namespace_test.rb +0 -22
  348. data/test/unit/state/state_with_nil_value_test.rb +0 -35
  349. data/test/unit/state/state_with_redefined_context_method_test.rb +0 -45
  350. data/test/unit/state/state_with_symbolic_value_test.rb +0 -32
  351. data/test/unit/state/state_with_valid_inherited_method_call_for_current_state_test.rb +0 -40
  352. data/test/unit/state/state_with_valid_method_call_for_current_state_test.rb +0 -33
  353. data/test/unit/state/state_with_valid_method_call_for_different_state_test.rb +0 -41
  354. data/test/unit/state/state_without_cached_lambda_value_test.rb +0 -25
  355. data/test/unit/state/state_without_name_test.rb +0 -39
  356. data/test/unit/state_collection/state_collection_by_default_test.rb +0 -21
  357. data/test/unit/state_collection/state_collection_string_test.rb +0 -35
  358. data/test/unit/state_collection/state_collection_test.rb +0 -74
  359. data/test/unit/state_collection/state_collection_with_custom_state_values_test.rb +0 -29
  360. data/test/unit/state_collection/state_collection_with_event_transitions_test.rb +0 -39
  361. data/test/unit/state_collection/state_collection_with_initial_state_test.rb +0 -40
  362. data/test/unit/state_collection/state_collection_with_namespace_test.rb +0 -21
  363. data/test/unit/state_collection/state_collection_with_state_behaviors_test.rb +0 -40
  364. data/test/unit/state_collection/state_collection_with_state_matchers_test.rb +0 -29
  365. data/test/unit/state_collection/state_collection_with_transition_callbacks_test.rb +0 -40
  366. data/test/unit/state_context/state_context_proxy_test.rb +0 -26
  367. data/test/unit/state_context/state_context_proxy_with_if_and_unless_conditions_test.rb +0 -42
  368. data/test/unit/state_context/state_context_proxy_with_if_condition_test.rb +0 -64
  369. data/test/unit/state_context/state_context_proxy_with_multiple_if_conditions_test.rb +0 -32
  370. data/test/unit/state_context/state_context_proxy_with_multiple_unless_conditions_test.rb +0 -32
  371. data/test/unit/state_context/state_context_proxy_with_unless_condition_test.rb +0 -64
  372. data/test/unit/state_context/state_context_proxy_without_conditions_test.rb +0 -31
  373. data/test/unit/state_context/state_context_test.rb +0 -28
  374. data/test/unit/state_context/state_context_transition_test.rb +0 -104
  375. data/test/unit/state_context/state_context_with_matching_transition_test.rb +0 -27
  376. data/test/unit/state_machine/state_machine_by_default_test.rb +0 -12
  377. data/test/unit/state_machine/state_machine_test.rb +0 -20
  378. data/test/unit/transition/transition_after_being_performed_test.rb +0 -48
  379. data/test/unit/transition/transition_after_being_persisted_test.rb +0 -46
  380. data/test/unit/transition/transition_after_being_rolled_back_test.rb +0 -35
  381. data/test/unit/transition/transition_equality_test.rb +0 -52
  382. data/test/unit/transition/transition_loopback_test.rb +0 -18
  383. data/test/unit/transition/transition_test.rb +0 -96
  384. data/test/unit/transition/transition_transient_test.rb +0 -20
  385. data/test/unit/transition/transition_with_action_test.rb +0 -27
  386. data/test/unit/transition/transition_with_after_callbacks_skipped_test.rb +0 -127
  387. data/test/unit/transition/transition_with_after_callbacks_test.rb +0 -93
  388. data/test/unit/transition/transition_with_around_callbacks_test.rb +0 -141
  389. data/test/unit/transition/transition_with_before_callbacks_skipped_test.rb +0 -30
  390. data/test/unit/transition/transition_with_before_callbacks_test.rb +0 -104
  391. data/test/unit/transition/transition_with_custom_machine_attribute_test.rb +0 -28
  392. data/test/unit/transition/transition_with_different_states_test.rb +0 -18
  393. data/test/unit/transition/transition_with_dynamic_to_value_test.rb +0 -19
  394. data/test/unit/transition/transition_with_failure_callbacks_test.rb +0 -84
  395. data/test/unit/transition/transition_with_invalid_nodes_test.rb +0 -29
  396. data/test/unit/transition/transition_with_mixed_callbacks_test.rb +0 -105
  397. data/test/unit/transition/transition_with_multiple_after_callbacks_test.rb +0 -40
  398. data/test/unit/transition/transition_with_multiple_around_callbacks_test.rb +0 -114
  399. data/test/unit/transition/transition_with_multiple_before_callbacks_test.rb +0 -40
  400. data/test/unit/transition/transition_with_multiple_failure_callbacks_test.rb +0 -40
  401. data/test/unit/transition/transition_with_namespace_test.rb +0 -47
  402. data/test/unit/transition/transition_with_perform_arguments_test.rb +0 -35
  403. data/test/unit/transition/transition_with_transactions_test.rb +0 -42
  404. data/test/unit/transition/transition_without_callbacks_test.rb +0 -33
  405. data/test/unit/transition/transition_without_reading_state_test.rb +0 -22
  406. data/test/unit/transition/transition_without_running_action_test.rb +0 -47
  407. data/test/unit/transition_collection/attribute_transition_collection_by_default_test.rb +0 -23
  408. data/test/unit/transition_collection/attribute_transition_collection_marshalling_test.rb +0 -64
  409. data/test/unit/transition_collection/attribute_transition_collection_with_action_error_test.rb +0 -44
  410. data/test/unit/transition_collection/attribute_transition_collection_with_action_failed_test.rb +0 -44
  411. data/test/unit/transition_collection/attribute_transition_collection_with_after_callback_error_test.rb +0 -32
  412. data/test/unit/transition_collection/attribute_transition_collection_with_after_callback_halt_test.rb +0 -33
  413. data/test/unit/transition_collection/attribute_transition_collection_with_around_after_yield_callback_error_test.rb +0 -32
  414. data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_after_yield_error_test.rb +0 -32
  415. data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_after_yield_halt_test.rb +0 -33
  416. data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_before_yield_halt_test.rb +0 -33
  417. data/test/unit/transition_collection/attribute_transition_collection_with_before_callback_error_test.rb +0 -32
  418. data/test/unit/transition_collection/attribute_transition_collection_with_before_callback_halt_test.rb +0 -33
  419. data/test/unit/transition_collection/attribute_transition_collection_with_callbacks_test.rb +0 -68
  420. data/test/unit/transition_collection/attribute_transition_collection_with_event_transitions_test.rb +0 -41
  421. data/test/unit/transition_collection/attribute_transition_collection_with_events_test.rb +0 -44
  422. data/test/unit/transition_collection/attribute_transition_collection_with_skipped_after_callbacks_test.rb +0 -42
  423. data/test/unit/transition_collection/transition_collection_by_default_test.rb +0 -23
  424. data/test/unit/transition_collection/transition_collection_empty_with_block_test.rb +0 -23
  425. data/test/unit/transition_collection/transition_collection_empty_without_block_test.rb +0 -12
  426. data/test/unit/transition_collection/transition_collection_invalid_test.rb +0 -21
  427. data/test/unit/transition_collection/transition_collection_partial_invalid_test.rb +0 -69
  428. data/test/unit/transition_collection/transition_collection_test.rb +0 -26
  429. data/test/unit/transition_collection/transition_collection_valid_test.rb +0 -57
  430. data/test/unit/transition_collection/transition_collection_with_action_error_test.rb +0 -66
  431. data/test/unit/transition_collection/transition_collection_with_action_failed_test.rb +0 -60
  432. data/test/unit/transition_collection/transition_collection_with_action_hook_and_block_test.rb +0 -17
  433. data/test/unit/transition_collection/transition_collection_with_action_hook_and_skipped_action_test.rb +0 -17
  434. data/test/unit/transition_collection/transition_collection_with_action_hook_and_skipped_after_callbacks_test.rb +0 -37
  435. data/test/unit/transition_collection/transition_collection_with_action_hook_base_test.rb +0 -34
  436. data/test/unit/transition_collection/transition_collection_with_action_hook_error_test.rb +0 -29
  437. data/test/unit/transition_collection/transition_collection_with_action_hook_invalid_test.rb +0 -17
  438. data/test/unit/transition_collection/transition_collection_with_action_hook_multiple_test.rb +0 -79
  439. data/test/unit/transition_collection/transition_collection_with_action_hook_test.rb +0 -45
  440. data/test/unit/transition_collection/transition_collection_with_action_hook_with_different_actions_test.rb +0 -48
  441. data/test/unit/transition_collection/transition_collection_with_action_hook_with_nil_action_test.rb +0 -42
  442. data/test/unit/transition_collection/transition_collection_with_after_callback_halt_test.rb +0 -47
  443. data/test/unit/transition_collection/transition_collection_with_before_callback_halt_test.rb +0 -51
  444. data/test/unit/transition_collection/transition_collection_with_block_test.rb +0 -46
  445. data/test/unit/transition_collection/transition_collection_with_callbacks_test.rb +0 -135
  446. data/test/unit/transition_collection/transition_collection_with_different_actions_test.rb +0 -189
  447. data/test/unit/transition_collection/transition_collection_with_duplicate_actions_test.rb +0 -48
  448. data/test/unit/transition_collection/transition_collection_with_empty_actions_test.rb +0 -41
  449. data/test/unit/transition_collection/transition_collection_with_mixed_actions_test.rb +0 -41
  450. data/test/unit/transition_collection/transition_collection_with_skipped_actions_and_block_test.rb +0 -34
  451. data/test/unit/transition_collection/transition_collection_with_skipped_actions_test.rb +0 -69
  452. data/test/unit/transition_collection/transition_collection_with_skipped_after_callbacks_and_around_callbacks_test.rb +0 -53
  453. data/test/unit/transition_collection/transition_collection_with_skipped_after_callbacks_test.rb +0 -34
  454. data/test/unit/transition_collection/transition_collection_with_transactions_test.rb +0 -65
  455. data/test/unit/transition_collection/transition_collection_without_transactions_test.rb +0 -29
@@ -5,114 +5,114 @@ module StateMachines
5
5
  class Matcher
6
6
  # The list of values against which queries are matched
7
7
  attr_reader :values
8
-
8
+
9
9
  # Creates a new matcher for querying against the given set of values
10
10
  def initialize(values = [])
11
11
  @values = values.is_a?(Array) ? values : [values]
12
12
  end
13
-
13
+
14
14
  # Generates a subset of values that exists in both the set of values being
15
15
  # filtered and the values configured for the matcher
16
16
  def filter(values)
17
17
  self.values & values
18
18
  end
19
19
  end
20
-
20
+
21
21
  # Matches any given value. Since there is no configuration for this type of
22
22
  # matcher, it must be used as a singleton.
23
23
  class AllMatcher < Matcher
24
24
  include Singleton
25
-
25
+
26
26
  # Generates a blacklist matcher based on the given set of values
27
- #
27
+ #
28
28
  # == Examples
29
- #
29
+ #
30
30
  # matcher = StateMachines::AllMatcher.instance - [:parked, :idling]
31
31
  # matcher.matches?(:parked) # => false
32
32
  # matcher.matches?(:first_gear) # => true
33
33
  def -(blacklist)
34
34
  BlacklistMatcher.new(blacklist)
35
35
  end
36
-
36
+
37
37
  # Always returns true
38
38
  def matches?(value, context = {})
39
39
  true
40
40
  end
41
-
41
+
42
42
  # Always returns the given set of values
43
43
  def filter(values)
44
44
  values
45
45
  end
46
-
46
+
47
47
  # A human-readable description of this matcher. Always "all".
48
48
  def description
49
49
  'all'
50
50
  end
51
51
  end
52
-
52
+
53
53
  # Matches a specific set of values
54
54
  class WhitelistMatcher < Matcher
55
55
  # Checks whether the given value exists within the whitelist configured
56
56
  # for this matcher.
57
- #
57
+ #
58
58
  # == Examples
59
- #
59
+ #
60
60
  # matcher = StateMachines::WhitelistMatcher.new([:parked, :idling])
61
61
  # matcher.matches?(:parked) # => true
62
62
  # matcher.matches?(:first_gear) # => false
63
63
  def matches?(value, context = {})
64
64
  values.include?(value)
65
65
  end
66
-
66
+
67
67
  # A human-readable description of this matcher
68
68
  def description
69
69
  values.length == 1 ? values.first.inspect : values.inspect
70
70
  end
71
71
  end
72
-
72
+
73
73
  # Matches everything but a specific set of values
74
74
  class BlacklistMatcher < Matcher
75
75
  # Checks whether the given value exists outside the blacklist configured
76
76
  # for this matcher.
77
- #
77
+ #
78
78
  # == Examples
79
- #
79
+ #
80
80
  # matcher = StateMachines::BlacklistMatcher.new([:parked, :idling])
81
81
  # matcher.matches?(:parked) # => false
82
82
  # matcher.matches?(:first_gear) # => true
83
83
  def matches?(value, context = {})
84
84
  !values.include?(value)
85
85
  end
86
-
86
+
87
87
  # Finds all values that are *not* within the blacklist configured for this
88
88
  # matcher
89
89
  def filter(values)
90
90
  values - self.values
91
91
  end
92
-
92
+
93
93
  # A human-readable description of this matcher
94
94
  def description
95
95
  "all - #{values.length == 1 ? values.first.inspect : values.inspect}"
96
96
  end
97
97
  end
98
-
98
+
99
99
  # Matches a loopback of two values within a context. Since there is no
100
100
  # configuration for this type of matcher, it must be used as a singleton.
101
101
  class LoopbackMatcher < Matcher
102
102
  include Singleton
103
-
103
+
104
104
  # Checks whether the given value matches what the value originally was.
105
105
  # This value should be defined in the context.
106
- #
106
+ #
107
107
  # == Examples
108
- #
108
+ #
109
109
  # matcher = StateMachines::LoopbackMatcher.instance
110
110
  # matcher.matches?(:parked, :from => :parked) # => true
111
111
  # matcher.matches?(:parked, :from => :idling) # => false
112
112
  def matches?(value, context)
113
113
  context[:from] == value
114
114
  end
115
-
115
+
116
116
  # A human-readable description of this matcher. Always "same".
117
117
  def description
118
118
  'same'
@@ -2,24 +2,24 @@ module StateMachines
2
2
  # Provides a set of helper methods for generating matchers
3
3
  module MatcherHelpers
4
4
  # Represents a state that matches all known states in a machine.
5
- #
5
+ #
6
6
  # == Examples
7
- #
7
+ #
8
8
  # class Vehicle
9
9
  # state_machine do
10
10
  # before_transition any => :parked, :do => lambda {...}
11
11
  # before_transition all - :parked => all - :idling, :do => lambda {}
12
- #
12
+ #
13
13
  # event :park
14
14
  # transition all => :parked
15
15
  # end
16
- #
16
+ #
17
17
  # event :crash
18
18
  # transition all - :parked => :stalled
19
19
  # end
20
20
  # end
21
21
  # end
22
- #
22
+ #
23
23
  # In the above example, +all+ will match the following states since they
24
24
  # are known:
25
25
  # * +parked+
@@ -29,12 +29,12 @@ module StateMachines
29
29
  AllMatcher.instance
30
30
  end
31
31
  alias_method :any, :all
32
-
32
+
33
33
  # Represents a state that matches the original +from+ state. This is useful
34
34
  # for defining transitions which are loopbacks.
35
- #
35
+ #
36
36
  # == Examples
37
- #
37
+ #
38
38
  # class Vehicle
39
39
  # state_machine do
40
40
  # event :ignite
@@ -42,11 +42,11 @@ module StateMachines
42
42
  # end
43
43
  # end
44
44
  # end
45
- #
45
+ #
46
46
  # In the above example, +same+ will match whichever the from state is. In
47
47
  # the case of the +ignite+ event, it is essential the same as the following:
48
- #
49
- # transition :parked => :parked, :first_gear => :first_gear
48
+ #
49
+ # transition :idling => :idling, :first_gear => :first_gear
50
50
  def same
51
51
  LoopbackMatcher.instance
52
52
  end
@@ -162,37 +162,39 @@ module StateMachines
162
162
  self[key, index_name] || fail(IndexError, "#{key.inspect} is an invalid #{index_name}")
163
163
  end
164
164
 
165
- protected
166
- # Gets the given index. If the index does not exist, then an ArgumentError
167
- # is raised.
165
+ protected
166
+
167
+ # Gets the given index. If the index does not exist, then an ArgumentError
168
+ # is raised.
168
169
  def index(name)
169
170
  fail ArgumentError, 'No indices configured' unless @indices.any?
171
+
170
172
  @indices[name] || fail(ArgumentError, "Invalid index: #{name.inspect}")
171
173
  end
172
174
 
173
- # Gets the value for the given attribute on the node
175
+ # Gets the value for the given attribute on the node
174
176
  def value(node, attribute)
175
177
  node.send(attribute)
176
178
  end
177
179
 
178
- # Adds the given key / node combination to an index, including the string
179
- # and symbol versions of the index
180
+ # Adds the given key / node combination to an index, including the string
181
+ # and symbol versions of the index
180
182
  def add_to_index(name, key, node)
181
183
  index(name)[key] = node
182
184
  index(:"#{name}_to_s")[key.to_s] = node
183
185
  index(:"#{name}_to_sym")[:"#{key}"] = node if to_sym?(key)
184
186
  end
185
187
 
186
- # Removes the given key from an index, including the string and symbol
187
- # versions of the index
188
+ # Removes the given key from an index, including the string and symbol
189
+ # versions of the index
188
190
  def remove_from_index(name, key)
189
191
  index(name).delete(key)
190
192
  index(:"#{name}_to_s").delete(key.to_s)
191
193
  index(:"#{name}_to_sym").delete(:"#{key}") if to_sym?(key)
192
194
  end
193
195
 
194
- # Updates the node for the given index, including the string and symbol
195
- # versions of the index
196
+ # Updates the node for the given index, including the string and symbol
197
+ # versions of the index
196
198
  def update_index(name, node)
197
199
  index = self.index(name)
198
200
  old_key = index.key(node)
@@ -205,13 +207,13 @@ module StateMachines
205
207
  end
206
208
  end
207
209
 
208
- # Determines whether the given value can be converted to a symbol
210
+ # Determines whether the given value can be converted to a symbol
209
211
  def to_sym?(value)
210
212
  "#{value}" != ''
211
213
  end
212
214
 
213
- # Evaluates the given context for a particular node. This will only
214
- # evaluate the context if the node matches.
215
+ # Evaluates the given context for a particular node. This will only
216
+ # evaluate the context if the node matches.
215
217
  def eval_context(context, node)
216
218
  node.context(&context[:block]) if context[:nodes].matches?(node.name)
217
219
  end
@@ -4,79 +4,79 @@ module StateMachines
4
4
  # branches that can be encountered in the object's state machine.
5
5
  class Path < Array
6
6
 
7
-
7
+
8
8
  # The object whose state machine is being walked
9
9
  attr_reader :object
10
-
10
+
11
11
  # The state machine this path is walking
12
12
  attr_reader :machine
13
-
13
+
14
14
  # Creates a new transition path for the given object. Initially this is an
15
15
  # empty path. In order to start walking the path, it must be populated with
16
16
  # an initial transition.
17
- #
17
+ #
18
18
  # Configuration options:
19
19
  # * <tt>:target</tt> - The target state to end the path on
20
20
  # * <tt>:guard</tt> - Whether to guard transitions with the if/unless
21
21
  # conditionals defined for each one
22
22
  def initialize(object, machine, options = {})
23
23
  options.assert_valid_keys(:target, :guard)
24
-
24
+
25
25
  @object = object
26
26
  @machine = machine
27
27
  @target = options[:target]
28
28
  @guard = options[:guard]
29
29
  end
30
-
30
+
31
31
  def initialize_copy(orig) #:nodoc:
32
32
  super
33
33
  @transitions = nil
34
34
  end
35
-
35
+
36
36
  # The initial state name for this path
37
37
  def from_name
38
- first && first.from_name
38
+ first&.from_name
39
39
  end
40
-
40
+
41
41
  # Lists all of the from states that can be reached through this path.
42
- #
42
+ #
43
43
  # For example,
44
- #
44
+ #
45
45
  # path.to_states # => [:parked, :idling, :first_gear, ...]
46
46
  def from_states
47
- map {|transition| transition.from_name}.uniq
47
+ map { |transition| transition.from_name }.uniq
48
48
  end
49
-
49
+
50
50
  # The end state name for this path. If a target state was specified for
51
51
  # the path, then that will be returned if the path is complete.
52
52
  def to_name
53
- last && last.to_name
53
+ last&.to_name
54
54
  end
55
-
55
+
56
56
  # Lists all of the to states that can be reached through this path.
57
- #
57
+ #
58
58
  # For example,
59
- #
59
+ #
60
60
  # path.to_states # => [:parked, :idling, :first_gear, ...]
61
61
  def to_states
62
- map {|transition| transition.to_name}.uniq
62
+ map { |transition| transition.to_name }.uniq
63
63
  end
64
-
64
+
65
65
  # Lists all of the events that can be fired through this path.
66
- #
66
+ #
67
67
  # For example,
68
- #
68
+ #
69
69
  # path.events # => [:park, :ignite, :shift_up, ...]
70
70
  def events
71
- map {|transition| transition.event}.uniq
71
+ map { |transition| transition.event }.uniq
72
72
  end
73
-
73
+
74
74
  # Walks down the next transitions at the end of this path. This will only
75
75
  # walk down paths that are considered valid.
76
76
  def walk
77
- transitions.each {|transition| yield dup.push(transition)}
77
+ transitions.each { |transition| yield dup.push(transition) }
78
78
  end
79
-
79
+
80
80
  # Determines whether or not this path has completed. A path is considered
81
81
  # complete when one of the following conditions is met:
82
82
  # * The last transition in the path ends on the target state
@@ -85,36 +85,37 @@ module StateMachines
85
85
  def complete?
86
86
  !empty? && (@target ? to_name == @target : transitions.empty?)
87
87
  end
88
-
89
- private
90
- # Calculates the number of times the given state has been walked to
91
- def times_walked_to(state)
92
- select {|transition| transition.to_name == state}.length
93
- end
94
-
95
- # Determines whether the given transition has been recently walked down in
96
- # this path. If a target is configured for this path, then this will only
97
- # look at transitions walked down since the target was last reached.
98
- def recently_walked?(transition)
99
- transitions = self
100
- if @target && @target != to_name && target_transition = detect {|t| t.to_name == @target}
101
- transitions = transitions[index(target_transition) + 1..-1]
102
- end
103
- transitions.include?(transition)
104
- end
105
-
106
- # Determines whether it's possible to walk to the given transition from
107
- # the current path. A transition can be walked to if:
108
- # * It has not been recently walked and
109
- # * If a target is specified, it has not been walked to twice yet
110
- def can_walk_to?(transition)
111
- !recently_walked?(transition) && (!@target || times_walked_to(@target) < 2)
112
- end
113
-
114
- # Get the next set of transitions that can be walked to starting from the
115
- # end of this path
116
- def transitions
117
- @transitions ||= empty? ? [] : machine.events.transitions_for(object, :from => to_name, :guard => @guard).select {|transition| can_walk_to?(transition)}
88
+
89
+ private
90
+
91
+ # Calculates the number of times the given state has been walked to
92
+ def times_walked_to(state)
93
+ select { |transition| transition.to_name == state }.length
94
+ end
95
+
96
+ # Determines whether the given transition has been recently walked down in
97
+ # this path. If a target is configured for this path, then this will only
98
+ # look at transitions walked down since the target was last reached.
99
+ def recently_walked?(transition)
100
+ transitions = self
101
+ if @target && @target != to_name && (target_transition = detect { |t| t.to_name == @target })
102
+ transitions = transitions[index(target_transition) + 1..-1]
118
103
  end
104
+ transitions.include?(transition)
105
+ end
106
+
107
+ # Determines whether it's possible to walk to the given transition from
108
+ # the current path. A transition can be walked to if:
109
+ # * It has not been recently walked and
110
+ # * If a target is specified, it has not been walked to twice yet
111
+ def can_walk_to?(transition)
112
+ !recently_walked?(transition) && (!@target || times_walked_to(@target) < 2)
113
+ end
114
+
115
+ # Get the next set of transitions that can be walked to starting from the
116
+ # end of this path
117
+ def transitions
118
+ @transitions ||= empty? ? [] : machine.events.transitions_for(object, from: to_name, guard: @guard).select { |transition| can_walk_to?(transition) }
119
+ end
119
120
  end
120
121
  end
@@ -3,21 +3,20 @@ module StateMachines
3
3
  # requirements regarding what states to start and end on
4
4
  class PathCollection < Array
5
5
 
6
-
7
6
  # The object whose state machine is being walked
8
7
  attr_reader :object
9
-
8
+
10
9
  # The state machine these path are walking
11
10
  attr_reader :machine
12
-
11
+
13
12
  # The initial state to start each path from
14
13
  attr_reader :from_name
15
-
14
+
16
15
  # The target state for each path
17
16
  attr_reader :to_name
18
-
17
+
19
18
  # Creates a new collection of paths with the given requirements.
20
- #
19
+ #
21
20
  # Configuration options:
22
21
  # * <tt>:from</tt> - The initial state to start from
23
22
  # * <tt>:to</tt> - The target end state
@@ -25,64 +24,65 @@ module StateMachines
25
24
  # * <tt>:guard</tt> - Whether to guard transitions with the if/unless
26
25
  # conditionals defined for each one
27
26
  def initialize(object, machine, options = {})
28
- options = {:deep => false, :from => machine.states.match!(object).name}.merge(options)
27
+ options = {deep: false, from: machine.states.match!(object).name}.merge(options)
29
28
  options.assert_valid_keys( :from, :to, :deep, :guard)
30
-
29
+
31
30
  @object = object
32
31
  @machine = machine
33
32
  @from_name = machine.states.fetch(options[:from]).name
34
33
  @to_name = options[:to] && machine.states.fetch(options[:to]).name
35
34
  @guard = options[:guard]
36
35
  @deep = options[:deep]
37
-
38
- initial_paths.each {|path| walk(path)}
36
+
37
+ initial_paths.each { |path| walk(path) }
39
38
  end
40
-
39
+
41
40
  # Lists all of the states that can be transitioned from through the paths in
42
41
  # this collection.
43
- #
42
+ #
44
43
  # For example,
45
- #
44
+ #
46
45
  # paths.from_states # => [:parked, :idling, :first_gear, ...]
47
46
  def from_states
48
47
  flat_map(&:from_states).uniq
49
48
  end
50
-
49
+
51
50
  # Lists all of the states that can be transitioned to through the paths in
52
51
  # this collection.
53
- #
52
+ #
54
53
  # For example,
55
- #
54
+ #
56
55
  # paths.to_states # => [:idling, :first_gear, :second_gear, ...]
57
56
  def to_states
58
57
  flat_map(&:to_states).uniq
59
58
  end
60
-
59
+
61
60
  # Lists all of the events that can be fired through the paths in this
62
61
  # collection.
63
- #
62
+ #
64
63
  # For example,
65
- #
64
+ #
66
65
  # paths.events # => [:park, :ignite, :shift_up, ...]
67
66
  def events
68
67
  flat_map(&:events).uniq
69
68
  end
70
-
71
- private
72
- # Gets the initial set of paths to walk
73
- def initial_paths
74
- machine.events.transitions_for(object, :from => from_name, :guard => @guard).map do |transition|
75
- path = Path.new(object, machine, :target => to_name, :guard => @guard)
76
- path << transition
77
- path
78
- end
79
- end
80
-
81
- # Walks down the given path. Each new path that matches the configured
82
- # requirements will be added to this collection.
83
- def walk(path)
84
- self << path if path.complete?
85
- path.walk {|next_path| walk(next_path)} unless to_name && path.complete? && !@deep
69
+
70
+ private
71
+
72
+ # Gets the initial set of paths to walk
73
+ def initial_paths
74
+ machine.events.transitions_for(object, from: from_name, guard: @guard).map do |transition|
75
+ path = Path.new(object, machine, target: to_name, guard: @guard)
76
+ path << transition
77
+ path
86
78
  end
79
+ end
80
+
81
+ # Walks down the given path. Each new path that matches the configured
82
+ # requirements will be added to this collection.
83
+ def walk(path)
84
+ self << path if path.complete?
85
+ path.walk { |next_path| walk(next_path) } unless to_name && path.complete? && !@deep
86
+ end
87
87
  end
88
88
  end
@@ -57,7 +57,7 @@ module StateMachines
57
57
  @name = name
58
58
  @qualified_name = name && machine.namespace ? :"#{machine.namespace}_#{name}" : name
59
59
  @human_name = options[:human_name] || (@name ? @name.to_s.tr('_', ' ') : 'nil')
60
- @value = options.include?(:value) ? options[:value] : name && name.to_s
60
+ @value = options.include?(:value) ? options[:value] : name&.to_s
61
61
  @cache = options[:cache]
62
62
  @matcher = options[:if]
63
63
  @initial = options[:initial] == true
@@ -68,8 +68,8 @@ module StateMachines
68
68
 
69
69
  # Output a warning if another machine has a conflicting qualified name
70
70
  # for a different attribute
71
- if conflict = conflicting_machines.detect { |other_name, other_machine| other_machine.attribute != machine.attribute }
72
- name, other_machine = conflict
71
+ if (conflict = conflicting_machines.detect { |_other_name, other_machine| other_machine.attribute != machine.attribute })
72
+ _name, other_machine = conflict
73
73
  warn "State #{qualified_name.inspect} for #{machine.name.inspect} is already defined in #{other_machine.name.inspect}"
74
74
  elsif conflicting_machines.empty?
75
75
  # Only bother adding predicates when another machine for the same
@@ -99,7 +99,7 @@ module StateMachines
99
99
  !machine.events.any? do |event|
100
100
  event.branches.any? do |branch|
101
101
  branch.state_requirements.any? do |requirement|
102
- requirement[:from].matches?(name) && !requirement[:to].matches?(name, :from => name)
102
+ requirement[:from].matches?(name) && !requirement[:to].matches?(name, from: name)
103
103
  end
104
104
  end
105
105
  end
@@ -218,7 +218,7 @@ module StateMachines
218
218
  # will be raised.
219
219
  def call(object, method, *args, &block)
220
220
  options = args.last.is_a?(Hash) ? args.pop : {}
221
- options = {:method_name => method}.merge(options)
221
+ options = {method_name: method}.merge(options)
222
222
  state = machine.states.match!(object)
223
223
 
224
224
  if state == self && object.respond_to?(method)
@@ -254,7 +254,8 @@ module StateMachines
254
254
  "#<#{self.class} #{attributes.map { |attr, value| "#{attr}=#{value.inspect}" } * ' '}>"
255
255
  end
256
256
 
257
- private
257
+ private
258
+
258
259
  # Should the value be cached after it's evaluated for the first time?
259
260
  def cache_value?
260
261
  @cache