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
@@ -3,13 +3,13 @@ module StateMachines
3
3
  class MachineCollection < Hash
4
4
  # Initializes the state of each machine in the given object. This can allow
5
5
  # states to be initialized in two groups: static and dynamic. For example:
6
- #
6
+ #
7
7
  # machines.initialize_states(object) do
8
8
  # # After static state initialization, before dynamic state initialization
9
9
  # end
10
- #
10
+ #
11
11
  # If no block is provided, then all states will still be initialized.
12
- #
12
+ #
13
13
  # Valid configuration options:
14
14
  # * <tt>:static</tt> - Whether to initialize static states. Unless set to
15
15
  # false, the state will be initialized regardless of its current value.
@@ -21,19 +21,19 @@ module StateMachines
21
21
  # writing to the object. Default is to write directly to the object.
22
22
  def initialize_states(object, options = {}, attributes = {})
23
23
  options.assert_valid_keys( :static, :dynamic, :to)
24
- options = {:static => true, :dynamic => true}.merge(options)
24
+ options = {static: true, dynamic: true}.merge(options)
25
25
 
26
26
  result = yield if block_given?
27
27
 
28
28
  each_value do |machine|
29
29
  unless machine.dynamic_initial_state?
30
30
  force = options[:static] == :force || !attributes.keys.map(&:to_sym).include?(machine.attribute)
31
- machine.initialize_state(object, force: force, :to => options[:to])
31
+ machine.initialize_state(object, force: force, to: options[:to])
32
32
  end
33
33
  end if options[:static]
34
34
 
35
35
  each_value do |machine|
36
- machine.initialize_state(object, :force => options[:dynamic] == :force, :to => options[:to]) if machine.dynamic_initial_state?
36
+ machine.initialize_state(object, force: options[:dynamic] == :force, to: options[:to]) if machine.dynamic_initial_state?
37
37
  end if options[:dynamic]
38
38
 
39
39
  result
@@ -48,12 +48,12 @@ module StateMachines
48
48
  transitions = events.collect do |event_name|
49
49
  # Find the actual event being run
50
50
  event = nil
51
- detect {|name, machine| event = machine.events[event_name, :qualified_name]}
51
+ detect { |name, machine| event = machine.events[event_name, :qualified_name] }
52
52
 
53
53
  raise(InvalidEvent.new(object, event_name)) unless event
54
54
 
55
55
  # Get the transition that will be performed for the event
56
- unless transition = event.transition_for(object)
56
+ unless (transition = event.transition_for(object))
57
57
  event.on_failure(object)
58
58
  end
59
59
  transition
@@ -71,7 +71,7 @@ module StateMachines
71
71
  # Builds the collection of transitions for all event attributes defined on
72
72
  # the given object. This will only include events whose machine actions
73
73
  # match the one specified.
74
- #
74
+ #
75
75
  # These should only be fired as a result of the action being run.
76
76
  def transitions(object, action, options = {})
77
77
  transitions = map do |name, machine|
@@ -81,13 +81,14 @@ module StateMachines
81
81
  AttributeTransitionCollection.new(transitions.compact, {use_transactions: resolve_use_transactions}.merge(options))
82
82
  end
83
83
 
84
- protected
84
+ protected
85
85
 
86
86
  def resolve_use_transactions
87
87
  use_transactions = nil
88
88
  each_value do |machine|
89
89
  # Determine use_transactions setting for this set of transitions. If from multiple state_machines, the settings must match.
90
90
  raise 'Encountered mismatched use_transactions configurations for multiple state_machines' if !use_transactions.nil? && use_transactions != machine.use_transactions
91
+
91
92
  use_transactions = machine.use_transactions
92
93
  end
93
94
  use_transactions
@@ -5,7 +5,7 @@ module StateMachines
5
5
  module MacroMethods
6
6
  # Creates a new state machine with the given name. The default name, if not
7
7
  # specified, is <tt>:state</tt>.
8
- #
8
+ #
9
9
  # Configuration options:
10
10
  # * <tt>:attribute</tt> - The name of the attribute to store the state value
11
11
  # in. By default, this is the same as the name of the machine.
@@ -26,7 +26,7 @@ module StateMachines
26
26
  # library-specific behavior to the machine. Built-in integrations
27
27
  # include :active_model, :active_record, :data_mapper, :mongo_mapper, and
28
28
  # :sequel. By default, this is determined automatically.
29
- #
29
+ #
30
30
  # Configuration options relevant to ORM integrations:
31
31
  # * <tt>:plural</tt> - The pluralized version of the name. By default, this
32
32
  # will attempt to call +pluralize+ on the name. If this method is not
@@ -39,20 +39,20 @@ module StateMachines
39
39
  # * <tt>:use_transactions</tt> - Whether transactions should be used when
40
40
  # firing events. Default is true unless otherwise specified by the
41
41
  # configured integration.
42
- #
42
+ #
43
43
  # This also expects a block which will be used to actually configure the
44
44
  # states, events and transitions for the state machine. *Note* that this
45
45
  # block will be executed within the context of the state machine. As a
46
46
  # result, you will not be able to access any class methods unless you refer
47
47
  # to them directly (i.e. specifying the class name).
48
- #
48
+ #
49
49
  # For examples on the types of state machine configurations and blocks, see
50
50
  # the section below.
51
- #
51
+ #
52
52
  # == Examples
53
- #
53
+ #
54
54
  # With the default name/attribute and no configuration:
55
- #
55
+ #
56
56
  # class Vehicle
57
57
  # state_machine do
58
58
  # event :park do
@@ -60,37 +60,37 @@ module StateMachines
60
60
  # end
61
61
  # end
62
62
  # end
63
- #
63
+ #
64
64
  # The above example will define a state machine named "state" that will
65
65
  # store the value in the +state+ attribute. Every vehicle will start
66
66
  # without an initial state.
67
- #
67
+ #
68
68
  # With a custom name / attribute:
69
- #
69
+ #
70
70
  # class Vehicle
71
71
  # state_machine :status, :attribute => :status_value do
72
72
  # ...
73
73
  # end
74
74
  # end
75
- #
75
+ #
76
76
  # With a static initial state:
77
- #
77
+ #
78
78
  # class Vehicle
79
79
  # state_machine :status, :initial => :parked do
80
80
  # ...
81
81
  # end
82
82
  # end
83
- #
83
+ #
84
84
  # With a dynamic initial state:
85
- #
85
+ #
86
86
  # class Vehicle
87
87
  # state_machine :status, :initial => lambda {|vehicle| vehicle.speed == 0 ? :parked : :idling} do
88
88
  # ...
89
89
  # end
90
90
  # end
91
- #
91
+ #
92
92
  # == Class Methods
93
- #
93
+ #
94
94
  # The following class methods will be automatically generated by the
95
95
  # state machine based on the *name* of the machine. Any existing methods
96
96
  # will not be overwritten.
@@ -100,28 +100,28 @@ module StateMachines
100
100
  # * <tt>human_state_event_name(event)</tt> - Gets the humanized value for
101
101
  # the given event. This may be generated by internationalization
102
102
  # libraries if supported by the integration.
103
- #
103
+ #
104
104
  # For example,
105
- #
105
+ #
106
106
  # class Vehicle
107
107
  # state_machine :state, :initial => :parked do
108
108
  # event :ignite do
109
109
  # transition :parked => :idling
110
110
  # end
111
- #
111
+ #
112
112
  # event :shift_up do
113
113
  # transition :idling => :first_gear
114
114
  # end
115
115
  # end
116
116
  # end
117
- #
117
+ #
118
118
  # Vehicle.human_state_name(:parked) # => "parked"
119
119
  # Vehicle.human_state_name(:first_gear) # => "first gear"
120
120
  # Vehicle.human_state_event_name(:park) # => "park"
121
121
  # Vehicle.human_state_event_name(:shift_up) # => "shift up"
122
- #
122
+ #
123
123
  # == Instance Methods
124
- #
124
+ #
125
125
  # The following instance methods will be automatically generated by the
126
126
  # state machine based on the *name* of the machine. Any existing methods
127
127
  # will not be overwritten.
@@ -142,7 +142,7 @@ module StateMachines
142
142
  # * <tt>fire_state_event(name, *args)</tt> - Fires an arbitrary event with
143
143
  # the given argument list. This is essentially the same as calling the
144
144
  # actual event method itself.
145
- #
145
+ #
146
146
  # The <tt>state_events</tt>, <tt>state_transitions</tt>, and <tt>state_paths</tt>
147
147
  # helpers all take an optional set of requirements for determining what's
148
148
  # available for the current object. These requirements include:
@@ -154,146 +154,146 @@ module StateMachines
154
154
  # specified, then this will match any event.
155
155
  # * <tt>:guard</tt> - Whether to guard transitions with the if/unless
156
156
  # conditionals defined for each one. Default is true.
157
- #
157
+ #
158
158
  # For example,
159
- #
159
+ #
160
160
  # class Vehicle
161
161
  # state_machine :state, :initial => :parked do
162
162
  # event :ignite do
163
163
  # transition :parked => :idling
164
164
  # end
165
- #
165
+ #
166
166
  # event :park do
167
167
  # transition :idling => :parked
168
168
  # end
169
169
  # end
170
170
  # end
171
- #
171
+ #
172
172
  # vehicle = Vehicle.new
173
173
  # vehicle.state # => "parked"
174
174
  # vehicle.state_name # => :parked
175
175
  # vehicle.human_state_name # => "parked"
176
176
  # vehicle.state?(:parked) # => true
177
- #
177
+ #
178
178
  # # Changing state
179
179
  # vehicle.state = 'idling'
180
180
  # vehicle.state # => "idling"
181
181
  # vehicle.state_name # => :idling
182
182
  # vehicle.state?(:parked) # => false
183
- #
183
+ #
184
184
  # # Getting current event / transition availability
185
185
  # vehicle.state_events # => [:park]
186
186
  # vehicle.park # => true
187
187
  # vehicle.state_events # => [:ignite]
188
188
  # vehicle.state_events(:from => :idling) # => [:park]
189
189
  # vehicle.state_events(:to => :parked) # => []
190
- #
190
+ #
191
191
  # vehicle.state_transitions # => [#<StateMachines::Transition attribute=:state event=:ignite from="parked" from_name=:parked to="idling" to_name=:idling>]
192
192
  # vehicle.ignite # => true
193
193
  # vehicle.state_transitions # => [#<StateMachines::Transition attribute=:state event=:park from="idling" from_name=:idling to="parked" to_name=:parked>]
194
- #
194
+ #
195
195
  # vehicle.state_transitions(:on => :ignite) # => []
196
- #
196
+ #
197
197
  # # Getting current path availability
198
198
  # vehicle.state_paths # => [
199
199
  # # [#<StateMachines::Transition attribute=:state event=:park from="idling" from_name=:idling to="parked" to_name=:parked>,
200
200
  # # #<StateMachines::Transition attribute=:state event=:ignite from="parked" from_name=:parked to="idling" to_name=:idling>]
201
201
  # # ]
202
- # vehicle.state_paths(:guard => false) # =>
202
+ # vehicle.state_paths(:guard => false) # =>
203
203
  # # [#<StateMachines::Transition attribute=:state event=:park from="idling" from_name=:idling to="parked" to_name=:parked>,
204
204
  # # #<StateMachines::Transition attribute=:state event=:ignite from="parked" from_name=:parked to="idling" to_name=:idling>]
205
205
  # # ]
206
- #
206
+ #
207
207
  # # Fire arbitrary events
208
208
  # vehicle.fire_state_event(:park) # => true
209
- #
209
+ #
210
210
  # == Attribute initialization
211
- #
211
+ #
212
212
  # For most classes, the initial values for state machine attributes are
213
213
  # automatically assigned when a new object is created. However, this
214
214
  # behavior will *not* work if the class defines an +initialize+ method
215
215
  # without properly calling +super+.
216
- #
216
+ #
217
217
  # For example,
218
- #
218
+ #
219
219
  # class Vehicle
220
220
  # state_machine :state, :initial => :parked do
221
221
  # ...
222
222
  # end
223
223
  # end
224
- #
224
+ #
225
225
  # vehicle = Vehicle.new # => #<Vehicle:0xb7c8dbf8 @state="parked">
226
226
  # vehicle.state # => "parked"
227
- #
227
+ #
228
228
  # In the above example, no +initialize+ method is defined. As a result,
229
229
  # the default behavior of initializing the state machine attributes is used.
230
- #
230
+ #
231
231
  # In the following example, a custom +initialize+ method is defined:
232
- #
232
+ #
233
233
  # class Vehicle
234
234
  # state_machine :state, :initial => :parked do
235
235
  # ...
236
236
  # end
237
- #
237
+ #
238
238
  # def initialize
239
239
  # end
240
240
  # end
241
- #
241
+ #
242
242
  # vehicle = Vehicle.new # => #<Vehicle:0xb7c77678>
243
243
  # vehicle.state # => nil
244
- #
244
+ #
245
245
  # Since the +initialize+ method is defined, the state machine attributes
246
246
  # never get initialized. In order to ensure that all initialization hooks
247
247
  # are called, the custom method *must* call +super+ without any arguments
248
248
  # like so:
249
- #
249
+ #
250
250
  # class Vehicle
251
251
  # state_machine :state, :initial => :parked do
252
252
  # ...
253
253
  # end
254
- #
254
+ #
255
255
  # def initialize(attributes = {})
256
256
  # ...
257
257
  # super()
258
258
  # end
259
259
  # end
260
- #
260
+ #
261
261
  # vehicle = Vehicle.new # => #<Vehicle:0xb7c8dbf8 @state="parked">
262
262
  # vehicle.state # => "parked"
263
- #
263
+ #
264
264
  # Because of the way the inclusion of modules works in Ruby, calling
265
265
  # <tt>super()</tt> will not only call the superclass's +initialize+, but
266
266
  # also +initialize+ on all included modules. This allows the original state
267
267
  # machine hook to get called properly.
268
- #
268
+ #
269
269
  # If you want to avoid calling the superclass's constructor, but still want
270
270
  # to initialize the state machine attributes:
271
- #
271
+ #
272
272
  # class Vehicle
273
273
  # state_machine :state, :initial => :parked do
274
274
  # ...
275
275
  # end
276
- #
276
+ #
277
277
  # def initialize(attributes = {})
278
278
  # ...
279
279
  # initialize_state_machines
280
280
  # end
281
281
  # end
282
- #
282
+ #
283
283
  # vehicle = Vehicle.new # => #<Vehicle:0xb7c8dbf8 @state="parked">
284
284
  # vehicle.state # => "parked"
285
- #
285
+ #
286
286
  # You may also need to call the +initialize_state_machines+ helper manually
287
287
  # in cases where you want to change how static / dynamic initial states get
288
288
  # set. For example, the following example forces the initialization of
289
289
  # static states regardless of their current value:
290
- #
290
+ #
291
291
  # class Vehicle
292
292
  # state_machine :state, :initial => :parked do
293
293
  # state nil, :idling
294
294
  # ...
295
295
  # end
296
- #
296
+ #
297
297
  # def initialize(attributes = {})
298
298
  # @state = 'idling'
299
299
  # initialize_state_machines(:static => :force) do
@@ -301,28 +301,28 @@ module StateMachines
301
301
  # end
302
302
  # end
303
303
  # end
304
- #
304
+ #
305
305
  # vehicle = Vehicle.new # => #<Vehicle:0xb7c8dbf8 @state="parked">
306
306
  # vehicle.state # => "parked"
307
- #
307
+ #
308
308
  # The above example is also noteworthy because it demonstrates how to avoid
309
309
  # initialization issues when +nil+ is a valid state. Without passing in
310
310
  # <tt>:static => :force</tt>, state_machine would never have initialized
311
311
  # the state because +nil+ (the default attribute value) would have been
312
312
  # interpreted as a valid current state. As a result, state_machine would
313
313
  # have simply skipped initialization.
314
- #
314
+ #
315
315
  # == States
316
- #
316
+ #
317
317
  # All of the valid states for the machine are automatically tracked based
318
318
  # on the events, transitions, and callbacks defined for the machine. If
319
319
  # there are additional states that are never referenced, these should be
320
320
  # explicitly added using the StateMachines::Machine#state or
321
321
  # StateMachines::Machine#other_states helpers.
322
- #
322
+ #
323
323
  # When a new state is defined, a predicate method for that state is
324
324
  # generated on the class. For example,
325
- #
325
+ #
326
326
  # class Vehicle
327
327
  # state_machine :initial => :parked do
328
328
  # event :ignite do
@@ -330,37 +330,37 @@ module StateMachines
330
330
  # end
331
331
  # end
332
332
  # end
333
- #
333
+ #
334
334
  # ...will generate the following instance methods (assuming they're not
335
335
  # already defined in the class):
336
336
  # * <tt>parked?</tt>
337
337
  # * <tt>idling?</tt>
338
- #
338
+ #
339
339
  # Each predicate method will return true if it matches the object's
340
340
  # current state. Otherwise, it will return false.
341
- #
341
+ #
342
342
  # == Attribute access
343
- #
343
+ #
344
344
  # The actual value for a state is stored in the attribute configured for the
345
345
  # state machine. In most cases, this is the same as the name of the state
346
346
  # machine. For example:
347
- #
347
+ #
348
348
  # class Vehicle
349
349
  # attr_accessor :state
350
- #
350
+ #
351
351
  # state_machine :state, :initial => :parked do
352
352
  # ...
353
353
  # state :parked, :value => 0
354
354
  # start :idling, :value => 1
355
355
  # end
356
356
  # end
357
- #
357
+ #
358
358
  # vehicle = Vehicle.new # => #<Vehicle:0xb712da60 @state=0>
359
359
  # vehicle.state # => 0
360
360
  # vehicle.parked? # => true
361
361
  # vehicle.state = 1
362
362
  # vehicle.idling? # => true
363
- #
363
+ #
364
364
  # The most important thing to note from the example above is what it means
365
365
  # to read from and write to the state machine's attribute. In particular,
366
366
  # state_machine treats the attribute (+state+ in this case) like a basic
@@ -378,97 +378,97 @@ module StateMachines
378
378
  # different ways an attribute can get written, state_machine just makes
379
379
  # sure that the configured value for a state is always used when writing
380
380
  # to the attribute.
381
- #
381
+ #
382
382
  # If you were interested in accessing the name of a state (instead of its
383
383
  # actual value through the attribute), you could do the following:
384
- #
384
+ #
385
385
  # vehicle.state_name # => :idling
386
- #
386
+ #
387
387
  # == Events and Transitions
388
- #
388
+ #
389
389
  # Events defined on the machine are the interface to transitioning states
390
390
  # for an object. Events can be fired either directly (through the method
391
391
  # generated for the event) or indirectly (through attributes defined on
392
392
  # the machine).
393
- #
393
+ #
394
394
  # For example,
395
- #
395
+ #
396
396
  # class Vehicle
397
397
  # include DataMapper::Resource
398
398
  # property :id, Serial
399
- #
399
+ #
400
400
  # state_machine :initial => :parked do
401
401
  # event :ignite do
402
402
  # transition :parked => :idling
403
403
  # end
404
404
  # end
405
- #
405
+ #
406
406
  # state_machine :alarm_state, :initial => :active do
407
407
  # event :disable do
408
408
  # transition all => :off
409
409
  # end
410
410
  # end
411
411
  # end
412
- #
412
+ #
413
413
  # # Fire +ignite+ event directly
414
414
  # vehicle = Vehicle.create # => #<Vehicle id=1 state="parked" alarm_state="active">
415
415
  # vehicle.ignite # => true
416
416
  # vehicle.state # => "idling"
417
417
  # vehicle.alarm_state # => "active"
418
- #
418
+ #
419
419
  # # Fire +disable+ event automatically
420
420
  # vehicle.alarm_state_event = 'disable'
421
421
  # vehicle.save # => true
422
422
  # vehicle.alarm_state # => "off"
423
- #
423
+ #
424
424
  # In the above example, the +state+ attribute is transitioned using the
425
425
  # +ignite+ action that's generated from the state machine. On the other
426
426
  # hand, the +alarm_state+ attribute is transitioned using the +alarm_state_event+
427
427
  # attribute that automatically gets fired when the machine's action (+save+)
428
428
  # is invoked.
429
- #
429
+ #
430
430
  # For more information about how to configure an event and its associated
431
431
  # transitions, see StateMachines::Machine#event.
432
- #
432
+ #
433
433
  # == Defining callbacks
434
- #
434
+ #
435
435
  # Within the +state_machine+ block, you can also define callbacks for
436
436
  # transitions. For more information about defining these callbacks,
437
437
  # see StateMachines::Machine#before_transition, StateMachines::Machine#after_transition,
438
438
  # and StateMachines::Machine#around_transition, and StateMachines::Machine#after_failure.
439
- #
439
+ #
440
440
  # == Namespaces
441
- #
441
+ #
442
442
  # When a namespace is configured for a state machine, the name provided
443
443
  # will be used in generating the instance methods for interacting with
444
444
  # states/events in the machine. This is particularly useful when a class
445
445
  # has multiple state machines and it would be difficult to differentiate
446
446
  # between the various states / events.
447
- #
447
+ #
448
448
  # For example,
449
- #
449
+ #
450
450
  # class Vehicle
451
451
  # state_machine :heater_state, :initial => :off, :namespace => 'heater' do
452
452
  # event :turn_on do
453
453
  # transition all => :on
454
454
  # end
455
- #
455
+ #
456
456
  # event :turn_off do
457
457
  # transition all => :off
458
458
  # end
459
459
  # end
460
- #
460
+ #
461
461
  # state_machine :alarm_state, :initial => :active, :namespace => 'alarm' do
462
462
  # event :turn_on do
463
463
  # transition all => :active
464
464
  # end
465
- #
465
+ #
466
466
  # event :turn_off do
467
467
  # transition all => :off
468
468
  # end
469
469
  # end
470
470
  # end
471
- #
471
+ #
472
472
  # The above class defines two state machines: +heater_state+ and +alarm_state+.
473
473
  # For the +heater_state+ machine, the following methods are generated since
474
474
  # it's namespaced by "heater":
@@ -480,7 +480,7 @@ module StateMachines
480
480
  # * ..
481
481
  # * <tt>heater_off?</tt>
482
482
  # * <tt>heater_on?</tt>
483
- #
483
+ #
484
484
  # As shown, each method is unique to the state machine so that the states
485
485
  # and events don't conflict. The same goes for the +alarm_state+ machine:
486
486
  # * <tt>can_turn_on_alarm?</tt>
@@ -491,25 +491,25 @@ module StateMachines
491
491
  # * ..
492
492
  # * <tt>alarm_active?</tt>
493
493
  # * <tt>alarm_off?</tt>
494
- #
494
+ #
495
495
  # == Scopes
496
- #
496
+ #
497
497
  # For integrations that support it, a group of default scope filters will
498
498
  # be automatically created for assisting in finding objects that have the
499
499
  # attribute set to one of a given set of states.
500
- #
500
+ #
501
501
  # For example,
502
- #
502
+ #
503
503
  # Vehicle.with_state(:parked) # => All vehicles where the state is parked
504
504
  # Vehicle.with_states(:parked, :idling) # => All vehicles where the state is either parked or idling
505
- #
505
+ #
506
506
  # Vehicle.without_state(:parked) # => All vehicles where the state is *not* parked
507
507
  # Vehicle.without_states(:parked, :idling) # => All vehicles where the state is *not* parked or idling
508
- #
508
+ #
509
509
  # *Note* that if class methods already exist with those names (i.e.
510
510
  # :with_state, :with_states, :without_state, or :without_states), then a
511
511
  # scope will not be defined for that name.
512
- #
512
+ #
513
513
  # See StateMachines::Machine for more information about using integrations
514
514
  # and the individual integration docs for information about the actual
515
515
  # scopes that are generated.