state_machines 0.0.2 → 0.1.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 (465) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +10 -4
  3. data/Changelog.md +0 -0
  4. data/Gemfile +6 -0
  5. data/LICENSE.txt +1 -1
  6. data/README.md +6 -8
  7. data/Rakefile +9 -6
  8. data/Testing.md +0 -0
  9. data/lib/state_machines/assertions.rb +5 -5
  10. data/lib/state_machines/error.rb +2 -1
  11. data/lib/state_machines/integrations.rb +18 -11
  12. data/lib/state_machines/machine.rb +8 -12
  13. data/lib/state_machines/version.rb +1 -1
  14. data/state_machines.gemspec +6 -8
  15. data/test/files/integrations/event_on_failure_integration.rb +10 -0
  16. data/test/files/integrations/vehicle.rb +7 -0
  17. data/{spec/internal/app → test/files}/models/auto_shop.rb +0 -0
  18. data/{spec/internal/app → test/files}/models/car.rb +2 -0
  19. data/{spec/internal/app → test/files}/models/model_base.rb +0 -0
  20. data/{spec/internal/app → test/files}/models/motorcycle.rb +2 -0
  21. data/{spec/internal/app → test/files}/models/traffic_light.rb +2 -2
  22. data/{spec/internal/app → test/files}/models/vehicle.rb +9 -5
  23. data/test/files/node.rb +5 -0
  24. data/test/files/switch.rb +15 -0
  25. data/test/functional/auto_shop_available_test.rb +20 -0
  26. data/test/functional/auto_shop_busy_test.rb +25 -0
  27. data/test/functional/car_backing_up_test.rb +45 -0
  28. data/test/functional/car_test.rb +49 -0
  29. data/test/functional/motorcycle_test.rb +46 -0
  30. data/test/functional/traffic_light_caution_test.rb +17 -0
  31. data/test/functional/traffic_light_proceed_test.rb +17 -0
  32. data/test/functional/traffic_light_stop_test.rb +26 -0
  33. data/test/functional/vehicle_first_gear_test.rb +42 -0
  34. data/test/functional/vehicle_idling_test.rb +59 -0
  35. data/test/functional/vehicle_locked_test.rb +29 -0
  36. data/test/functional/vehicle_parked_test.rb +53 -0
  37. data/test/functional/vehicle_repaired_test.rb +20 -0
  38. data/test/functional/vehicle_second_gear_test.rb +42 -0
  39. data/test/functional/vehicle_stalled_test.rb +65 -0
  40. data/test/functional/vehicle_test.rb +20 -0
  41. data/test/functional/vehicle_third_gear_test.rb +42 -0
  42. data/test/functional/vehicle_unsaved_test.rb +181 -0
  43. data/test/functional/vehicle_with_event_attributes_test.rb +30 -0
  44. data/test/functional/vehicle_with_parallel_events_test.rb +36 -0
  45. data/test/test_helper.rb +15 -0
  46. data/test/unit/assertions/assert_exclusive_keys_test.rb +22 -0
  47. data/test/unit/assertions/assert_valid_key_test.rb +12 -0
  48. data/test/unit/branch/branch_test.rb +28 -0
  49. data/test/unit/branch/branch_with_conflicting_conditionals_test.rb +27 -0
  50. data/test/unit/branch/branch_with_conflicting_from_requirements_test.rb +8 -0
  51. data/test/unit/branch/branch_with_conflicting_on_requirements_test.rb +8 -0
  52. data/test/unit/branch/branch_with_conflicting_to_requirements_test.rb +8 -0
  53. data/test/unit/branch/branch_with_different_requirements_test.rb +41 -0
  54. data/test/unit/branch/branch_with_except_from_matcher_requirement_test.rb +8 -0
  55. data/test/unit/branch/branch_with_except_from_requirement_test.rb +36 -0
  56. data/test/unit/branch/branch_with_except_on_matcher_requirement_test.rb +8 -0
  57. data/test/unit/branch/branch_with_except_on_requirement_test.rb +36 -0
  58. data/test/unit/branch/branch_with_except_to_matcher_requirement_test.rb +8 -0
  59. data/test/unit/branch/branch_with_except_to_requirement_test.rb +36 -0
  60. data/test/unit/branch/branch_with_from_matcher_requirement_test.rb +20 -0
  61. data/test/unit/branch/branch_with_from_requirement_test.rb +45 -0
  62. data/test/unit/branch/branch_with_if_conditional_test.rb +27 -0
  63. data/test/unit/branch/branch_with_implicit_and_explicit_requirements_test.rb +23 -0
  64. data/test/unit/branch/branch_with_implicit_from_requirement_matcher_test.rb +20 -0
  65. data/test/unit/branch/branch_with_implicit_requirement_test.rb +20 -0
  66. data/test/unit/branch/branch_with_implicit_to_requirement_matcher_test.rb +16 -0
  67. data/test/unit/branch/branch_with_multiple_except_from_requirements_test.rb +20 -0
  68. data/test/unit/branch/branch_with_multiple_except_on_requirements_test.rb +16 -0
  69. data/test/unit/branch/branch_with_multiple_except_to_requirements_test.rb +20 -0
  70. data/test/unit/branch/branch_with_multiple_from_requirements_test.rb +16 -0
  71. data/test/unit/branch/branch_with_multiple_if_conditionals_test.rb +20 -0
  72. data/test/unit/branch/branch_with_multiple_implicit_requirements_test.rb +53 -0
  73. data/test/unit/branch/branch_with_multiple_on_requirements_test.rb +20 -0
  74. data/test/unit/branch/branch_with_multiple_to_requirements_test.rb +20 -0
  75. data/test/unit/branch/branch_with_multiple_unless_conditionals_test.rb +20 -0
  76. data/test/unit/branch/branch_with_nil_requirements_test.rb +28 -0
  77. data/test/unit/branch/branch_with_no_requirements_test.rb +36 -0
  78. data/test/unit/branch/branch_with_on_matcher_requirement_test.rb +16 -0
  79. data/test/unit/branch/branch_with_on_requirement_test.rb +45 -0
  80. data/test/unit/branch/branch_with_to_matcher_requirement_test.rb +20 -0
  81. data/test/unit/branch/branch_with_to_requirement_test.rb +45 -0
  82. data/test/unit/branch/branch_with_unless_conditional_test.rb +27 -0
  83. data/test/unit/branch/branch_without_guards_test.rb +27 -0
  84. data/test/unit/callback/callback_by_default_test.rb +25 -0
  85. data/test/unit/callback/callback_test.rb +53 -0
  86. data/test/unit/callback/callback_with_application_bound_object_test.rb +23 -0
  87. data/test/unit/callback/callback_with_application_terminator_test.rb +24 -0
  88. data/test/unit/callback/callback_with_arguments_test.rb +14 -0
  89. data/test/unit/callback/callback_with_around_type_and_arguments_test.rb +25 -0
  90. data/test/unit/callback/callback_with_around_type_and_block_test.rb +44 -0
  91. data/test/unit/callback/callback_with_around_type_and_bound_method_test.rb +23 -0
  92. data/test/unit/callback/callback_with_around_type_and_multiple_methods_test.rb +93 -0
  93. data/test/unit/callback/callback_with_around_type_and_terminator_test.rb +17 -0
  94. data/test/unit/callback/callback_with_block_test.rb +20 -0
  95. data/test/unit/callback/callback_with_bound_method_and_arguments_test.rb +28 -0
  96. data/test/unit/callback/callback_with_bound_method_test.rb +35 -0
  97. data/test/unit/callback/callback_with_do_method_test.rb +18 -0
  98. data/test/unit/callback/callback_with_explicit_requirements_test.rb +32 -0
  99. data/test/unit/callback/callback_with_if_condition_test.rb +17 -0
  100. data/test/unit/callback/callback_with_implicit_requirements_test.rb +32 -0
  101. data/test/unit/callback/callback_with_method_argument_test.rb +18 -0
  102. data/test/unit/callback/callback_with_mixed_methods_test.rb +31 -0
  103. data/test/unit/callback/callback_with_multiple_bound_methods_test.rb +21 -0
  104. data/test/unit/callback/callback_with_multiple_do_methods_test.rb +29 -0
  105. data/test/unit/callback/callback_with_multiple_method_arguments_test.rb +29 -0
  106. data/test/unit/callback/callback_with_terminator_test.rb +22 -0
  107. data/test/unit/callback/callback_with_unbound_method_test.rb +14 -0
  108. data/test/unit/callback/callback_with_unless_condition_test.rb +17 -0
  109. data/test/unit/callback/callback_without_arguments_test.rb +14 -0
  110. data/test/unit/callback/callback_without_terminator_test.rb +12 -0
  111. data/test/unit/error/error_by_default_test.rb +21 -0
  112. data/test/unit/error/error_with_message_test.rb +23 -0
  113. data/test/unit/eval_helper/eval_helpers_base_test.rb +8 -0
  114. data/test/unit/eval_helper/eval_helpers_proc_block_and_explicit_arguments_test.rb +14 -0
  115. data/test/unit/eval_helper/eval_helpers_proc_block_and_implicit_arguments_test.rb +14 -0
  116. data/test/unit/eval_helper/eval_helpers_proc_test.rb +13 -0
  117. data/test/unit/eval_helper/eval_helpers_proc_with_arguments_test.rb +13 -0
  118. data/test/unit/eval_helper/eval_helpers_proc_with_block_test.rb +13 -0
  119. data/test/unit/eval_helper/eval_helpers_proc_with_block_without_arguments_test.rb +18 -0
  120. data/test/unit/eval_helper/eval_helpers_proc_with_block_without_object_test.rb +14 -0
  121. data/test/unit/eval_helper/eval_helpers_proc_without_arguments_test.rb +19 -0
  122. data/test/unit/eval_helper/eval_helpers_string_test.rb +25 -0
  123. data/test/unit/eval_helper/eval_helpers_string_with_block_test.rb +12 -0
  124. data/test/unit/eval_helper/eval_helpers_symbol_method_missing_test.rb +20 -0
  125. data/test/unit/eval_helper/eval_helpers_symbol_private_test.rb +17 -0
  126. data/test/unit/eval_helper/eval_helpers_symbol_protected_test.rb +17 -0
  127. data/test/unit/eval_helper/eval_helpers_symbol_tainted_method_test.rb +18 -0
  128. data/test/unit/eval_helper/eval_helpers_symbol_test.rb +16 -0
  129. data/test/unit/eval_helper/eval_helpers_symbol_with_arguments_and_block_test.rb +16 -0
  130. data/test/unit/eval_helper/eval_helpers_symbol_with_arguments_test.rb +16 -0
  131. data/test/unit/eval_helper/eval_helpers_symbol_with_block_test.rb +16 -0
  132. data/test/unit/eval_helper/eval_helpers_test.rb +13 -0
  133. data/test/unit/event/event_after_being_copied_test.rb +17 -0
  134. data/test/unit/event/event_by_default_test.rb +60 -0
  135. data/test/unit/event/event_context_test.rb +16 -0
  136. data/test/unit/event/event_on_failure_test.rb +44 -0
  137. data/test/unit/event/event_test.rb +34 -0
  138. data/test/unit/event/event_transitions_test.rb +62 -0
  139. data/test/unit/event/event_with_conflicting_helpers_after_definition_test.rb +79 -0
  140. data/test/unit/event/event_with_conflicting_helpers_before_definition_test.rb +58 -0
  141. data/test/unit/event/event_with_conflicting_machine_test.rb +48 -0
  142. data/test/unit/event/event_with_dynamic_human_name_test.rb +26 -0
  143. data/test/unit/event/event_with_human_name_test.rb +13 -0
  144. data/test/unit/event/event_with_invalid_current_state_test.rb +30 -0
  145. data/test/unit/event/event_with_machine_action_test.rb +33 -0
  146. data/test/unit/event/event_with_marshalling_test.rb +47 -0
  147. data/test/unit/event/event_with_matching_disabled_transitions_test.rb +115 -0
  148. data/test/unit/event/event_with_matching_enabled_transitions_test.rb +75 -0
  149. data/test/unit/event/event_with_multiple_transitions_test.rb +61 -0
  150. data/test/unit/event/event_with_namespace_test.rb +34 -0
  151. data/test/unit/event/event_with_transition_with_blacklisted_to_state_test.rb +60 -0
  152. data/test/unit/event/event_with_transition_with_loopback_state_test.rb +36 -0
  153. data/test/unit/event/event_with_transition_with_nil_to_state_test.rb +36 -0
  154. data/test/unit/event/event_with_transition_with_whitelisted_to_state_test.rb +51 -0
  155. data/test/unit/event/event_with_transition_without_to_state_test.rb +36 -0
  156. data/test/unit/event/event_with_transitions_test.rb +32 -0
  157. data/test/unit/event/event_without_matching_transitions_test.rb +41 -0
  158. data/test/unit/event/event_without_transitions_test.rb +28 -0
  159. data/{spec/state_machines/invalid_event_spec.rb → test/unit/event/invalid_event_test.rb} +8 -7
  160. data/test/unit/event_collection/event_collection_attribute_with_machine_action_test.rb +62 -0
  161. data/test/unit/event_collection/event_collection_attribute_with_namespaced_machine_test.rb +36 -0
  162. data/test/unit/event_collection/event_collection_by_default_test.rb +26 -0
  163. data/test/unit/event_collection/event_collection_test.rb +39 -0
  164. data/test/unit/event_collection/event_collection_with_custom_machine_attribute_test.rb +31 -0
  165. data/test/unit/event_collection/event_collection_with_events_with_transitions_test.rb +76 -0
  166. data/test/unit/event_collection/event_collection_with_multiple_events_test.rb +27 -0
  167. data/test/unit/event_collection/event_collection_with_validations_test.rb +75 -0
  168. data/test/unit/event_collection/event_collection_without_machine_action_test.rb +18 -0
  169. data/test/unit/event_collection/event_string_collection_test.rb +31 -0
  170. data/test/unit/helper_module_test.rb +17 -0
  171. data/test/unit/integrations/integration_finder_test.rb +16 -0
  172. data/test/unit/integrations/integration_matcher_test.rb +27 -0
  173. data/test/unit/invalid_transition/invalid_parallel_transition_test.rb +18 -0
  174. data/test/unit/invalid_transition/invalid_transition_test.rb +47 -0
  175. data/test/unit/invalid_transition/invalid_transition_with_integration_test.rb +47 -0
  176. data/test/unit/invalid_transition/invalid_transition_with_namespace_test.rb +32 -0
  177. data/test/unit/machine/machine_after_being_copied_test.rb +62 -0
  178. data/test/unit/machine/machine_after_changing_initial_state.rb +28 -0
  179. data/test/unit/machine/machine_after_changing_owner_class_test.rb +31 -0
  180. data/test/unit/machine/machine_by_default_test.rb +160 -0
  181. data/test/unit/machine/machine_finder_custom_options_test.rb +17 -0
  182. data/test/unit/machine/machine_finder_with_existing_machine_on_superclass_test.rb +86 -0
  183. data/test/unit/machine/machine_finder_with_existing_on_same_class_test.rb +23 -0
  184. data/test/unit/machine/machine_finder_without_existing_machine_test.rb +25 -0
  185. data/test/unit/machine/machine_persistence_test.rb +52 -0
  186. data/test/unit/machine/machine_state_initialization_test.rb +56 -0
  187. data/test/unit/machine/machine_test.rb +30 -0
  188. data/test/unit/machine/machine_with_action_already_overridden_test.rb +23 -0
  189. data/test/unit/machine/machine_with_action_defined_in_class_test.rb +37 -0
  190. data/test/unit/machine/machine_with_action_defined_in_included_module_test.rb +46 -0
  191. data/test/unit/machine/machine_with_action_defined_in_superclass_test.rb +43 -0
  192. data/test/unit/machine/machine_with_action_undefined_test.rb +33 -0
  193. data/test/unit/machine/machine_with_cached_state_test.rb +20 -0
  194. data/test/unit/machine/machine_with_class_helpers_test.rb +179 -0
  195. data/test/unit/machine/machine_with_conflicting_helpers_after_definition_test.rb +243 -0
  196. data/test/unit/machine/machine_with_conflicting_helpers_before_definition_test.rb +175 -0
  197. data/test/unit/machine/machine_with_custom_action_test.rb +11 -0
  198. data/test/unit/machine/machine_with_custom_attribute_test.rb +103 -0
  199. data/test/unit/machine/machine_with_custom_initialize_test.rb +24 -0
  200. data/test/unit/machine/machine_with_custom_integration_test.rb +69 -0
  201. data/test/unit/machine/machine_with_custom_invalidation_test.rb +40 -0
  202. data/test/unit/machine/machine_with_custom_name_test.rb +57 -0
  203. data/test/unit/machine/machine_with_custom_plural_test.rb +53 -0
  204. data/test/unit/machine/machine_with_dynamic_initial_state_test.rb +65 -0
  205. data/test/unit/machine/machine_with_event_matchers_test.rb +41 -0
  206. data/test/unit/machine/machine_with_events_test.rb +52 -0
  207. data/test/unit/machine/machine_with_events_with_custom_human_names_test.rb +18 -0
  208. data/test/unit/machine/machine_with_events_with_transitions_test.rb +37 -0
  209. data/test/unit/machine/machine_with_existing_event_test.rb +17 -0
  210. data/test/unit/machine/machine_with_existing_machines_on_owner_class_test.rb +20 -0
  211. data/test/unit/machine/machine_with_existing_machines_with_same_attributes_on_owner_class_test.rb +71 -0
  212. data/test/unit/machine/machine_with_existing_machines_with_same_attributes_on_owner_subclass_test.rb +31 -0
  213. data/test/unit/machine/machine_with_existing_state_test.rb +27 -0
  214. data/test/unit/machine/machine_with_failure_callbacks_test.rb +48 -0
  215. data/test/unit/machine/machine_with_helpers_test.rb +14 -0
  216. data/test/unit/machine/machine_with_initial_state_with_value_and_owner_default.rb +25 -0
  217. data/test/unit/machine/machine_with_initialize_and_super_test.rb +17 -0
  218. data/test/unit/machine/machine_with_initialize_arguments_and_block_test.rb +31 -0
  219. data/test/unit/machine/machine_with_initialize_without_super_test.rb +17 -0
  220. data/test/unit/machine/machine_with_instance_helpers_test.rb +179 -0
  221. data/test/unit/machine/machine_with_integration_test.rb +71 -0
  222. data/test/unit/machine/machine_with_multiple_events_test.rb +32 -0
  223. data/test/unit/machine/machine_with_namespace_test.rb +48 -0
  224. data/test/unit/machine/machine_with_nil_action_test.rb +24 -0
  225. data/test/unit/machine/machine_with_other_states.rb +22 -0
  226. data/test/unit/machine/machine_with_owner_subclass_test.rb +18 -0
  227. data/test/unit/machine/machine_with_paths_test.rb +25 -0
  228. data/test/unit/machine/machine_with_private_action_test.rb +43 -0
  229. data/test/unit/machine/machine_with_state_matchers_test.rb +41 -0
  230. data/test/unit/machine/machine_with_state_with_matchers_test.rb +19 -0
  231. data/test/unit/machine/machine_with_states_test.rb +55 -0
  232. data/test/unit/machine/machine_with_states_with_behaviors_test.rb +23 -0
  233. data/test/unit/machine/machine_with_states_with_custom_human_names_test.rb +18 -0
  234. data/test/unit/machine/machine_with_states_with_custom_values_test.rb +21 -0
  235. data/test/unit/machine/machine_with_states_with_runtime_dependencies_test.rb +19 -0
  236. data/test/unit/machine/machine_with_static_initial_state_test.rb +60 -0
  237. data/test/unit/machine/machine_with_superclass_conflicting_helpers_after_definition_test.rb +36 -0
  238. data/test/unit/machine/machine_with_transition_callbacks_test.rb +144 -0
  239. data/test/unit/machine/machine_with_transitions_test.rb +87 -0
  240. data/test/unit/machine/machine_without_initialization_test.rb +31 -0
  241. data/test/unit/machine/machine_without_initialize_test.rb +14 -0
  242. data/test/unit/machine/machine_without_integration_test.rb +31 -0
  243. data/test/unit/machine_collection/machine_collection_by_default_test.rb +11 -0
  244. data/test/unit/machine_collection/machine_collection_fire_attributes_with_validations_test.rb +72 -0
  245. data/test/unit/machine_collection/machine_collection_fire_test.rb +80 -0
  246. data/test/unit/machine_collection/machine_collection_fire_with_transactions_test.rb +54 -0
  247. data/test/unit/machine_collection/machine_collection_fire_with_validations_test.rb +76 -0
  248. data/test/unit/machine_collection/machine_collection_state_initialization_test.rb +101 -0
  249. data/test/unit/machine_collection/machine_collection_transitions_with_blank_events_test.rb +25 -0
  250. data/test/unit/machine_collection/machine_collection_transitions_with_custom_options_test.rb +20 -0
  251. data/test/unit/machine_collection/machine_collection_transitions_with_different_actions_test.rb +26 -0
  252. data/test/unit/machine_collection/machine_collection_transitions_with_exisiting_transitions_test.rb +25 -0
  253. data/test/unit/machine_collection/machine_collection_transitions_with_invalid_events_test.rb +25 -0
  254. data/test/unit/machine_collection/machine_collection_transitions_with_same_actions_test.rb +31 -0
  255. data/test/unit/machine_collection/machine_collection_transitions_with_transition_test.rb +26 -0
  256. data/test/unit/machine_collection/machine_collection_transitions_without_events_test.rb +25 -0
  257. data/test/unit/machine_collection/machine_collection_transitions_without_transition_test.rb +27 -0
  258. data/test/unit/matcher/all_matcher_test.rb +29 -0
  259. data/test/unit/matcher/blacklist_matcher_test.rb +30 -0
  260. data/test/unit/matcher/loopback_matcher_test.rb +27 -0
  261. data/test/unit/matcher/matcher_by_default_test.rb +15 -0
  262. data/test/unit/matcher/matcher_with_multiple_values_test.rb +15 -0
  263. data/test/unit/matcher/matcher_with_value_test.rb +15 -0
  264. data/test/unit/matcher/whitelist_matcher_test.rb +30 -0
  265. data/test/unit/matcher_helpers/matcher_helpers_all_test.rb +14 -0
  266. data/test/unit/matcher_helpers/matcher_helpers_any_test.rb +14 -0
  267. data/test/unit/matcher_helpers/matcher_helpers_same_test.rb +13 -0
  268. data/test/unit/node_collection/node_collection_after_being_copied_test/n.rb +46 -0
  269. data/test/unit/node_collection/node_collection_after_update_test/n.rb +36 -0
  270. data/test/unit/node_collection/node_collection_by_default_test.rb +22 -0
  271. data/test/unit/node_collection/node_collection_test.rb +23 -0
  272. data/test/unit/node_collection/node_collection_with_indices_test/n.rb +42 -0
  273. data/test/unit/node_collection/node_collection_with_matcher_contexts_test.rb +25 -0
  274. data/test/unit/node_collection/node_collection_with_nodes_test/n.rb +46 -0
  275. data/test/unit/node_collection/node_collection_with_numeric_index_test/n.rb +24 -0
  276. data/test/unit/node_collection/node_collection_with_postdefined_contexts_test/n.rb +22 -0
  277. data/test/unit/node_collection/node_collection_with_predefined_contexts_test/n.rb +23 -0
  278. data/test/unit/node_collection/node_collection_with_string_index_test/n.rb +20 -0
  279. data/test/unit/node_collection/node_collection_with_symbol_index_test/n.rb +20 -0
  280. data/test/unit/node_collection/node_collection_without_indices_test/n.rb +30 -0
  281. data/test/unit/path/path_by_default_test.rb +54 -0
  282. data/test/unit/path/path_test.rb +14 -0
  283. data/test/unit/path/path_with_available_transitions_after_reaching_target_test.rb +40 -0
  284. data/test/unit/path/path_with_available_transitions_test.rb +54 -0
  285. data/test/unit/path/path_with_deep_target_reached_test.rb +50 -0
  286. data/test/unit/path/path_with_deep_target_test.rb +40 -0
  287. data/test/unit/path/path_with_duplicates_test.rb +32 -0
  288. data/test/unit/path/path_with_encountered_transitions_test.rb +34 -0
  289. data/test/unit/path/path_with_guarded_transitions_test.rb +42 -0
  290. data/test/unit/path/path_with_reached_target_test.rb +35 -0
  291. data/test/unit/path/path_with_transitions_test.rb +54 -0
  292. data/test/unit/path/path_with_unreached_target_test.rb +31 -0
  293. data/test/unit/path/path_without_transitions_test.rb +24 -0
  294. data/test/unit/path_collection/path_collection_by_default_test.rb +46 -0
  295. data/test/unit/path_collection/path_collection_test.rb +24 -0
  296. data/test/unit/path_collection/path_collection_with_deep_paths_test.rb +43 -0
  297. data/test/unit/path_collection/path_collection_with_duplicate_nodes_test.rb +31 -0
  298. data/test/unit/path_collection/path_collection_with_from_state_test.rb +27 -0
  299. data/test/unit/path_collection/path_collection_with_paths_test.rb +47 -0
  300. data/test/unit/path_collection/path_collection_with_to_state_test.rb +29 -0
  301. data/test/unit/path_collection/path_with_guarded_paths_test.rb +25 -0
  302. data/test/unit/state/state_after_being_copied_test.rb +19 -0
  303. data/test/unit/state/state_by_default_test.rb +41 -0
  304. data/test/unit/state/state_final_test.rb +28 -0
  305. data/test/unit/state/state_initial_test.rb +13 -0
  306. data/test/unit/state/state_not_final_test.rb +32 -0
  307. data/test/unit/state/state_not_initial_test.rb +13 -0
  308. data/test/unit/state/state_test.rb +44 -0
  309. data/test/unit/state/state_with_cached_lambda_value_test.rb +29 -0
  310. data/test/unit/state/state_with_conflicting_helpers_after_definition_test.rb +38 -0
  311. data/test/unit/state/state_with_conflicting_helpers_before_definition_test.rb +29 -0
  312. data/test/unit/state/state_with_conflicting_machine_name_test.rb +20 -0
  313. data/test/unit/state/state_with_conflicting_machine_test.rb +37 -0
  314. data/test/unit/state/state_with_context_test.rb +60 -0
  315. data/test/unit/state/state_with_dynamic_human_name_test.rb +25 -0
  316. data/test/unit/state/state_with_existing_context_method_test.rb +24 -0
  317. data/test/unit/state/state_with_human_name_test.rb +13 -0
  318. data/test/unit/state/state_with_integer_value_test.rb +32 -0
  319. data/test/unit/state/state_with_invalid_method_call_test.rb +21 -0
  320. data/test/unit/state/state_with_lambda_value_test.rb +37 -0
  321. data/test/unit/state/state_with_matcher_test.rb +18 -0
  322. data/test/unit/state/state_with_multiple_contexts_test.rb +57 -0
  323. data/test/unit/state/state_with_name_test.rb +43 -0
  324. data/test/unit/state/state_with_namespace_test.rb +22 -0
  325. data/test/unit/state/state_with_nil_value_test.rb +35 -0
  326. data/test/unit/state/state_with_redefined_context_method_test.rb +45 -0
  327. data/test/unit/state/state_with_symbolic_value_test.rb +32 -0
  328. data/test/unit/state/state_with_valid_inherited_method_call_for_current_state_test.rb +40 -0
  329. data/test/unit/state/state_with_valid_method_call_for_current_state_test.rb +33 -0
  330. data/test/unit/state/state_with_valid_method_call_for_different_state_test.rb +41 -0
  331. data/test/unit/state/state_without_cached_lambda_value_test.rb +25 -0
  332. data/test/unit/state/state_without_name_test.rb +39 -0
  333. data/test/unit/state_collection/state_collection_by_default_test.rb +21 -0
  334. data/test/unit/state_collection/state_collection_string_test.rb +35 -0
  335. data/test/unit/state_collection/state_collection_test.rb +74 -0
  336. data/test/unit/state_collection/state_collection_with_custom_state_values_test.rb +29 -0
  337. data/test/unit/state_collection/state_collection_with_event_transitions_test.rb +39 -0
  338. data/test/unit/state_collection/state_collection_with_initial_state_test.rb +40 -0
  339. data/test/unit/state_collection/state_collection_with_namespace_test.rb +21 -0
  340. data/test/unit/state_collection/state_collection_with_state_behaviors_test.rb +40 -0
  341. data/test/unit/state_collection/state_collection_with_state_matchers_test.rb +29 -0
  342. data/test/unit/state_collection/state_collection_with_transition_callbacks_test.rb +40 -0
  343. data/test/unit/state_context/state_context_proxy_test.rb +26 -0
  344. data/test/unit/state_context/state_context_proxy_with_if_and_unless_conditions_test.rb +42 -0
  345. data/test/unit/state_context/state_context_proxy_with_if_condition_test.rb +64 -0
  346. data/test/unit/state_context/state_context_proxy_with_multiple_if_conditions_test.rb +32 -0
  347. data/test/unit/state_context/state_context_proxy_with_multiple_unless_conditions_test.rb +32 -0
  348. data/test/unit/state_context/state_context_proxy_with_unless_condition_test.rb +64 -0
  349. data/test/unit/state_context/state_context_proxy_without_conditions_test.rb +31 -0
  350. data/test/unit/state_context/state_context_test.rb +28 -0
  351. data/test/unit/state_context/state_context_transition_test.rb +104 -0
  352. data/test/unit/state_context/state_context_with_matching_transition_test.rb +27 -0
  353. data/test/unit/state_machine/state_machine_by_default_test.rb +12 -0
  354. data/test/unit/state_machine/state_machine_test.rb +20 -0
  355. data/test/unit/transition/transition_after_being_performed_test.rb +48 -0
  356. data/test/unit/transition/transition_after_being_persisted_test.rb +46 -0
  357. data/test/unit/transition/transition_after_being_rolled_back_test.rb +35 -0
  358. data/test/unit/transition/transition_equality_test.rb +52 -0
  359. data/test/unit/transition/transition_loopback_test.rb +18 -0
  360. data/test/unit/transition/transition_test.rb +96 -0
  361. data/test/unit/transition/transition_transient_test.rb +20 -0
  362. data/test/unit/transition/transition_with_action_test.rb +27 -0
  363. data/test/unit/transition/transition_with_after_callbacks_skipped_test.rb +127 -0
  364. data/test/unit/transition/transition_with_after_callbacks_test.rb +93 -0
  365. data/test/unit/transition/transition_with_around_callbacks_test.rb +141 -0
  366. data/test/unit/transition/transition_with_before_callbacks_skipped_test.rb +30 -0
  367. data/test/unit/transition/transition_with_before_callbacks_test.rb +104 -0
  368. data/test/unit/transition/transition_with_custom_machine_attribute_test.rb +28 -0
  369. data/test/unit/transition/transition_with_different_states_test.rb +18 -0
  370. data/test/unit/transition/transition_with_dynamic_to_value_test.rb +19 -0
  371. data/test/unit/transition/transition_with_failure_callbacks_test.rb +84 -0
  372. data/test/unit/transition/transition_with_invalid_nodes_test.rb +29 -0
  373. data/test/unit/transition/transition_with_mixed_callbacks_test.rb +105 -0
  374. data/test/unit/transition/transition_with_multiple_after_callbacks_test.rb +40 -0
  375. data/test/unit/transition/transition_with_multiple_around_callbacks_test.rb +114 -0
  376. data/test/unit/transition/transition_with_multiple_before_callbacks_test.rb +40 -0
  377. data/test/unit/transition/transition_with_multiple_failure_callbacks_test.rb +40 -0
  378. data/test/unit/transition/transition_with_namespace_test.rb +47 -0
  379. data/test/unit/transition/transition_with_perform_arguments_test.rb +35 -0
  380. data/test/unit/transition/transition_with_transactions_test.rb +42 -0
  381. data/test/unit/transition/transition_without_callbacks_test.rb +33 -0
  382. data/test/unit/transition/transition_without_reading_state_test.rb +22 -0
  383. data/test/unit/transition/transition_without_running_action_test.rb +47 -0
  384. data/test/unit/transition_collection/attribute_transition_collection_by_default_test.rb +23 -0
  385. data/test/unit/transition_collection/attribute_transition_collection_marshalling_test.rb +64 -0
  386. data/test/unit/transition_collection/attribute_transition_collection_with_action_error_test.rb +44 -0
  387. data/test/unit/transition_collection/attribute_transition_collection_with_action_failed_test.rb +44 -0
  388. data/test/unit/transition_collection/attribute_transition_collection_with_after_callback_error_test.rb +32 -0
  389. data/test/unit/transition_collection/attribute_transition_collection_with_after_callback_halt_test.rb +33 -0
  390. data/test/unit/transition_collection/attribute_transition_collection_with_around_after_yield_callback_error_test.rb +32 -0
  391. data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_after_yield_error_test.rb +32 -0
  392. data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_after_yield_halt_test.rb +33 -0
  393. data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_before_yield_halt_test.rb +33 -0
  394. data/test/unit/transition_collection/attribute_transition_collection_with_before_callback_error_test.rb +32 -0
  395. data/test/unit/transition_collection/attribute_transition_collection_with_before_callback_halt_test.rb +33 -0
  396. data/test/unit/transition_collection/attribute_transition_collection_with_callbacks_test.rb +68 -0
  397. data/test/unit/transition_collection/attribute_transition_collection_with_event_transitions_test.rb +41 -0
  398. data/test/unit/transition_collection/attribute_transition_collection_with_events_test.rb +44 -0
  399. data/test/unit/transition_collection/attribute_transition_collection_with_skipped_after_callbacks_test.rb +42 -0
  400. data/test/unit/transition_collection/transition_collection_by_default_test.rb +23 -0
  401. data/test/unit/transition_collection/transition_collection_empty_with_block_test.rb +23 -0
  402. data/test/unit/transition_collection/transition_collection_empty_without_block_test.rb +12 -0
  403. data/test/unit/transition_collection/transition_collection_invalid_test.rb +21 -0
  404. data/test/unit/transition_collection/transition_collection_partial_invalid_test.rb +69 -0
  405. data/test/unit/transition_collection/transition_collection_test.rb +26 -0
  406. data/test/unit/transition_collection/transition_collection_valid_test.rb +57 -0
  407. data/test/unit/transition_collection/transition_collection_with_action_error_test.rb +66 -0
  408. data/test/unit/transition_collection/transition_collection_with_action_failed_test.rb +60 -0
  409. data/test/unit/transition_collection/transition_collection_with_action_hook_and_block_test.rb +17 -0
  410. data/test/unit/transition_collection/transition_collection_with_action_hook_and_skipped_action_test.rb +17 -0
  411. data/test/unit/transition_collection/transition_collection_with_action_hook_and_skipped_after_callbacks_test.rb +37 -0
  412. data/test/unit/transition_collection/transition_collection_with_action_hook_base_test.rb +34 -0
  413. data/test/unit/transition_collection/transition_collection_with_action_hook_error_test.rb +29 -0
  414. data/test/unit/transition_collection/transition_collection_with_action_hook_invalid_test.rb +17 -0
  415. data/test/unit/transition_collection/transition_collection_with_action_hook_multiple_test.rb +79 -0
  416. data/test/unit/transition_collection/transition_collection_with_action_hook_test.rb +45 -0
  417. data/test/unit/transition_collection/transition_collection_with_action_hook_with_different_actions_test.rb +48 -0
  418. data/test/unit/transition_collection/transition_collection_with_action_hook_with_nil_action_test.rb +42 -0
  419. data/test/unit/transition_collection/transition_collection_with_after_callback_halt_test.rb +51 -0
  420. data/test/unit/transition_collection/transition_collection_with_before_callback_halt_test.rb +47 -0
  421. data/test/unit/transition_collection/transition_collection_with_block_test.rb +46 -0
  422. data/test/unit/transition_collection/transition_collection_with_callbacks_test.rb +135 -0
  423. data/test/unit/transition_collection/transition_collection_with_different_actions_test.rb +189 -0
  424. data/test/unit/transition_collection/transition_collection_with_duplicate_actions_test.rb +48 -0
  425. data/test/unit/transition_collection/transition_collection_with_empty_actions_test.rb +41 -0
  426. data/test/unit/transition_collection/transition_collection_with_mixed_actions_test.rb +41 -0
  427. data/test/unit/transition_collection/transition_collection_with_skipped_actions_and_block_test.rb +34 -0
  428. data/test/unit/transition_collection/transition_collection_with_skipped_actions_test.rb +69 -0
  429. data/test/unit/transition_collection/transition_collection_with_skipped_after_callbacks_and_around_callbacks_test.rb +53 -0
  430. data/test/unit/transition_collection/transition_collection_with_skipped_after_callbacks_test.rb +34 -0
  431. data/test/unit/transition_collection/transition_collection_with_transactions_test.rb +65 -0
  432. data/test/unit/transition_collection/transition_collection_without_transactions_test.rb +29 -0
  433. metadata +888 -101
  434. data/spec/models/auto_shop_spec.rb +0 -41
  435. data/spec/models/car_spec.rb +0 -90
  436. data/spec/models/motorcycle_spec.rb +0 -44
  437. data/spec/models/traffic_light_spec.rb +0 -56
  438. data/spec/models/vehicle_spec.rb +0 -580
  439. data/spec/spec_helper.rb +0 -7
  440. data/spec/state_machines/assertions_spec.rb +0 -31
  441. data/spec/state_machines/branch_spec.rb +0 -827
  442. data/spec/state_machines/callbacks_spec.rb +0 -706
  443. data/spec/state_machines/errors_spec.rb +0 -1
  444. data/spec/state_machines/event_collection_spec.rb +0 -401
  445. data/spec/state_machines/event_spec.rb +0 -1140
  446. data/spec/state_machines/helper_spec.rb +0 -14
  447. data/spec/state_machines/integration_base_spec.rb +0 -12
  448. data/spec/state_machines/integration_spec.rb +0 -132
  449. data/spec/state_machines/invalid_parallel_transition_spec.rb +0 -18
  450. data/spec/state_machines/invalid_transition_spec.rb +0 -114
  451. data/spec/state_machines/machine_collection_spec.rb +0 -606
  452. data/spec/state_machines/machine_spec.rb +0 -3176
  453. data/spec/state_machines/matcher_helpers_spec.rb +0 -39
  454. data/spec/state_machines/matcher_spec.rb +0 -157
  455. data/spec/state_machines/node_collection_spec.rb +0 -371
  456. data/spec/state_machines/path_collection_spec.rb +0 -271
  457. data/spec/state_machines/path_spec.rb +0 -488
  458. data/spec/state_machines/state_collection_spec.rb +0 -352
  459. data/spec/state_machines/state_context_spec.rb +0 -442
  460. data/spec/state_machines/state_machine_spec.rb +0 -29
  461. data/spec/state_machines/state_spec.rb +0 -970
  462. data/spec/state_machines/transition_collection_spec.rb +0 -2199
  463. data/spec/state_machines/transition_spec.rb +0 -1558
  464. data/spec/support/migration_helpers.rb +0 -59
  465. data/spec/support/models.rb +0 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3eee931d0f563b659a9e786dc0eea93ed9f9f537
4
- data.tar.gz: f53da4d08eecd750e4b416f5926e31b49be341f1
3
+ metadata.gz: c50330d0782d72bdf4e9ed537340c4072b573b6b
4
+ data.tar.gz: d057ae65cec153e36b69ea5c227035d28629c314
5
5
  SHA512:
6
- metadata.gz: c1fde9ad6a6b0fb3a3f066a87f7f80c90d78c9f7d633f92f67ff0f3104bc01d16bddf4485f1b24ab3dc35bd14e6e348b8bc3ee8f45cce9edc89ef771869b9229
7
- data.tar.gz: 9f07e5b0c0d579557d0a4648b909922a85f45653366ed37e738a3176d52e4ef5ed586471395ea1ca1fcf22109a2d3dda0139e7676f9199666348c108904cabdc
6
+ metadata.gz: 362c90ff95ddf0535fef6743f267958d1c8c45be68c3bf7026dc10f20d89e48bf02333344d0692456b84ab09c737e7b7e754c766e9bfc9ea243689a2e7a5f0a5
7
+ data.tar.gz: 1bad1ea983e9946dc60f5a373ccd1cc180e1287d4b8f3410f4d7579987d67c584501e7c156d620bc9a8ca3864fc1eac4e6c2c96f401987b9073694c10a7de9c7
data/.travis.yml CHANGED
@@ -1,8 +1,14 @@
1
1
  language: ruby
2
+ sudo: false
2
3
  script: "bundle exec rake"
4
+ cache: bundler
3
5
  rvm:
4
- - 1.9.3
6
+ - 2.1
5
7
  - 2.0.0
6
- - 2.1.1
7
- - jruby-19mode
8
- - rbx-2
8
+ - 2.2
9
+ - jruby
10
+ - rbx-2
11
+ matrix:
12
+ allow_failures:
13
+ - rvm: rbx-2
14
+ - rvm: jruby
data/Changelog.md ADDED
File without changes
data/Gemfile CHANGED
@@ -1,2 +1,8 @@
1
1
  source 'https://rubygems.org'
2
2
  gemspec
3
+
4
+ platform :mri_20, :mri_21 do
5
+ gem 'pry-byebug'
6
+ end
7
+
8
+ gem 'minitest-reporters'
data/LICENSE.txt CHANGED
@@ -1,5 +1,5 @@
1
1
  Copyright (c) 2006-2012 Aaron Pfeifer
2
- Copyright (c) 2014 Abdelkader Boudih
2
+ Copyright (c) 2014-2015 Abdelkader Boudih
3
3
 
4
4
  MIT License
5
5
 
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
- [![Build Status](https://travis-ci.org/seuros/state_machines.svg?branch=master)](https://travis-ci.org/seuros/state_machines)
2
- [![Code Climate](https://codeclimate.com/github/seuros/state_machines.png)](https://codeclimate.com/github/seuros/state_machines)
1
+ [![Build Status](https://travis-ci.org/state-machines/state_machines.svg?branch=master)](https://travis-ci.org/state-machines/state_machines)
2
+ [![Code Climate](https://codeclimate.com/github/state-machines/state_machines.png)](https://codeclimate.com/github/state-machines/state_machines)
3
3
  # State Machines
4
4
 
5
5
  State Machines adds support for creating state machines for attributes on any Ruby class.
@@ -20,7 +20,7 @@ Or install it yourself as:
20
20
 
21
21
  ## Usage
22
22
 
23
- TODO: Write usage instructions here
23
+
24
24
 
25
25
  ## Dependencies
26
26
 
@@ -30,15 +30,13 @@ Ruby versions officially supported and tested:
30
30
  * JRuby (1.9)
31
31
  * Rubinius
32
32
 
33
-
34
-
35
33
  For graphing state machine:
36
34
 
37
- * [state_machines-graphviz](http://github.com/seuros/state_machines-graphviz)
35
+ * [state_machines-graphviz](http://github.com/state-machines/state_machines-graphviz)
38
36
 
39
37
  For documenting state machines:
40
38
 
41
- * [state_machines-yard](http://github.com/seuros/state_machines-yard)
39
+ * [state_machines-yard](http://github.com/state-machines/state_machines-yard)
42
40
 
43
41
 
44
42
  ## TODO
@@ -47,7 +45,7 @@ Add matchers/assertions for rspec and minitest
47
45
 
48
46
  ## Contributing
49
47
 
50
- 1. Fork it ( https://github.com/seuros/state_machines/fork )
48
+ 1. Fork it ( https://github.com/state-machines/state_machines/fork )
51
49
  2. Create your feature branch (`git checkout -b my-new-feature`)
52
50
  3. Commit your changes (`git commit -am 'Add some feature'`)
53
51
  4. Push to the branch (`git push origin my-new-feature`)
data/Rakefile CHANGED
@@ -1,10 +1,13 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+ Rake::TestTask.new(:functional) do |t|
4
+ # t.pattern = 'test/**/*_test.rb'
5
+ t.test_files = FileList['test/functional/*_test.rb']
6
+ end
3
7
 
4
- require 'rspec/core/rake_task'
5
- RSpec::Core::RakeTask.new do |t|
6
- t.pattern = 'spec/**/*_spec.rb'
8
+ Rake::TestTask.new(:unit) do |t|
9
+ t.test_files = FileList['test/unit/**/*_test.rb']
7
10
  end
8
11
 
9
12
  desc 'Default: run all tests.'
10
- task :default => :spec
13
+ task default: [:unit, :functional]
data/Testing.md ADDED
File without changes
@@ -2,7 +2,7 @@ class Hash
2
2
  # Provides a set of helper methods for making assertions about the content
3
3
  # of various objects
4
4
 
5
- unless defined?(ActiveSupport)
5
+ unless respond_to?(:assert_valid_keys)
6
6
  # Validate all keys in a hash match <tt>*valid_keys</tt>, raising ArgumentError
7
7
  # on a mismatch. Note that keys are NOT treated indifferently, meaning if you
8
8
  # use strings for keys but assert symbols as keys, this will fail.
@@ -28,10 +28,10 @@ class Hash
28
28
  # == Examples
29
29
  #
30
30
  # options = {:only => :on, :except => :off}
31
- # assert_exclusive_keys(options, :only) # => nil
32
- # assert_exclusive_keys(options, :except) # => nil
33
- # assert_exclusive_keys(options, :only, :except) # => ArgumentError: Conflicting keys: only, except
34
- # assert_exclusive_keys(options, :only, :except, :with) # => ArgumentError: Conflicting keys: only, except
31
+ # options.assert_exclusive_keys(:only) # => nil
32
+ # options.assert_exclusive_keys(:except) # => nil
33
+ # options.assert_exclusive_keys(:only, :except) # => ArgumentError: Conflicting keys: only, except
34
+ # options.assert_exclusive_keys(:only, :except, :with) # => ArgumentError: Conflicting keys: only, except
35
35
  def assert_exclusive_keys(*exclusive_keys)
36
36
  conflicting_keys = exclusive_keys & keys
37
37
  raise ArgumentError, "Conflicting keys: #{conflicting_keys.join(', ')}" unless conflicting_keys.length <= 1
@@ -14,7 +14,8 @@ module StateMachines
14
14
  # An invalid integration was specified
15
15
  class IntegrationNotFound < Error
16
16
  def initialize(name)
17
- super(nil, "#{name.inspect} is an invalid integration")
17
+ valid_integrations_name = Integrations.list.collect(&:integration_name)
18
+ super(nil, "#{name.inspect} is an invalid integration. Valid integrations are: #{valid_integrations_name.join(', ')} ")
18
19
  end
19
20
  end
20
21
 
@@ -1,3 +1,5 @@
1
+ require 'set'
2
+
1
3
  module StateMachines
2
4
  # Integrations allow state machines to take advantage of features within the
3
5
  # context of a particular library. This is currently most useful with
@@ -22,11 +24,10 @@ module StateMachines
22
24
 
23
25
  class << self
24
26
  # Register integration
25
- def register(arg)
26
- #TODO check name conflict
27
- case arg.class.to_s
27
+ def register(name_or_module)
28
+ case name_or_module.class.to_s
28
29
  when 'Module'
29
- add(arg)
30
+ add(name_or_module)
30
31
  else
31
32
  fail IntegrationError
32
33
  end
@@ -34,6 +35,16 @@ module StateMachines
34
35
  end
35
36
 
36
37
 
38
+ def unregister(name) #:nodoc:#
39
+ @integrations.delete(name)
40
+ end
41
+
42
+ def reset #:nodoc:#
43
+ name_spaced_integrations
44
+ @integrations = Set.new
45
+ true
46
+ end
47
+
37
48
  # Gets a list of all of the available integrations for use.
38
49
  #
39
50
  # == Example
@@ -48,6 +59,7 @@ module StateMachines
48
59
  name_spaced_integrations
49
60
  @integrations
50
61
  end
62
+ alias_method :list, :integrations
51
63
 
52
64
 
53
65
  # Attempts to find an integration that matches the given class. This will
@@ -104,17 +116,12 @@ module StateMachines
104
116
  def name_spaced_integrations
105
117
  self.constants.each do |const|
106
118
  integration = self.const_get(const)
107
- add(integration) if integration.respond_to?(:integration_name)
119
+ add(integration)
108
120
  end
109
121
  end
110
122
 
111
123
  def add(integration)
112
- @integrations << integration
113
- end
114
-
115
- def reset
116
- @integrations = Set.new
117
- name_spaced_integrations
124
+ @integrations << integration if integration.respond_to?(:integration_name)
118
125
  end
119
126
  end
120
127
  end
@@ -439,14 +439,13 @@ module StateMachines
439
439
  end
440
440
 
441
441
 
442
- def draw(class_names, options = {})
442
+ def draw(*)
443
443
  fail NotImplementedError
444
444
  end
445
- end
446
445
 
447
- # Default messages to use for validation errors in ORM integrations
448
- class << self;
449
- attr_accessor :default_messages;
446
+ # Default messages to use for validation errors in ORM integrations
447
+ attr_accessor :default_messages
448
+ attr_accessor :ignore_method_conflicts
450
449
  end
451
450
  @default_messages = {
452
451
  :invalid => 'is invalid',
@@ -456,9 +455,6 @@ module StateMachines
456
455
 
457
456
  # Whether to ignore any conflicts that are detected for helper methods that
458
457
  # get generated for a machine's owner class. Default is false.
459
- class << self;
460
- attr_accessor :ignore_method_conflicts;
461
- end
462
458
  @ignore_method_conflicts = false
463
459
 
464
460
  # The class that the machine is defined in
@@ -1828,20 +1824,20 @@ module StateMachines
1828
1824
  # Marks the given object as invalid with the given message.
1829
1825
  #
1830
1826
  # By default, this is a no-op.
1831
- def invalidate(object, attribute, message, values = [])
1827
+ def invalidate(_object, _attribute, _message, _values = [])
1832
1828
  end
1833
1829
 
1834
1830
  # Gets a description of the errors for the given object. This is used to
1835
1831
  # provide more detailed information when an InvalidTransition exception is
1836
1832
  # raised.
1837
- def errors_for(object)
1833
+ def errors_for(_object)
1838
1834
  ''
1839
1835
  end
1840
1836
 
1841
1837
  # Resets any errors previously added when invalidating the given object.
1842
1838
  #
1843
1839
  # By default, this is a no-op.
1844
- def reset(object)
1840
+ def reset(_object)
1845
1841
  end
1846
1842
 
1847
1843
  # Generates the message to use when invalidating the given object after
@@ -1872,7 +1868,7 @@ module StateMachines
1872
1868
  end
1873
1869
 
1874
1870
 
1875
- def draw(graph_options = {})
1871
+ def draw(*)
1876
1872
  fail NotImplementedError
1877
1873
  end
1878
1874
 
@@ -1,3 +1,3 @@
1
1
  module StateMachines
2
- VERSION = '0.0.2'
2
+ VERSION = '0.1.0'
3
3
  end
@@ -1,4 +1,3 @@
1
- # coding: utf-8
2
1
  lib = File.expand_path('../lib', __FILE__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require 'state_machines/version'
@@ -7,19 +6,18 @@ Gem::Specification.new do |spec|
7
6
  spec.name = 'state_machines'
8
7
  spec.version = StateMachines::VERSION
9
8
  spec.authors = ['Abdelkader Boudih', 'Aaron Pfeifer']
10
- spec.email = ['terminale@gmail.com']
9
+ spec.email = %w(terminale@gmail.com aaron@pluginaweek.org)
11
10
  spec.summary = %q(State machines for attributes)
12
11
  spec.description = %q(Adds support for creating state machines for attributes on any Ruby class)
13
- spec.homepage = 'https://github.com/seuros/state_machines'
12
+ spec.homepage = 'https://github.com/state-machines/state_machines'
14
13
  spec.license = 'MIT'
15
14
 
16
- spec.required_ruby_version = '>= 1.9.3'
15
+ spec.required_ruby_version = '>= 2.0.0'
17
16
  spec.files = `git ls-files -z`.split("\x0")
18
- spec.test_files = spec.files.grep(/^spec\//)
17
+ spec.test_files = spec.files.grep(/^test\//)
19
18
  spec.require_paths = ['lib']
20
19
 
21
- spec.add_development_dependency 'bundler'
20
+ spec.add_development_dependency 'bundler', '>= 1.7.6'
22
21
  spec.add_development_dependency 'rake'
23
- spec.add_development_dependency 'rspec' , '3.0.0.beta2'
24
- spec.add_development_dependency 'rspec-its'
22
+ spec.add_development_dependency 'minitest', '>= 5.4'
25
23
  end
@@ -0,0 +1,10 @@
1
+ module EventOnFailureIntegration
2
+ include StateMachines::Integrations::Base
3
+ def invalidate(object, _attribute, message, values = [])
4
+ (object.errors ||= []) << generate_message(message, values)
5
+ end
6
+
7
+ def reset(object)
8
+ object.errors = []
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ module VehicleIntegration
2
+ include StateMachines::Integrations::Base
3
+
4
+ def self.matching_ancestors
5
+ ['Vehicle']
6
+ end
7
+ end
@@ -1,3 +1,5 @@
1
+ require_relative '../../files/models/vehicle'
2
+
1
3
  class Car < Vehicle
2
4
  state_machine do
3
5
  event :reverse do
@@ -1,3 +1,5 @@
1
+ require_relative '../../files/models/vehicle'
2
+
1
3
  class Motorcycle < Vehicle
2
4
  state_machine initial: :idling do
3
5
  state :first_gear do
@@ -25,7 +25,7 @@ class TrafficLight
25
25
  end
26
26
 
27
27
  state :proceed do
28
- def color(transform)
28
+ def color(_transform)
29
29
  'green'
30
30
  end
31
31
 
@@ -35,7 +35,7 @@ class TrafficLight
35
35
  end
36
36
 
37
37
  state :caution do
38
- def color(transform)
38
+ def color(_transform)
39
39
  'yellow'
40
40
  end
41
41
  end
@@ -1,3 +1,6 @@
1
+ require_relative 'model_base'
2
+ require_relative 'auto_shop'
3
+
1
4
  class Vehicle < ModelBase
2
5
  attr_accessor :auto_shop, :seatbelt_on, :insurance_premium, :force_idle, :callbacks, :saved, :time_elapsed, :last_transition_args
3
6
 
@@ -16,7 +19,7 @@ class Vehicle < ModelBase
16
19
  end
17
20
 
18
21
  # Defines the state machine for the state of the vehicled
19
- state_machine initial: lambda { |vehicle| vehicle.force_idle ? :idling : :parked }, action: :save do
22
+ state_machine initial: ->(vehicle) { vehicle.force_idle ? :idling : :parked }, action: :save do
20
23
  before_transition { |vehicle, transition| vehicle.last_transition_args = transition.args }
21
24
  before_transition parked: any, do: :put_on_seatbelt
22
25
  before_transition any => :stalled, :do => :increase_insurance_premium
@@ -25,10 +28,10 @@ class Vehicle < ModelBase
25
28
  after_transition on: :repair, do: :fix
26
29
 
27
30
  # Callback tracking for initial state callbacks
28
- after_transition any => :parked, :do => lambda { |vehicle| vehicle.callbacks << 'before_enter_parked' }
29
- before_transition any => :idling, :do => lambda { |vehicle| vehicle.callbacks << 'before_enter_idling' }
31
+ after_transition any => :parked, :do => ->(vehicle) { vehicle.callbacks << 'before_enter_parked' }
32
+ before_transition any => :idling, :do => ->(vehicle) { vehicle.callbacks << 'before_enter_idling' }
30
33
 
31
- around_transition do |vehicle, transition, block|
34
+ around_transition do |vehicle, _transition, block|
32
35
  time = Time.now
33
36
  block.call
34
37
  vehicle.time_elapsed = Time.now - time
@@ -61,7 +64,7 @@ class Vehicle < ModelBase
61
64
  end
62
65
 
63
66
  event :crash do
64
- transition [:first_gear, :second_gear, :third_gear] => :stalled, :if => lambda { |vehicle| vehicle.auto_shop.available? }
67
+ transition [:first_gear, :second_gear, :third_gear] => :stalled, :if => ->(vehicle) { vehicle.auto_shop.available? }
65
68
  end
66
69
 
67
70
  event :repair do
@@ -106,6 +109,7 @@ class Vehicle < ModelBase
106
109
  end
107
110
 
108
111
  private
112
+
109
113
  # Safety first! Puts on our seatbelt
110
114
  def put_on_seatbelt
111
115
  self.seatbelt_on = true
@@ -0,0 +1,5 @@
1
+ class Node < Struct.new(:name, :value, :machine)
2
+ def context
3
+ yield
4
+ end
5
+ end
@@ -0,0 +1,15 @@
1
+ class Switch
2
+ def self.name
3
+ @name ||= "Switch_#{rand(1_000_000)}"
4
+ end
5
+
6
+ state_machine do
7
+ event :turn_on do
8
+ transition all => :on
9
+ end
10
+
11
+ event :turn_off do
12
+ transition all => :off
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ require_relative '../test_helper'
2
+ require_relative '../files/models/auto_shop'
3
+
4
+ class AutoShopAvailableTest < MiniTest::Test
5
+ def setup
6
+ @auto_shop = AutoShop.new
7
+ end
8
+
9
+ def test_should_be_in_available_state
10
+ assert_equal 'available', @auto_shop.state
11
+ end
12
+
13
+ def test_should_allow_tow_vehicle
14
+ assert @auto_shop.tow_vehicle
15
+ end
16
+
17
+ def test_should_not_allow_fix_vehicle
18
+ refute @auto_shop.fix_vehicle
19
+ end
20
+ end
@@ -0,0 +1,25 @@
1
+ require_relative '../test_helper'
2
+ require_relative '../files/models/auto_shop'
3
+
4
+ class AutoShopBusyTest < MiniTest::Test
5
+ def setup
6
+ @auto_shop = AutoShop.new
7
+ @auto_shop.tow_vehicle
8
+ end
9
+
10
+ def test_should_be_in_busy_state
11
+ assert_equal 'busy', @auto_shop.state
12
+ end
13
+
14
+ def test_should_have_incremented_number_of_customers
15
+ assert_equal 1, @auto_shop.num_customers
16
+ end
17
+
18
+ def test_should_not_allow_tow_vehicle
19
+ refute @auto_shop.tow_vehicle
20
+ end
21
+
22
+ def test_should_allow_fix_vehicle
23
+ assert @auto_shop.fix_vehicle
24
+ end
25
+ end
@@ -0,0 +1,45 @@
1
+ require_relative '../test_helper'
2
+ require_relative '../files/models/car'
3
+
4
+ class CarBackingUpTest < MiniTest::Test
5
+ def setup
6
+ @car = Car.new
7
+ @car.reverse
8
+ end
9
+
10
+ def test_should_be_in_backing_up_state
11
+ assert_equal 'backing_up', @car.state
12
+ end
13
+
14
+ def test_should_allow_park
15
+ assert @car.park
16
+ end
17
+
18
+ def test_should_not_allow_ignite
19
+ refute @car.ignite
20
+ end
21
+
22
+ def test_should_allow_idle
23
+ assert @car.idle
24
+ end
25
+
26
+ def test_should_allow_shift_up
27
+ assert @car.shift_up
28
+ end
29
+
30
+ def test_should_not_allow_shift_down
31
+ refute @car.shift_down
32
+ end
33
+
34
+ def test_should_not_allow_crash
35
+ refute @car.crash
36
+ end
37
+
38
+ def test_should_not_allow_repair
39
+ refute @car.repair
40
+ end
41
+
42
+ def test_should_not_allow_reverse
43
+ refute @car.reverse
44
+ end
45
+ end
@@ -0,0 +1,49 @@
1
+ require_relative '../test_helper'
2
+ require_relative '../files/models/car'
3
+
4
+ class CarTest < MiniTest::Test
5
+ def setup
6
+ @car = Car.new
7
+ end
8
+
9
+ def test_should_be_in_parked_state
10
+ assert_equal 'parked', @car.state
11
+ end
12
+
13
+ def test_should_not_have_the_seatbelt_on
14
+ refute @car.seatbelt_on
15
+ end
16
+
17
+ def test_should_not_allow_park
18
+ refute @car.park
19
+ end
20
+
21
+ def test_should_allow_ignite
22
+ assert @car.ignite
23
+ assert_equal 'idling', @car.state
24
+ end
25
+
26
+ def test_should_not_allow_idle
27
+ refute @car.idle
28
+ end
29
+
30
+ def test_should_not_allow_shift_up
31
+ refute @car.shift_up
32
+ end
33
+
34
+ def test_should_not_allow_shift_down
35
+ refute @car.shift_down
36
+ end
37
+
38
+ def test_should_not_allow_crash
39
+ refute @car.crash
40
+ end
41
+
42
+ def test_should_not_allow_repair
43
+ refute @car.repair
44
+ end
45
+
46
+ def test_should_allow_reverse
47
+ assert @car.reverse
48
+ end
49
+ end
@@ -0,0 +1,46 @@
1
+ require_relative '../test_helper'
2
+ require_relative '../files/models/motorcycle'
3
+
4
+ class MotorcycleTest < MiniTest::Test
5
+ def setup
6
+ @motorcycle = Motorcycle.new
7
+ end
8
+
9
+ def test_should_be_in_idling_state
10
+ assert_equal 'idling', @motorcycle.state
11
+ end
12
+
13
+ def test_should_allow_park
14
+ assert @motorcycle.park
15
+ end
16
+
17
+ def test_should_not_allow_ignite
18
+ refute @motorcycle.ignite
19
+ end
20
+
21
+ def test_should_allow_shift_up
22
+ assert @motorcycle.shift_up
23
+ end
24
+
25
+ def test_should_not_allow_shift_down
26
+ refute @motorcycle.shift_down
27
+ end
28
+
29
+ def test_should_not_allow_crash
30
+ refute @motorcycle.crash
31
+ end
32
+
33
+ def test_should_not_allow_repair
34
+ refute @motorcycle.repair
35
+ end
36
+
37
+ def test_should_inherit_decibels_from_superclass
38
+ @motorcycle.park
39
+ assert_equal 0.0, @motorcycle.decibels
40
+ end
41
+
42
+ def test_should_use_decibels_defined_in_state
43
+ @motorcycle.shift_up
44
+ assert_equal 1.0, @motorcycle.decibels
45
+ end
46
+ end
@@ -0,0 +1,17 @@
1
+ require_relative '../test_helper'
2
+ require_relative '../files/models/traffic_light'
3
+
4
+ class TrafficLightCautionTest < MiniTest::Test
5
+ def setup
6
+ @light = TrafficLight.new
7
+ @light.state = 'caution'
8
+ end
9
+
10
+ def test_should_use_caution_color
11
+ assert_equal 'yellow', @light.color
12
+ end
13
+
14
+ def test_should_use_caution_capture_violations
15
+ assert_equal true, @light.capture_violations?
16
+ end
17
+ end