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
@@ -2,7 +2,7 @@ module StateMachines
2
2
  # A state defines a value that an attribute can be in after being transitioned
3
3
  # 0 or more times. States can represent a value of any type in Ruby, though
4
4
  # the most common (and default) type is String.
5
- #
5
+ #
6
6
  # In addition to defining the machine's value, a state can also define a
7
7
  # behavioral context for an object when that object is in the state. See
8
8
  # StateMachines::Machine#state for more information about how state-driven
@@ -10,7 +10,7 @@ module StateMachines
10
10
  class State
11
11
 
12
12
  # The state machine for which this state is defined
13
- attr_accessor :machine
13
+ attr_reader :machine
14
14
 
15
15
  # The unique identifier for the state used in event and callback definitions
16
16
  attr_reader :name
@@ -38,7 +38,7 @@ module StateMachines
38
38
  attr_accessor :matcher
39
39
 
40
40
  # Creates a new state within the context of the given machine.
41
- #
41
+ #
42
42
  # Configuration options:
43
43
  # * <tt>:initial</tt> - Whether this state is the beginning state for the
44
44
  # machine. Default is false.
@@ -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
@@ -86,6 +86,11 @@ module StateMachines
86
86
  @context = StateContext.new(self)
87
87
  end
88
88
 
89
+ def machine=(machine)
90
+ @machine = machine
91
+ @context = StateContext.new(self)
92
+ end
93
+
89
94
  # Determines whether there are any states that can be transitioned to from
90
95
  # this state. If there are none, then this state is considered *final*.
91
96
  # Any objects in a final state will remain so forever given the current
@@ -94,7 +99,7 @@ module StateMachines
94
99
  !machine.events.any? do |event|
95
100
  event.branches.any? do |branch|
96
101
  branch.state_requirements.any? do |requirement|
97
- requirement[:from].matches?(name) && !requirement[:to].matches?(name, :from => name)
102
+ requirement[:from].matches?(name) && !requirement[:to].matches?(name, from: name)
98
103
  end
99
104
  end
100
105
  end
@@ -107,15 +112,15 @@ module StateMachines
107
112
  end
108
113
 
109
114
  # Generates a human-readable description of this state's name / value:
110
- #
115
+ #
111
116
  # For example,
112
- #
117
+ #
113
118
  # State.new(machine, :parked).description # => "parked"
114
119
  # State.new(machine, :parked, :value => :parked).description # => "parked"
115
120
  # State.new(machine, :parked, :value => nil).description # => "parked (nil)"
116
121
  # State.new(machine, :parked, :value => 1).description # => "parked (1)"
117
122
  # State.new(machine, :parked, :value => lambda {Time.now}).description # => "parked (*)
118
- #
123
+ #
119
124
  # Configuration options:
120
125
  # * <tt>:human_name</tt> - Whether to use this state's human name in the
121
126
  # description or just the internal name
@@ -129,9 +134,9 @@ module StateMachines
129
134
  # The value that represents this state. This will optionally evaluate the
130
135
  # original block if it's a lambda block. Otherwise, the static value is
131
136
  # returned.
132
- #
137
+ #
133
138
  # For example,
134
- #
139
+ #
135
140
  # State.new(machine, :parked, :value => 1).value # => 1
136
141
  # State.new(machine, :parked, :value => lambda {Time.now}).value # => Tue Jan 01 00:00:00 UTC 2008
137
142
  # State.new(machine, :parked, :value => lambda {Time.now}).value(false) # => <Proc:0xb6ea7ca0@...>
@@ -152,14 +157,14 @@ module StateMachines
152
157
  # Determines whether this state matches the given value. If no matcher is
153
158
  # configured, then this will check whether the values are equivalent.
154
159
  # Otherwise, the matcher will determine the result.
155
- #
160
+ #
156
161
  # For example,
157
- #
162
+ #
158
163
  # # Without a matcher
159
164
  # state = State.new(machine, :parked, :value => 1)
160
165
  # state.matches?(1) # => true
161
166
  # state.matches?(2) # => false
162
- #
167
+ #
163
168
  # # With a matcher
164
169
  # state = State.new(machine, :parked, :value => lambda {Time.now}, :if => lambda {|value| !value.nil?})
165
170
  # state.matches?(nil) # => false
@@ -170,7 +175,7 @@ module StateMachines
170
175
 
171
176
  # Defines a context for the state which will be enabled on instances of
172
177
  # the owner class when the machine is in this state.
173
- #
178
+ #
174
179
  # This can be called multiple times. Each time a new context is created,
175
180
  # a new module will be included in the owner class.
176
181
  def context(&block)
@@ -184,7 +189,7 @@ module StateMachines
184
189
  new_methods = context_methods.to_a.select { |(name, method)| old_methods[name] != method }
185
190
 
186
191
  # Alias new methods so that the only execute when the object is in this state
187
- new_methods.each do |(method_name, method)|
192
+ new_methods.each do |(method_name, _method)|
188
193
  context_name = context_name_for(method_name)
189
194
  context.class_eval <<-end_eval, __FILE__, __LINE__ + 1
190
195
  alias_method :"#{context_name}", :#{method_name}
@@ -208,12 +213,12 @@ module StateMachines
208
213
 
209
214
  # Calls a method defined in this state's context on the given object. All
210
215
  # arguments and any block will be passed into the method defined.
211
- #
216
+ #
212
217
  # If the method has never been defined for this state, then a NoMethodError
213
218
  # will be raised.
214
219
  def call(object, method, *args, &block)
215
220
  options = args.last.is_a?(Hash) ? args.pop : {}
216
- options = {:method_name => method}.merge(options)
221
+ options = {method_name: method}.merge(options)
217
222
  state = machine.states.match!(object)
218
223
 
219
224
  if state == self && object.respond_to?(method)
@@ -239,9 +244,9 @@ module StateMachines
239
244
  end
240
245
 
241
246
  # Generates a nicely formatted description of this state's contents.
242
- #
247
+ #
243
248
  # For example,
244
- #
249
+ #
245
250
  # state = StateMachines::State.new(machine, :parked, :value => 1, :initial => true)
246
251
  # state # => #<StateMachines::State name=:parked value=1 initial=true context=[]>
247
252
  def inspect
@@ -249,7 +254,8 @@ module StateMachines
249
254
  "#<#{self.class} #{attributes.map { |attr, value| "#{attr}=#{value.inspect}" } * ' '}>"
250
255
  end
251
256
 
252
- private
257
+ private
258
+
253
259
  # Should the value be cached after it's evaluated for the first time?
254
260
  def cache_value?
255
261
  @cache
@@ -2,25 +2,25 @@ module StateMachines
2
2
  # Represents a collection of states in a state machine
3
3
  class StateCollection < NodeCollection
4
4
  def initialize(machine) #:nodoc:
5
- super(machine, :index => [:name, :qualified_name, :value])
5
+ super(machine, index: [:name, :qualified_name, :value])
6
6
  end
7
7
 
8
8
  # Determines whether the given object is in a specific state. If the
9
9
  # object's current value doesn't match the state, then this will return
10
10
  # false, otherwise true. If the given state is unknown, then an IndexError
11
11
  # will be raised.
12
- #
12
+ #
13
13
  # == Examples
14
- #
14
+ #
15
15
  # class Vehicle
16
16
  # state_machine :initial => :parked do
17
17
  # other_states :idling
18
18
  # end
19
19
  # end
20
- #
20
+ #
21
21
  # states = Vehicle.state_machine.states
22
22
  # vehicle = Vehicle.new # => #<Vehicle:0xb7c464b0 @state="parked">
23
- #
23
+ #
24
24
  # states.matches?(vehicle, :parked) # => true
25
25
  # states.matches?(vehicle, :idling) # => false
26
26
  # states.matches?(vehicle, :invalid) # => IndexError: :invalid is an invalid key for :name index
@@ -31,23 +31,23 @@ module StateMachines
31
31
  # Determines the current state of the given object as configured by this
32
32
  # state machine. This will attempt to find a known state that matches
33
33
  # the value of the attribute on the object.
34
- #
34
+ #
35
35
  # == Examples
36
- #
36
+ #
37
37
  # class Vehicle
38
38
  # state_machine :initial => :parked do
39
39
  # other_states :idling
40
40
  # end
41
41
  # end
42
- #
42
+ #
43
43
  # states = Vehicle.state_machine.states
44
- #
44
+ #
45
45
  # vehicle = Vehicle.new # => #<Vehicle:0xb7c464b0 @state="parked">
46
46
  # states.match(vehicle) # => #<StateMachines::State name=:parked value="parked" initial=true>
47
- #
47
+ #
48
48
  # vehicle.state = 'idling'
49
49
  # states.match(vehicle) # => #<StateMachines::State name=:idling value="idling" initial=true>
50
- #
50
+ #
51
51
  # vehicle.state = 'invalid'
52
52
  # states.match(vehicle) # => nil
53
53
  def match(object)
@@ -58,20 +58,20 @@ module StateMachines
58
58
  # Determines the current state of the given object as configured by this
59
59
  # state machine. If no state is found, then an ArgumentError will be
60
60
  # raised.
61
- #
61
+ #
62
62
  # == Examples
63
- #
63
+ #
64
64
  # class Vehicle
65
65
  # state_machine :initial => :parked do
66
66
  # other_states :idling
67
67
  # end
68
68
  # end
69
- #
69
+ #
70
70
  # states = Vehicle.state_machine.states
71
- #
71
+ #
72
72
  # vehicle = Vehicle.new # => #<Vehicle:0xb7c464b0 @state="parked">
73
73
  # states.match!(vehicle) # => #<StateMachines::State name=:parked value="parked" initial=true>
74
- #
74
+ #
75
75
  # vehicle.state = 'invalid'
76
76
  # states.match!(vehicle) # => ArgumentError: "invalid" is not a known state value
77
77
  def match!(object)
@@ -80,20 +80,20 @@ module StateMachines
80
80
 
81
81
  # Gets the order in which states should be displayed based on where they
82
82
  # were first referenced. This will order states in the following priority:
83
- #
83
+ #
84
84
  # 1. Initial state
85
85
  # 2. Event transitions (:from, :except_from, :to, :except_to options)
86
86
  # 3. States with behaviors
87
87
  # 4. States referenced via +state+ or +other_states+
88
88
  # 5. States referenced in callbacks
89
- #
89
+ #
90
90
  # This order will determine how the GraphViz visualizations are rendered.
91
91
  def by_priority
92
92
  order = select { |state| state.initial }.map { |state| state.name }
93
93
 
94
94
  machine.events.each { |event| order += event.known_states }
95
95
  order += select { |state| state.context_methods.any? }.map { |state| state.name }
96
- order += keys(:name) - machine.callbacks.values.flatten.map { |callback| callback.known_states }.flatten
96
+ order += keys(:name) - machine.callbacks.values.flatten.flat_map(&:known_states)
97
97
  order += keys(:name)
98
98
 
99
99
  order.uniq!
@@ -101,7 +101,8 @@ module StateMachines
101
101
  order
102
102
  end
103
103
 
104
- private
104
+ private
105
+
105
106
  # Gets the value for the given attribute on the node
106
107
  def value(node, attribute)
107
108
  attribute == :value ? node.value(false) : super
@@ -1,100 +1,98 @@
1
1
  module StateMachines
2
-
3
-
4
2
  # Represents a module which will get evaluated within the context of a state.
5
- #
3
+ #
6
4
  # Class-level methods are proxied to the owner class, injecting a custom
7
5
  # <tt>:if</tt> condition along with method. This assumes that the method has
8
6
  # support for a set of configuration options, including <tt>:if</tt>. This
9
7
  # condition will check that the object's state matches this context's state.
10
- #
8
+ #
11
9
  # Instance-level methods are used to define state-driven behavior on the
12
10
  # state's owner class.
13
- #
11
+ #
14
12
  # == Examples
15
- #
13
+ #
16
14
  # class Vehicle
17
15
  # class << self
18
16
  # attr_accessor :validations
19
- #
17
+ #
20
18
  # def validate(options, &block)
21
19
  # validations << options
22
20
  # end
23
21
  # end
24
- #
22
+ #
25
23
  # self.validations = []
26
24
  # attr_accessor :state, :simulate
27
- #
25
+ #
28
26
  # def moving?
29
27
  # self.class.validations.all? {|validation| validation[:if].call(self)}
30
28
  # end
31
29
  # end
32
- #
30
+ #
33
31
  # In the above class, a simple set of validation behaviors have been defined.
34
32
  # Each validation consists of a configuration like so:
35
- #
33
+ #
36
34
  # Vehicle.validate :unless => :simulate
37
35
  # Vehicle.validate :if => lambda {|vehicle| ...}
38
- #
36
+ #
39
37
  # In order to scope validations to a particular state context, the class-level
40
38
  # +validate+ method can be invoked like so:
41
- #
39
+ #
42
40
  # machine = StateMachines::Machine.new(Vehicle)
43
41
  # context = StateMachines::StateContext.new(machine.state(:first_gear))
44
42
  # context.validate(:unless => :simulate)
45
- #
43
+ #
46
44
  # vehicle = Vehicle.new # => #<Vehicle:0xb7ce491c @simulate=nil, @state=nil>
47
45
  # vehicle.moving? # => false
48
- #
46
+ #
49
47
  # vehicle.state = 'first_gear'
50
48
  # vehicle.moving? # => true
51
- #
49
+ #
52
50
  # vehicle.simulate = true
53
51
  # vehicle.moving? # => false
54
52
  class StateContext < Module
55
53
 
56
54
  include EvalHelpers
57
-
55
+
58
56
  # The state machine for which this context's state is defined
59
57
  attr_reader :machine
60
-
58
+
61
59
  # The state that must be present in an object for this context to be active
62
60
  attr_reader :state
63
-
61
+
64
62
  # Creates a new context for the given state
65
63
  def initialize(state)
66
64
  @state = state
67
65
  @machine = state.machine
68
-
66
+
69
67
  state_name = state.name
70
68
  machine_name = machine.name
71
- @condition = lambda {|object| object.class.state_machine(machine_name).states.matches?(object, state_name)}
69
+ @condition = lambda { |object| object.class.state_machine(machine_name).states.matches?(object, state_name) }
72
70
  end
73
-
71
+
74
72
  # Creates a new transition that determines what to change the current state
75
73
  # to when an event fires from this state.
76
- #
74
+ #
77
75
  # Since this transition is being defined within a state context, you do
78
76
  # *not* need to specify the <tt>:from</tt> option for the transition. For
79
77
  # example:
80
- #
78
+ #
81
79
  # state_machine do
82
80
  # state :parked do
83
81
  # transition :to => :idling, :on => [:ignite, :shift_up] # Transitions to :idling
84
82
  # transition :from => [:idling, :parked], :on => :park, :unless => :seatbelt_on? # Transitions to :parked if seatbelt is off
85
83
  # end
86
84
  # end
87
- #
85
+ #
88
86
  # See StateMachines::Machine#transition for a description of the possible
89
87
  # configurations for defining transitions.
90
88
  def transition(options)
91
89
  options.assert_valid_keys(:from, :to, :on, :if, :unless)
92
90
  raise ArgumentError, 'Must specify :on event' unless options[:on]
93
91
  raise ArgumentError, 'Must specify either :to or :from state' unless !options[:to] ^ !options[:from]
94
-
95
- machine.transition(options.merge(options[:to] ? {:from => state.name} : {:to => state.name}))
92
+
93
+ machine.transition(options.merge(options[:to] ? {from: state.name} : {to: state.name}))
96
94
  end
97
-
95
+
98
96
  # Hooks in condition-merging to methods that don't exist in this module
99
97
  def method_missing(*args, &block)
100
98
  # Get the configuration
@@ -103,28 +101,28 @@ module StateMachines
103
101
  else
104
102
  args << options = {}
105
103
  end
106
-
104
+
107
105
  # Get any existing condition that may need to be merged
108
106
  if_condition = options.delete(:if)
109
107
  unless_condition = options.delete(:unless)
110
-
108
+
111
109
  # Provide scope access to configuration in case the block is evaluated
112
110
  # within the object instance
113
111
  proxy = self
114
112
  proxy_condition = @condition
115
-
113
+
116
114
  # Replace the configuration condition with the one configured for this
117
115
  # proxy, merging together any existing conditions
118
116
  options[:if] = lambda do |*condition_args|
119
117
  # Block may be executed within the context of the actual object, so
120
118
  # it'll either be the first argument or the executing context
121
119
  object = condition_args.first || self
122
-
120
+
123
121
  proxy.evaluate_method(object, proxy_condition) &&
124
- Array(if_condition).all? {|condition| proxy.evaluate_method(object, condition)} &&
125
- !Array(unless_condition).any? {|condition| proxy.evaluate_method(object, condition)}
122
+ Array(if_condition).all? { |condition| proxy.evaluate_method(object, condition) } &&
123
+ !Array(unless_condition).any? { |condition| proxy.evaluate_method(object, condition) }
126
124
  end
127
-
125
+
128
126
  # Evaluate the method on the owner class with the condition proxied
129
127
  # through
130
128
  machine.owner_class.send(*args, &block)