state_machines 0.5.0 → 0.10.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 (464) hide show
  1. checksums.yaml +5 -5
  2. data/LICENSE.txt +1 -1
  3. data/README.md +34 -15
  4. data/lib/state_machines/assertions.rb +2 -0
  5. data/lib/state_machines/branch.rb +85 -81
  6. data/lib/state_machines/callback.rb +24 -21
  7. data/lib/state_machines/core.rb +2 -0
  8. data/lib/state_machines/core_ext/class/state_machine.rb +2 -0
  9. data/lib/state_machines/core_ext.rb +2 -0
  10. data/lib/state_machines/error.rb +2 -0
  11. data/lib/state_machines/eval_helpers.rb +51 -22
  12. data/lib/state_machines/event.rb +35 -30
  13. data/lib/state_machines/event_collection.rb +28 -25
  14. data/lib/state_machines/extensions.rb +3 -1
  15. data/lib/state_machines/helper_module.rb +3 -1
  16. data/lib/state_machines/integrations/base.rb +2 -0
  17. data/lib/state_machines/integrations.rb +10 -8
  18. data/lib/state_machines/machine/class_methods.rb +79 -0
  19. data/lib/state_machines/machine.rb +381 -425
  20. data/lib/state_machines/machine_collection.rb +13 -10
  21. data/lib/state_machines/macro_methods.rb +102 -100
  22. data/lib/state_machines/matcher.rb +26 -23
  23. data/lib/state_machines/matcher_helpers.rb +13 -11
  24. data/lib/state_machines/node_collection.rb +17 -13
  25. data/lib/state_machines/path.rb +58 -55
  26. data/lib/state_machines/path_collection.rb +37 -35
  27. data/lib/state_machines/state.rb +50 -38
  28. data/lib/state_machines/state_collection.rb +22 -19
  29. data/lib/state_machines/state_context.rb +35 -35
  30. data/lib/state_machines/stdio_renderer.rb +74 -0
  31. data/lib/state_machines/transition.rb +182 -178
  32. data/lib/state_machines/transition_collection.rb +172 -168
  33. data/lib/state_machines/version.rb +3 -1
  34. data/lib/state_machines.rb +4 -1
  35. metadata +10 -439
  36. data/.gitignore +0 -21
  37. data/.rspec +0 -3
  38. data/.ruby-gemset +0 -1
  39. data/.ruby-version +0 -1
  40. data/.travis.yml +0 -16
  41. data/Changelog.md +0 -22
  42. data/Contributors.md +0 -39
  43. data/Gemfile +0 -8
  44. data/Rakefile +0 -12
  45. data/Testing.md +0 -0
  46. data/state_machines.gemspec +0 -22
  47. data/test/files/integrations/event_on_failure_integration.rb +0 -10
  48. data/test/files/integrations/vehicle.rb +0 -7
  49. data/test/files/models/auto_shop.rb +0 -31
  50. data/test/files/models/car.rb +0 -21
  51. data/test/files/models/driver.rb +0 -13
  52. data/test/files/models/model_base.rb +0 -6
  53. data/test/files/models/motorcycle.rb +0 -16
  54. data/test/files/models/traffic_light.rb +0 -47
  55. data/test/files/models/vehicle.rb +0 -127
  56. data/test/files/node.rb +0 -5
  57. data/test/files/switch.rb +0 -15
  58. data/test/functional/auto_shop_available_test.rb +0 -20
  59. data/test/functional/auto_shop_busy_test.rb +0 -25
  60. data/test/functional/car_backing_up_test.rb +0 -45
  61. data/test/functional/car_test.rb +0 -49
  62. data/test/functional/driver_default_nonstandard_test.rb +0 -13
  63. data/test/functional/motorcycle_test.rb +0 -52
  64. data/test/functional/traffic_light_caution_test.rb +0 -17
  65. data/test/functional/traffic_light_proceed_test.rb +0 -17
  66. data/test/functional/traffic_light_stop_test.rb +0 -26
  67. data/test/functional/vehicle_first_gear_test.rb +0 -42
  68. data/test/functional/vehicle_idling_test.rb +0 -59
  69. data/test/functional/vehicle_locked_test.rb +0 -29
  70. data/test/functional/vehicle_parked_test.rb +0 -53
  71. data/test/functional/vehicle_repaired_test.rb +0 -20
  72. data/test/functional/vehicle_second_gear_test.rb +0 -42
  73. data/test/functional/vehicle_stalled_test.rb +0 -65
  74. data/test/functional/vehicle_test.rb +0 -20
  75. data/test/functional/vehicle_third_gear_test.rb +0 -42
  76. data/test/functional/vehicle_unsaved_test.rb +0 -181
  77. data/test/functional/vehicle_with_event_attributes_test.rb +0 -30
  78. data/test/functional/vehicle_with_parallel_events_test.rb +0 -36
  79. data/test/test_helper.rb +0 -15
  80. data/test/unit/assertions/assert_exclusive_keys_test.rb +0 -22
  81. data/test/unit/assertions/assert_valid_key_test.rb +0 -12
  82. data/test/unit/branch/branch_test.rb +0 -28
  83. data/test/unit/branch/branch_with_conflicting_conditionals_test.rb +0 -27
  84. data/test/unit/branch/branch_with_conflicting_from_requirements_test.rb +0 -8
  85. data/test/unit/branch/branch_with_conflicting_on_requirements_test.rb +0 -8
  86. data/test/unit/branch/branch_with_conflicting_to_requirements_test.rb +0 -8
  87. data/test/unit/branch/branch_with_different_requirements_test.rb +0 -41
  88. data/test/unit/branch/branch_with_except_from_matcher_requirement_test.rb +0 -8
  89. data/test/unit/branch/branch_with_except_from_requirement_test.rb +0 -36
  90. data/test/unit/branch/branch_with_except_on_matcher_requirement_test.rb +0 -8
  91. data/test/unit/branch/branch_with_except_on_requirement_test.rb +0 -36
  92. data/test/unit/branch/branch_with_except_to_matcher_requirement_test.rb +0 -8
  93. data/test/unit/branch/branch_with_except_to_requirement_test.rb +0 -36
  94. data/test/unit/branch/branch_with_from_matcher_requirement_test.rb +0 -20
  95. data/test/unit/branch/branch_with_from_requirement_test.rb +0 -45
  96. data/test/unit/branch/branch_with_if_conditional_test.rb +0 -27
  97. data/test/unit/branch/branch_with_implicit_and_explicit_requirements_test.rb +0 -23
  98. data/test/unit/branch/branch_with_implicit_from_requirement_matcher_test.rb +0 -20
  99. data/test/unit/branch/branch_with_implicit_requirement_test.rb +0 -20
  100. data/test/unit/branch/branch_with_implicit_to_requirement_matcher_test.rb +0 -16
  101. data/test/unit/branch/branch_with_multiple_except_from_requirements_test.rb +0 -20
  102. data/test/unit/branch/branch_with_multiple_except_on_requirements_test.rb +0 -16
  103. data/test/unit/branch/branch_with_multiple_except_to_requirements_test.rb +0 -20
  104. data/test/unit/branch/branch_with_multiple_from_requirements_test.rb +0 -16
  105. data/test/unit/branch/branch_with_multiple_if_conditionals_test.rb +0 -20
  106. data/test/unit/branch/branch_with_multiple_implicit_requirements_test.rb +0 -53
  107. data/test/unit/branch/branch_with_multiple_to_requirements_test.rb +0 -20
  108. data/test/unit/branch/branch_with_multiple_unless_conditionals_test.rb +0 -20
  109. data/test/unit/branch/branch_with_nil_requirements_test.rb +0 -28
  110. data/test/unit/branch/branch_with_no_requirements_test.rb +0 -36
  111. data/test/unit/branch/branch_with_on_matcher_requirement_test.rb +0 -16
  112. data/test/unit/branch/branch_with_on_requirement_test.rb +0 -45
  113. data/test/unit/branch/branch_with_to_matcher_requirement_test.rb +0 -20
  114. data/test/unit/branch/branch_with_to_requirement_test.rb +0 -45
  115. data/test/unit/branch/branch_with_unless_conditional_test.rb +0 -27
  116. data/test/unit/branch/branch_without_guards_test.rb +0 -27
  117. data/test/unit/callback/callback_by_default_test.rb +0 -25
  118. data/test/unit/callback/callback_test.rb +0 -53
  119. data/test/unit/callback/callback_with_application_bound_object_test.rb +0 -23
  120. data/test/unit/callback/callback_with_application_terminator_test.rb +0 -24
  121. data/test/unit/callback/callback_with_arguments_test.rb +0 -14
  122. data/test/unit/callback/callback_with_around_type_and_arguments_test.rb +0 -25
  123. data/test/unit/callback/callback_with_around_type_and_block_test.rb +0 -44
  124. data/test/unit/callback/callback_with_around_type_and_bound_method_test.rb +0 -23
  125. data/test/unit/callback/callback_with_around_type_and_multiple_methods_test.rb +0 -93
  126. data/test/unit/callback/callback_with_around_type_and_terminator_test.rb +0 -17
  127. data/test/unit/callback/callback_with_block_test.rb +0 -20
  128. data/test/unit/callback/callback_with_bound_method_and_arguments_test.rb +0 -28
  129. data/test/unit/callback/callback_with_bound_method_test.rb +0 -35
  130. data/test/unit/callback/callback_with_do_method_test.rb +0 -18
  131. data/test/unit/callback/callback_with_explicit_requirements_test.rb +0 -32
  132. data/test/unit/callback/callback_with_if_condition_test.rb +0 -17
  133. data/test/unit/callback/callback_with_implicit_requirements_test.rb +0 -32
  134. data/test/unit/callback/callback_with_method_argument_test.rb +0 -18
  135. data/test/unit/callback/callback_with_mixed_methods_test.rb +0 -31
  136. data/test/unit/callback/callback_with_multiple_bound_methods_test.rb +0 -21
  137. data/test/unit/callback/callback_with_multiple_do_methods_test.rb +0 -29
  138. data/test/unit/callback/callback_with_multiple_method_arguments_test.rb +0 -29
  139. data/test/unit/callback/callback_with_terminator_test.rb +0 -22
  140. data/test/unit/callback/callback_with_unbound_method_test.rb +0 -14
  141. data/test/unit/callback/callback_with_unless_condition_test.rb +0 -17
  142. data/test/unit/callback/callback_without_arguments_test.rb +0 -14
  143. data/test/unit/callback/callback_without_terminator_test.rb +0 -12
  144. data/test/unit/error/error_by_default_test.rb +0 -21
  145. data/test/unit/error/error_with_message_test.rb +0 -23
  146. data/test/unit/eval_helper/eval_helpers_base_test.rb +0 -8
  147. data/test/unit/eval_helper/eval_helpers_proc_block_and_explicit_arguments_test.rb +0 -14
  148. data/test/unit/eval_helper/eval_helpers_proc_block_and_implicit_arguments_test.rb +0 -14
  149. data/test/unit/eval_helper/eval_helpers_proc_test.rb +0 -13
  150. data/test/unit/eval_helper/eval_helpers_proc_with_arguments_test.rb +0 -13
  151. data/test/unit/eval_helper/eval_helpers_proc_with_block_test.rb +0 -13
  152. data/test/unit/eval_helper/eval_helpers_proc_with_block_without_arguments_test.rb +0 -18
  153. data/test/unit/eval_helper/eval_helpers_proc_with_block_without_object_test.rb +0 -14
  154. data/test/unit/eval_helper/eval_helpers_proc_without_arguments_test.rb +0 -19
  155. data/test/unit/eval_helper/eval_helpers_string_test.rb +0 -25
  156. data/test/unit/eval_helper/eval_helpers_string_with_block_test.rb +0 -12
  157. data/test/unit/eval_helper/eval_helpers_symbol_method_missing_test.rb +0 -20
  158. data/test/unit/eval_helper/eval_helpers_symbol_private_test.rb +0 -17
  159. data/test/unit/eval_helper/eval_helpers_symbol_protected_test.rb +0 -17
  160. data/test/unit/eval_helper/eval_helpers_symbol_tainted_method_test.rb +0 -18
  161. data/test/unit/eval_helper/eval_helpers_symbol_test.rb +0 -16
  162. data/test/unit/eval_helper/eval_helpers_symbol_with_arguments_and_block_test.rb +0 -16
  163. data/test/unit/eval_helper/eval_helpers_symbol_with_arguments_test.rb +0 -16
  164. data/test/unit/eval_helper/eval_helpers_symbol_with_block_test.rb +0 -16
  165. data/test/unit/eval_helper/eval_helpers_test.rb +0 -13
  166. data/test/unit/event/event_after_being_copied_test.rb +0 -17
  167. data/test/unit/event/event_by_default_test.rb +0 -60
  168. data/test/unit/event/event_context_test.rb +0 -16
  169. data/test/unit/event/event_on_failure_test.rb +0 -44
  170. data/test/unit/event/event_test.rb +0 -34
  171. data/test/unit/event/event_transitions_test.rb +0 -62
  172. data/test/unit/event/event_with_conflicting_helpers_after_definition_test.rb +0 -79
  173. data/test/unit/event/event_with_conflicting_helpers_before_definition_test.rb +0 -58
  174. data/test/unit/event/event_with_conflicting_machine_test.rb +0 -48
  175. data/test/unit/event/event_with_dynamic_human_name_test.rb +0 -26
  176. data/test/unit/event/event_with_human_name_test.rb +0 -13
  177. data/test/unit/event/event_with_invalid_current_state_test.rb +0 -30
  178. data/test/unit/event/event_with_machine_action_test.rb +0 -33
  179. data/test/unit/event/event_with_marshalling_test.rb +0 -47
  180. data/test/unit/event/event_with_matching_disabled_transitions_test.rb +0 -115
  181. data/test/unit/event/event_with_matching_enabled_transitions_test.rb +0 -75
  182. data/test/unit/event/event_with_multiple_transitions_test.rb +0 -61
  183. data/test/unit/event/event_with_namespace_test.rb +0 -34
  184. data/test/unit/event/event_with_transition_with_blacklisted_to_state_test.rb +0 -60
  185. data/test/unit/event/event_with_transition_with_loopback_state_test.rb +0 -36
  186. data/test/unit/event/event_with_transition_with_nil_to_state_test.rb +0 -36
  187. data/test/unit/event/event_with_transition_with_whitelisted_to_state_test.rb +0 -51
  188. data/test/unit/event/event_with_transition_without_to_state_test.rb +0 -36
  189. data/test/unit/event/event_with_transitions_test.rb +0 -32
  190. data/test/unit/event/event_without_matching_transitions_test.rb +0 -41
  191. data/test/unit/event/event_without_transitions_test.rb +0 -28
  192. data/test/unit/event/invalid_event_test.rb +0 -20
  193. data/test/unit/event_collection/event_collection_attribute_with_machine_action_test.rb +0 -62
  194. data/test/unit/event_collection/event_collection_attribute_with_namespaced_machine_test.rb +0 -36
  195. data/test/unit/event_collection/event_collection_by_default_test.rb +0 -26
  196. data/test/unit/event_collection/event_collection_test.rb +0 -39
  197. data/test/unit/event_collection/event_collection_with_custom_machine_attribute_test.rb +0 -31
  198. data/test/unit/event_collection/event_collection_with_events_with_transitions_test.rb +0 -76
  199. data/test/unit/event_collection/event_collection_with_multiple_events_test.rb +0 -27
  200. data/test/unit/event_collection/event_collection_with_validations_test.rb +0 -74
  201. data/test/unit/event_collection/event_collection_without_machine_action_test.rb +0 -18
  202. data/test/unit/event_collection/event_string_collection_test.rb +0 -31
  203. data/test/unit/helper_module_test.rb +0 -17
  204. data/test/unit/integrations/integration_finder_test.rb +0 -16
  205. data/test/unit/integrations/integration_matcher_test.rb +0 -29
  206. data/test/unit/invalid_transition/invalid_parallel_transition_test.rb +0 -18
  207. data/test/unit/invalid_transition/invalid_transition_test.rb +0 -47
  208. data/test/unit/invalid_transition/invalid_transition_with_integration_test.rb +0 -45
  209. data/test/unit/invalid_transition/invalid_transition_with_namespace_test.rb +0 -32
  210. data/test/unit/machine/machine_after_being_copied_test.rb +0 -62
  211. data/test/unit/machine/machine_after_changing_initial_state.rb +0 -28
  212. data/test/unit/machine/machine_after_changing_owner_class_test.rb +0 -31
  213. data/test/unit/machine/machine_by_default_test.rb +0 -160
  214. data/test/unit/machine/machine_finder_custom_options_test.rb +0 -17
  215. data/test/unit/machine/machine_finder_with_existing_machine_on_superclass_test.rb +0 -85
  216. data/test/unit/machine/machine_finder_with_existing_on_same_class_test.rb +0 -23
  217. data/test/unit/machine/machine_finder_without_existing_machine_test.rb +0 -25
  218. data/test/unit/machine/machine_persistence_test.rb +0 -52
  219. data/test/unit/machine/machine_state_initialization_test.rb +0 -56
  220. data/test/unit/machine/machine_test.rb +0 -30
  221. data/test/unit/machine/machine_with_action_already_overridden_test.rb +0 -23
  222. data/test/unit/machine/machine_with_action_defined_in_class_test.rb +0 -37
  223. data/test/unit/machine/machine_with_action_defined_in_included_module_test.rb +0 -46
  224. data/test/unit/machine/machine_with_action_defined_in_superclass_test.rb +0 -43
  225. data/test/unit/machine/machine_with_action_undefined_test.rb +0 -33
  226. data/test/unit/machine/machine_with_cached_state_test.rb +0 -20
  227. data/test/unit/machine/machine_with_class_helpers_test.rb +0 -179
  228. data/test/unit/machine/machine_with_conflicting_helpers_after_definition_test.rb +0 -244
  229. data/test/unit/machine/machine_with_conflicting_helpers_before_definition_test.rb +0 -175
  230. data/test/unit/machine/machine_with_custom_action_test.rb +0 -11
  231. data/test/unit/machine/machine_with_custom_attribute_test.rb +0 -103
  232. data/test/unit/machine/machine_with_custom_initialize_test.rb +0 -24
  233. data/test/unit/machine/machine_with_custom_integration_test.rb +0 -72
  234. data/test/unit/machine/machine_with_custom_invalidation_test.rb +0 -39
  235. data/test/unit/machine/machine_with_custom_name_test.rb +0 -57
  236. data/test/unit/machine/machine_with_custom_plural_test.rb +0 -52
  237. data/test/unit/machine/machine_with_dynamic_initial_state_test.rb +0 -65
  238. data/test/unit/machine/machine_with_event_matchers_test.rb +0 -41
  239. data/test/unit/machine/machine_with_events_test.rb +0 -52
  240. data/test/unit/machine/machine_with_events_with_custom_human_names_test.rb +0 -18
  241. data/test/unit/machine/machine_with_events_with_transitions_test.rb +0 -37
  242. data/test/unit/machine/machine_with_existing_event_test.rb +0 -17
  243. data/test/unit/machine/machine_with_existing_machines_on_owner_class_test.rb +0 -20
  244. data/test/unit/machine/machine_with_existing_machines_with_same_attributes_on_owner_class_test.rb +0 -71
  245. data/test/unit/machine/machine_with_existing_machines_with_same_attributes_on_owner_subclass_test.rb +0 -31
  246. data/test/unit/machine/machine_with_existing_state_test.rb +0 -27
  247. data/test/unit/machine/machine_with_failure_callbacks_test.rb +0 -48
  248. data/test/unit/machine/machine_with_helpers_test.rb +0 -14
  249. data/test/unit/machine/machine_with_initial_state_with_value_and_owner_default.rb +0 -25
  250. data/test/unit/machine/machine_with_initialize_and_super_test.rb +0 -17
  251. data/test/unit/machine/machine_with_initialize_arguments_and_block_test.rb +0 -31
  252. data/test/unit/machine/machine_with_initialize_without_super_test.rb +0 -17
  253. data/test/unit/machine/machine_with_instance_helpers_test.rb +0 -179
  254. data/test/unit/machine/machine_with_integration_test.rb +0 -72
  255. data/test/unit/machine/machine_with_multiple_events_test.rb +0 -32
  256. data/test/unit/machine/machine_with_namespace_test.rb +0 -48
  257. data/test/unit/machine/machine_with_nil_action_test.rb +0 -27
  258. data/test/unit/machine/machine_with_other_states.rb +0 -22
  259. data/test/unit/machine/machine_with_owner_subclass_test.rb +0 -18
  260. data/test/unit/machine/machine_with_paths_test.rb +0 -25
  261. data/test/unit/machine/machine_with_private_action_test.rb +0 -43
  262. data/test/unit/machine/machine_with_state_matchers_test.rb +0 -41
  263. data/test/unit/machine/machine_with_state_with_matchers_test.rb +0 -19
  264. data/test/unit/machine/machine_with_states_test.rb +0 -55
  265. data/test/unit/machine/machine_with_states_with_behaviors_test.rb +0 -23
  266. data/test/unit/machine/machine_with_states_with_custom_human_names_test.rb +0 -18
  267. data/test/unit/machine/machine_with_states_with_custom_values_test.rb +0 -21
  268. data/test/unit/machine/machine_with_states_with_runtime_dependencies_test.rb +0 -19
  269. data/test/unit/machine/machine_with_static_initial_state_test.rb +0 -49
  270. data/test/unit/machine/machine_with_superclass_conflicting_helpers_after_definition_test.rb +0 -36
  271. data/test/unit/machine/machine_with_transition_callbacks_test.rb +0 -144
  272. data/test/unit/machine/machine_with_transitions_test.rb +0 -87
  273. data/test/unit/machine/machine_without_initialization_test.rb +0 -31
  274. data/test/unit/machine/machine_without_initialize_test.rb +0 -14
  275. data/test/unit/machine/machine_without_integration_test.rb +0 -31
  276. data/test/unit/machine_collection/machine_collection_by_default_test.rb +0 -11
  277. data/test/unit/machine_collection/machine_collection_fire_test.rb +0 -80
  278. data/test/unit/machine_collection/machine_collection_fire_with_transactions_test.rb +0 -54
  279. data/test/unit/machine_collection/machine_collection_fire_with_validations_test.rb +0 -76
  280. data/test/unit/machine_collection/machine_collection_state_initialization_test.rb +0 -111
  281. data/test/unit/machine_collection/machine_collection_transitions_with_blank_events_test.rb +0 -25
  282. data/test/unit/machine_collection/machine_collection_transitions_with_custom_options_test.rb +0 -20
  283. data/test/unit/machine_collection/machine_collection_transitions_with_different_actions_test.rb +0 -26
  284. data/test/unit/machine_collection/machine_collection_transitions_with_exisiting_transitions_test.rb +0 -25
  285. data/test/unit/machine_collection/machine_collection_transitions_with_invalid_events_test.rb +0 -25
  286. data/test/unit/machine_collection/machine_collection_transitions_with_same_actions_test.rb +0 -31
  287. data/test/unit/machine_collection/machine_collection_transitions_with_transition_test.rb +0 -26
  288. data/test/unit/machine_collection/machine_collection_transitions_without_events_test.rb +0 -25
  289. data/test/unit/machine_collection/machine_collection_transitions_without_transition_test.rb +0 -27
  290. data/test/unit/matcher/all_matcher_test.rb +0 -29
  291. data/test/unit/matcher/blacklist_matcher_test.rb +0 -30
  292. data/test/unit/matcher/loopback_matcher_test.rb +0 -27
  293. data/test/unit/matcher/matcher_by_default_test.rb +0 -15
  294. data/test/unit/matcher/matcher_with_multiple_values_test.rb +0 -15
  295. data/test/unit/matcher/matcher_with_value_test.rb +0 -15
  296. data/test/unit/matcher/whitelist_matcher_test.rb +0 -30
  297. data/test/unit/matcher_helpers/matcher_helpers_all_test.rb +0 -14
  298. data/test/unit/matcher_helpers/matcher_helpers_any_test.rb +0 -14
  299. data/test/unit/matcher_helpers/matcher_helpers_same_test.rb +0 -13
  300. data/test/unit/node_collection/node_collection_after_being_copied_test.rb +0 -46
  301. data/test/unit/node_collection/node_collection_after_update_test.rb +0 -36
  302. data/test/unit/node_collection/node_collection_by_default_test.rb +0 -22
  303. data/test/unit/node_collection/node_collection_test.rb +0 -23
  304. data/test/unit/node_collection/node_collection_with_indices_test.rb +0 -42
  305. data/test/unit/node_collection/node_collection_with_matcher_contexts_test.rb +0 -25
  306. data/test/unit/node_collection/node_collection_with_nodes_test.rb +0 -46
  307. data/test/unit/node_collection/node_collection_with_numeric_index_test.rb +0 -24
  308. data/test/unit/node_collection/node_collection_with_postdefined_contexts_test.rb +0 -22
  309. data/test/unit/node_collection/node_collection_with_predefined_contexts_test.rb +0 -23
  310. data/test/unit/node_collection/node_collection_with_string_index_test.rb +0 -20
  311. data/test/unit/node_collection/node_collection_with_symbol_index_test.rb +0 -20
  312. data/test/unit/node_collection/node_collection_without_indices_test.rb +0 -30
  313. data/test/unit/path/path_by_default_test.rb +0 -54
  314. data/test/unit/path/path_test.rb +0 -14
  315. data/test/unit/path/path_with_available_transitions_after_reaching_target_test.rb +0 -40
  316. data/test/unit/path/path_with_available_transitions_test.rb +0 -54
  317. data/test/unit/path/path_with_deep_target_reached_test.rb +0 -50
  318. data/test/unit/path/path_with_deep_target_test.rb +0 -40
  319. data/test/unit/path/path_with_duplicates_test.rb +0 -32
  320. data/test/unit/path/path_with_encountered_transitions_test.rb +0 -34
  321. data/test/unit/path/path_with_guarded_transitions_test.rb +0 -42
  322. data/test/unit/path/path_with_reached_target_test.rb +0 -35
  323. data/test/unit/path/path_with_transitions_test.rb +0 -54
  324. data/test/unit/path/path_with_unreached_target_test.rb +0 -31
  325. data/test/unit/path/path_without_transitions_test.rb +0 -24
  326. data/test/unit/path_collection/path_collection_by_default_test.rb +0 -46
  327. data/test/unit/path_collection/path_collection_test.rb +0 -24
  328. data/test/unit/path_collection/path_collection_with_deep_paths_test.rb +0 -43
  329. data/test/unit/path_collection/path_collection_with_duplicate_nodes_test.rb +0 -31
  330. data/test/unit/path_collection/path_collection_with_from_state_test.rb +0 -27
  331. data/test/unit/path_collection/path_collection_with_paths_test.rb +0 -47
  332. data/test/unit/path_collection/path_collection_with_to_state_test.rb +0 -29
  333. data/test/unit/path_collection/path_with_guarded_paths_test.rb +0 -25
  334. data/test/unit/state/state_after_being_copied_test.rb +0 -19
  335. data/test/unit/state/state_by_default_test.rb +0 -41
  336. data/test/unit/state/state_final_test.rb +0 -28
  337. data/test/unit/state/state_initial_test.rb +0 -13
  338. data/test/unit/state/state_not_final_test.rb +0 -32
  339. data/test/unit/state/state_not_initial_test.rb +0 -13
  340. data/test/unit/state/state_test.rb +0 -44
  341. data/test/unit/state/state_with_cached_lambda_value_test.rb +0 -29
  342. data/test/unit/state/state_with_conflicting_helpers_after_definition_test.rb +0 -38
  343. data/test/unit/state/state_with_conflicting_helpers_before_definition_test.rb +0 -29
  344. data/test/unit/state/state_with_conflicting_machine_name_test.rb +0 -20
  345. data/test/unit/state/state_with_conflicting_machine_test.rb +0 -37
  346. data/test/unit/state/state_with_context_test.rb +0 -60
  347. data/test/unit/state/state_with_dynamic_human_name_test.rb +0 -25
  348. data/test/unit/state/state_with_existing_context_method_test.rb +0 -24
  349. data/test/unit/state/state_with_human_name_test.rb +0 -13
  350. data/test/unit/state/state_with_integer_value_test.rb +0 -32
  351. data/test/unit/state/state_with_invalid_method_call_test.rb +0 -21
  352. data/test/unit/state/state_with_lambda_value_test.rb +0 -37
  353. data/test/unit/state/state_with_matcher_test.rb +0 -18
  354. data/test/unit/state/state_with_multiple_contexts_test.rb +0 -57
  355. data/test/unit/state/state_with_name_test.rb +0 -43
  356. data/test/unit/state/state_with_namespace_test.rb +0 -22
  357. data/test/unit/state/state_with_nil_value_test.rb +0 -35
  358. data/test/unit/state/state_with_redefined_context_method_test.rb +0 -45
  359. data/test/unit/state/state_with_symbolic_value_test.rb +0 -32
  360. data/test/unit/state/state_with_valid_inherited_method_call_for_current_state_test.rb +0 -40
  361. data/test/unit/state/state_with_valid_method_call_for_current_state_test.rb +0 -33
  362. data/test/unit/state/state_with_valid_method_call_for_different_state_test.rb +0 -41
  363. data/test/unit/state/state_without_cached_lambda_value_test.rb +0 -25
  364. data/test/unit/state/state_without_name_test.rb +0 -39
  365. data/test/unit/state_collection/state_collection_by_default_test.rb +0 -21
  366. data/test/unit/state_collection/state_collection_string_test.rb +0 -35
  367. data/test/unit/state_collection/state_collection_test.rb +0 -74
  368. data/test/unit/state_collection/state_collection_with_custom_state_values_test.rb +0 -29
  369. data/test/unit/state_collection/state_collection_with_event_transitions_test.rb +0 -39
  370. data/test/unit/state_collection/state_collection_with_initial_state_test.rb +0 -40
  371. data/test/unit/state_collection/state_collection_with_namespace_test.rb +0 -21
  372. data/test/unit/state_collection/state_collection_with_state_behaviors_test.rb +0 -40
  373. data/test/unit/state_collection/state_collection_with_state_matchers_test.rb +0 -29
  374. data/test/unit/state_collection/state_collection_with_transition_callbacks_test.rb +0 -40
  375. data/test/unit/state_context/state_context_proxy_test.rb +0 -26
  376. data/test/unit/state_context/state_context_proxy_with_if_and_unless_conditions_test.rb +0 -42
  377. data/test/unit/state_context/state_context_proxy_with_if_condition_test.rb +0 -64
  378. data/test/unit/state_context/state_context_proxy_with_multiple_if_conditions_test.rb +0 -32
  379. data/test/unit/state_context/state_context_proxy_with_multiple_unless_conditions_test.rb +0 -32
  380. data/test/unit/state_context/state_context_proxy_with_unless_condition_test.rb +0 -64
  381. data/test/unit/state_context/state_context_proxy_without_conditions_test.rb +0 -31
  382. data/test/unit/state_context/state_context_test.rb +0 -28
  383. data/test/unit/state_context/state_context_transition_test.rb +0 -104
  384. data/test/unit/state_context/state_context_with_matching_transition_test.rb +0 -27
  385. data/test/unit/state_machine/state_machine_by_default_test.rb +0 -12
  386. data/test/unit/state_machine/state_machine_test.rb +0 -20
  387. data/test/unit/transition/transition_after_being_performed_test.rb +0 -48
  388. data/test/unit/transition/transition_after_being_persisted_test.rb +0 -46
  389. data/test/unit/transition/transition_after_being_rolled_back_test.rb +0 -35
  390. data/test/unit/transition/transition_equality_test.rb +0 -52
  391. data/test/unit/transition/transition_loopback_test.rb +0 -18
  392. data/test/unit/transition/transition_test.rb +0 -96
  393. data/test/unit/transition/transition_transient_test.rb +0 -20
  394. data/test/unit/transition/transition_with_action_test.rb +0 -27
  395. data/test/unit/transition/transition_with_after_callbacks_skipped_test.rb +0 -127
  396. data/test/unit/transition/transition_with_after_callbacks_test.rb +0 -93
  397. data/test/unit/transition/transition_with_around_callbacks_test.rb +0 -141
  398. data/test/unit/transition/transition_with_before_callbacks_skipped_test.rb +0 -30
  399. data/test/unit/transition/transition_with_before_callbacks_test.rb +0 -104
  400. data/test/unit/transition/transition_with_custom_machine_attribute_test.rb +0 -28
  401. data/test/unit/transition/transition_with_different_states_test.rb +0 -18
  402. data/test/unit/transition/transition_with_dynamic_to_value_test.rb +0 -19
  403. data/test/unit/transition/transition_with_failure_callbacks_test.rb +0 -84
  404. data/test/unit/transition/transition_with_invalid_nodes_test.rb +0 -29
  405. data/test/unit/transition/transition_with_mixed_callbacks_test.rb +0 -105
  406. data/test/unit/transition/transition_with_multiple_after_callbacks_test.rb +0 -40
  407. data/test/unit/transition/transition_with_multiple_around_callbacks_test.rb +0 -114
  408. data/test/unit/transition/transition_with_multiple_before_callbacks_test.rb +0 -40
  409. data/test/unit/transition/transition_with_multiple_failure_callbacks_test.rb +0 -40
  410. data/test/unit/transition/transition_with_namespace_test.rb +0 -47
  411. data/test/unit/transition/transition_with_perform_arguments_test.rb +0 -35
  412. data/test/unit/transition/transition_with_transactions_test.rb +0 -42
  413. data/test/unit/transition/transition_without_callbacks_test.rb +0 -33
  414. data/test/unit/transition/transition_without_reading_state_test.rb +0 -22
  415. data/test/unit/transition/transition_without_running_action_test.rb +0 -47
  416. data/test/unit/transition_collection/attribute_transition_collection_by_default_test.rb +0 -23
  417. data/test/unit/transition_collection/attribute_transition_collection_marshalling_test.rb +0 -64
  418. data/test/unit/transition_collection/attribute_transition_collection_with_action_error_test.rb +0 -44
  419. data/test/unit/transition_collection/attribute_transition_collection_with_action_failed_test.rb +0 -44
  420. data/test/unit/transition_collection/attribute_transition_collection_with_after_callback_error_test.rb +0 -32
  421. data/test/unit/transition_collection/attribute_transition_collection_with_after_callback_halt_test.rb +0 -33
  422. data/test/unit/transition_collection/attribute_transition_collection_with_around_after_yield_callback_error_test.rb +0 -32
  423. data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_after_yield_error_test.rb +0 -32
  424. data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_after_yield_halt_test.rb +0 -33
  425. data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_before_yield_halt_test.rb +0 -33
  426. data/test/unit/transition_collection/attribute_transition_collection_with_before_callback_error_test.rb +0 -32
  427. data/test/unit/transition_collection/attribute_transition_collection_with_before_callback_halt_test.rb +0 -33
  428. data/test/unit/transition_collection/attribute_transition_collection_with_callbacks_test.rb +0 -68
  429. data/test/unit/transition_collection/attribute_transition_collection_with_event_transitions_test.rb +0 -41
  430. data/test/unit/transition_collection/attribute_transition_collection_with_events_test.rb +0 -44
  431. data/test/unit/transition_collection/attribute_transition_collection_with_skipped_after_callbacks_test.rb +0 -42
  432. data/test/unit/transition_collection/transition_collection_by_default_test.rb +0 -23
  433. data/test/unit/transition_collection/transition_collection_empty_with_block_test.rb +0 -23
  434. data/test/unit/transition_collection/transition_collection_empty_without_block_test.rb +0 -12
  435. data/test/unit/transition_collection/transition_collection_invalid_test.rb +0 -21
  436. data/test/unit/transition_collection/transition_collection_partial_invalid_test.rb +0 -69
  437. data/test/unit/transition_collection/transition_collection_test.rb +0 -26
  438. data/test/unit/transition_collection/transition_collection_valid_test.rb +0 -57
  439. data/test/unit/transition_collection/transition_collection_with_action_error_test.rb +0 -66
  440. data/test/unit/transition_collection/transition_collection_with_action_failed_test.rb +0 -60
  441. data/test/unit/transition_collection/transition_collection_with_action_hook_and_block_test.rb +0 -17
  442. data/test/unit/transition_collection/transition_collection_with_action_hook_and_skipped_action_test.rb +0 -17
  443. data/test/unit/transition_collection/transition_collection_with_action_hook_and_skipped_after_callbacks_test.rb +0 -37
  444. data/test/unit/transition_collection/transition_collection_with_action_hook_base_test.rb +0 -34
  445. data/test/unit/transition_collection/transition_collection_with_action_hook_error_test.rb +0 -29
  446. data/test/unit/transition_collection/transition_collection_with_action_hook_invalid_test.rb +0 -17
  447. data/test/unit/transition_collection/transition_collection_with_action_hook_multiple_test.rb +0 -79
  448. data/test/unit/transition_collection/transition_collection_with_action_hook_test.rb +0 -45
  449. data/test/unit/transition_collection/transition_collection_with_action_hook_with_different_actions_test.rb +0 -48
  450. data/test/unit/transition_collection/transition_collection_with_action_hook_with_nil_action_test.rb +0 -42
  451. data/test/unit/transition_collection/transition_collection_with_after_callback_halt_test.rb +0 -47
  452. data/test/unit/transition_collection/transition_collection_with_before_callback_halt_test.rb +0 -51
  453. data/test/unit/transition_collection/transition_collection_with_block_test.rb +0 -46
  454. data/test/unit/transition_collection/transition_collection_with_callbacks_test.rb +0 -135
  455. data/test/unit/transition_collection/transition_collection_with_different_actions_test.rb +0 -189
  456. data/test/unit/transition_collection/transition_collection_with_duplicate_actions_test.rb +0 -48
  457. data/test/unit/transition_collection/transition_collection_with_empty_actions_test.rb +0 -41
  458. data/test/unit/transition_collection/transition_collection_with_mixed_actions_test.rb +0 -41
  459. data/test/unit/transition_collection/transition_collection_with_skipped_actions_and_block_test.rb +0 -34
  460. data/test/unit/transition_collection/transition_collection_with_skipped_actions_test.rb +0 -69
  461. data/test/unit/transition_collection/transition_collection_with_skipped_after_callbacks_and_around_callbacks_test.rb +0 -53
  462. data/test/unit/transition_collection/transition_collection_with_skipped_after_callbacks_test.rb +0 -34
  463. data/test/unit/transition_collection/transition_collection_with_transactions_test.rb +0 -65
  464. data/test/unit/transition_collection/transition_collection_without_transactions_test.rb +0 -29
@@ -1,55 +0,0 @@
1
- require_relative '../../test_helper'
2
-
3
- class MachineWithStatesTest < StateMachinesTest
4
- def setup
5
- @klass = Class.new
6
- @machine = StateMachines::Machine.new(@klass)
7
- @parked, @idling = @machine.state :parked, :idling
8
-
9
- @object = @klass.new
10
- end
11
-
12
- def test_should_have_states
13
- assert_equal [nil, :parked, :idling], @machine.states.map { |state| state.name }
14
- end
15
-
16
- def test_should_allow_state_lookup_by_name
17
- assert_equal @parked, @machine.states[:parked]
18
- end
19
-
20
- def test_should_allow_state_lookup_by_value
21
- assert_equal @parked, @machine.states['parked', :value]
22
- end
23
-
24
- def test_should_allow_human_state_name_lookup
25
- assert_equal 'parked', @klass.human_state_name(:parked)
26
- end
27
-
28
- def test_should_raise_exception_on_invalid_human_state_name_lookup
29
- exception = assert_raises(IndexError) { @klass.human_state_name(:invalid) }
30
- assert_equal ':invalid is an invalid name', exception.message
31
- end
32
-
33
- def test_should_use_stringified_name_for_value
34
- assert_equal 'parked', @parked.value
35
- end
36
-
37
- def test_should_not_use_custom_matcher
38
- assert_nil @parked.matcher
39
- end
40
-
41
- def test_should_raise_exception_if_invalid_option_specified
42
- exception = assert_raises(ArgumentError) { @machine.state(:first_gear, invalid: true) }
43
- assert_equal 'Unknown key: :invalid. Valid keys are: :value, :cache, :if, :human_name', exception.message
44
- end
45
-
46
- def test_should_raise_exception_if_conflicting_type_used_for_name
47
- exception = assert_raises(ArgumentError) { @machine.state 'first_gear' }
48
- assert_equal '"first_gear" state defined as String, :parked defined as Symbol; all states must be consistent', exception.message
49
- end
50
-
51
- def test_should_not_raise_exception_if_conflicting_type_is_nil_for_name
52
- @machine.state nil
53
- end
54
- end
55
-
@@ -1,23 +0,0 @@
1
- require_relative '../../test_helper'
2
-
3
- class MachineWithStatesWithBehaviorsTest < StateMachinesTest
4
- def setup
5
- @klass = Class.new
6
- @machine = StateMachines::Machine.new(@klass)
7
-
8
- @parked, @idling = @machine.state :parked, :idling do
9
- def speed
10
- 0
11
- end
12
- end
13
- end
14
-
15
- def test_should_define_behaviors_for_each_state
16
- refute_nil @parked.context_methods[:speed]
17
- refute_nil @idling.context_methods[:speed]
18
- end
19
-
20
- def test_should_define_different_behaviors_for_each_state
21
- refute_equal @parked.context_methods[:speed], @idling.context_methods[:speed]
22
- end
23
- end
@@ -1,18 +0,0 @@
1
- require_relative '../../test_helper'
2
-
3
- class MachineWithStatesWithCustomHumanNamesTest < StateMachinesTest
4
- def setup
5
- @klass = Class.new
6
- @machine = StateMachines::Machine.new(@klass)
7
- @state = @machine.state :parked, human_name: 'stopped'
8
- end
9
-
10
- def test_should_use_custom_human_name
11
- assert_equal 'stopped', @state.human_name
12
- end
13
-
14
- def test_should_allow_human_state_name_lookup
15
- assert_equal 'stopped', @klass.human_state_name(:parked)
16
- end
17
- end
18
-
@@ -1,21 +0,0 @@
1
- require_relative '../../test_helper'
2
-
3
- class MachineWithStatesWithCustomValuesTest < StateMachinesTest
4
- def setup
5
- @klass = Class.new
6
- @machine = StateMachines::Machine.new(@klass)
7
- @state = @machine.state :parked, value: 1
8
-
9
- @object = @klass.new
10
- @object.state = 1
11
- end
12
-
13
- def test_should_use_custom_value
14
- assert_equal 1, @state.value
15
- end
16
-
17
- def test_should_allow_lookup_by_custom_value
18
- assert_equal @state, @machine.states[1, :value]
19
- end
20
- end
21
-
@@ -1,19 +0,0 @@
1
- require_relative '../../test_helper'
2
-
3
- class MachineWithStatesWithRuntimeDependenciesTest < StateMachinesTest
4
- def setup
5
- @klass = Class.new
6
- @machine = StateMachines::Machine.new(@klass)
7
- @machine.state :parked
8
- end
9
-
10
- def test_should_not_evaluate_value_during_definition
11
- @machine.state :parked, value: -> { fail ArgumentError }
12
- end
13
-
14
- def test_should_not_evaluate_if_not_initial_state
15
- @machine.state :parked, value: -> { fail ArgumentError }
16
- @klass.new
17
- end
18
- end
19
-
@@ -1,49 +0,0 @@
1
- require_relative '../../test_helper'
2
-
3
- class MachineWithStaticInitialStateTest < StateMachinesTest
4
- def setup
5
- @klass = Class.new
6
- @machine = StateMachines::Machine.new(@klass, initial: :parked)
7
- end
8
-
9
- def test_should_not_have_dynamic_initial_state
10
- refute @machine.dynamic_initial_state?
11
- end
12
-
13
- def test_should_have_an_initial_state
14
- object = @klass.new
15
- assert_equal 'parked', @machine.initial_state(object).value
16
- end
17
-
18
- def test_should_write_to_attribute_when_initializing_state
19
- object = @klass.allocate
20
- @machine.initialize_state(object)
21
- assert_equal 'parked', object.state
22
- end
23
-
24
- def test_should_set_initial_on_state_object
25
- assert @machine.state(:parked).initial
26
- end
27
-
28
- def test_should_set_initial_state_on_created_object
29
- assert_equal 'parked', @klass.new.state
30
- end
31
-
32
- def test_should_not_initial_state_prior_to_initialization
33
- base = Class.new do
34
- attr_accessor :state_on_init
35
-
36
- def initialize
37
- self.state_on_init = state
38
- end
39
- end
40
- klass = Class.new(base)
41
- StateMachines::Machine.new(klass, initial: :parked)
42
-
43
- assert_nil klass.new.state_on_init
44
- end
45
-
46
- def test_should_be_included_in_known_states
47
- assert_equal [:parked], @machine.states.keys
48
- end
49
- end
@@ -1,36 +0,0 @@
1
- require_relative '../../test_helper'
2
- require 'stringio'
3
-
4
- class MachineWithSuperclassConflictingHelpersAfterDefinitionTest < StateMachinesTest
5
- def setup
6
- @original_stderr, $stderr = $stderr, StringIO.new
7
-
8
- @superclass = Class.new
9
- @klass = Class.new(@superclass)
10
-
11
- @machine = StateMachines::Machine.new(@klass)
12
- @machine.state :parked, :idling
13
- @machine.event :ignite
14
-
15
- @superclass.class_eval do
16
- def state?
17
- true
18
- end
19
- end
20
-
21
- @object = @klass.new
22
- end
23
-
24
- def test_should_call_superclass_attribute_predicate_without_arguments
25
- assert @object.state?
26
- end
27
-
28
- def test_should_define_attribute_predicate_with_arguments
29
- refute @object.state?(:parked)
30
- end
31
-
32
- def teardown
33
- $stderr = @original_stderr
34
- end
35
- end
36
-
@@ -1,144 +0,0 @@
1
- require_relative '../../test_helper'
2
-
3
- class MachineWithTransitionCallbacksTest < StateMachinesTest
4
- def setup
5
- @klass = Class.new do
6
- attr_accessor :callbacks
7
- end
8
-
9
- @machine = StateMachines::Machine.new(@klass, initial: :parked)
10
- @event = @machine.event :ignite do
11
- transition parked: :idling
12
- end
13
-
14
- @object = @klass.new
15
- @object.callbacks = []
16
- end
17
-
18
- def test_should_not_raise_exception_if_implicit_option_specified
19
- @machine.before_transition invalid: :valid, do: -> {}
20
- end
21
-
22
- def test_should_raise_exception_if_method_not_specified
23
- exception = assert_raises(ArgumentError) { @machine.before_transition to: :idling }
24
- assert_equal 'Method(s) for callback must be specified', exception.message
25
- end
26
-
27
- def test_should_invoke_callbacks_during_transition
28
- @machine.before_transition lambda { |object| object.callbacks << 'before' }
29
- @machine.after_transition lambda { |object| object.callbacks << 'after' }
30
- @machine.around_transition lambda { |object, _transition, block| object.callbacks << 'before_around'; block.call; object.callbacks << 'after_around' }
31
-
32
- @event.fire(@object)
33
- assert_equal %w(before before_around after_around after), @object.callbacks
34
- end
35
-
36
- def test_should_allow_multiple_callbacks
37
- @machine.before_transition lambda { |object| object.callbacks << 'before1' }, lambda { |object| object.callbacks << 'before2' }
38
- @machine.after_transition lambda { |object| object.callbacks << 'after1' }, lambda { |object| object.callbacks << 'after2' }
39
- @machine.around_transition(
40
- lambda { |object, _transition, block| object.callbacks << 'before_around1'; block.call; object.callbacks << 'after_around1' },
41
- lambda { |object, _transition, block| object.callbacks << 'before_around2'; block.call; object.callbacks << 'after_around2' }
42
- )
43
-
44
- @event.fire(@object)
45
- assert_equal %w(before1 before2 before_around1 before_around2 after_around2 after_around1 after1 after2), @object.callbacks
46
- end
47
-
48
- def test_should_allow_multiple_callbacks_with_requirements
49
- @machine.before_transition lambda { |object| object.callbacks << 'before_parked1' }, lambda { |object| object.callbacks << 'before_parked2' }, from: :parked
50
- @machine.before_transition lambda { |object| object.callbacks << 'before_idling1' }, lambda { |object| object.callbacks << 'before_idling2' }, from: :idling
51
- @machine.after_transition lambda { |object| object.callbacks << 'after_parked1' }, lambda { |object| object.callbacks << 'after_parked2' }, from: :parked
52
- @machine.after_transition lambda { |object| object.callbacks << 'after_idling1' }, lambda { |object| object.callbacks << 'after_idling2' }, from: :idling
53
- @machine.around_transition(
54
- lambda { |object, _transition, block| object.callbacks << 'before_around_parked1'; block.call; object.callbacks << 'after_around_parked1' },
55
- lambda { |object, _transition, block| object.callbacks << 'before_around_parked2'; block.call; object.callbacks << 'after_around_parked2' },
56
- from: :parked
57
- )
58
- @machine.around_transition(
59
- lambda { |object, _transition, block| object.callbacks << 'before_around_idling1'; block.call; object.callbacks << 'after_around_idling1' },
60
- lambda { |object, _transition, block| object.callbacks << 'before_around_idling2'; block.call; object.callbacks << 'after_around_idling2' },
61
- from: :idling
62
- )
63
-
64
- @event.fire(@object)
65
- assert_equal %w(before_parked1 before_parked2 before_around_parked1 before_around_parked2 after_around_parked2 after_around_parked1 after_parked1 after_parked2), @object.callbacks
66
- end
67
-
68
- def test_should_support_from_requirement
69
- @machine.before_transition from: :parked, do: lambda { |object| object.callbacks << :parked }
70
- @machine.before_transition from: :idling, do: lambda { |object| object.callbacks << :idling }
71
-
72
- @event.fire(@object)
73
- assert_equal [:parked], @object.callbacks
74
- end
75
-
76
- def test_should_support_except_from_requirement
77
- @machine.before_transition except_from: :parked, do: lambda { |object| object.callbacks << :parked }
78
- @machine.before_transition except_from: :idling, do: lambda { |object| object.callbacks << :idling }
79
-
80
- @event.fire(@object)
81
- assert_equal [:idling], @object.callbacks
82
- end
83
-
84
- def test_should_support_to_requirement
85
- @machine.before_transition to: :parked, do: lambda { |object| object.callbacks << :parked }
86
- @machine.before_transition to: :idling, do: lambda { |object| object.callbacks << :idling }
87
-
88
- @event.fire(@object)
89
- assert_equal [:idling], @object.callbacks
90
- end
91
-
92
- def test_should_support_except_to_requirement
93
- @machine.before_transition except_to: :parked, do: lambda { |object| object.callbacks << :parked }
94
- @machine.before_transition except_to: :idling, do: lambda { |object| object.callbacks << :idling }
95
-
96
- @event.fire(@object)
97
- assert_equal [:parked], @object.callbacks
98
- end
99
-
100
- def test_should_support_on_requirement
101
- @machine.before_transition on: :park, do: lambda { |object| object.callbacks << :park }
102
- @machine.before_transition on: :ignite, do: lambda { |object| object.callbacks << :ignite }
103
-
104
- @event.fire(@object)
105
- assert_equal [:ignite], @object.callbacks
106
- end
107
-
108
- def test_should_support_except_on_requirement
109
- @machine.before_transition except_on: :park, do: lambda { |object| object.callbacks << :park }
110
- @machine.before_transition except_on: :ignite, do: lambda { |object| object.callbacks << :ignite }
111
-
112
- @event.fire(@object)
113
- assert_equal [:park], @object.callbacks
114
- end
115
-
116
- def test_should_support_implicit_requirement
117
- @machine.before_transition parked: :idling, do: lambda { |object| object.callbacks << :parked }
118
- @machine.before_transition idling: :parked, do: lambda { |object| object.callbacks << :idling }
119
-
120
- @event.fire(@object)
121
- assert_equal [:parked], @object.callbacks
122
- end
123
-
124
- def test_should_track_states_defined_in_transition_callbacks
125
- @machine.before_transition parked: :idling, do: lambda {}
126
- @machine.after_transition first_gear: :second_gear, do: lambda {}
127
- @machine.around_transition third_gear: :fourth_gear, do: lambda {}
128
-
129
- assert_equal [:parked, :idling, :first_gear, :second_gear, :third_gear, :fourth_gear], @machine.states.map { |state| state.name }
130
- end
131
-
132
- def test_should_not_duplicate_states_defined_in_multiple_event_transitions
133
- @machine.before_transition parked: :idling, do: lambda {}
134
- @machine.after_transition first_gear: :second_gear, do: lambda {}
135
- @machine.after_transition parked: :idling, do: lambda {}
136
- @machine.around_transition parked: :idling, do: lambda {}
137
-
138
- assert_equal [:parked, :idling, :first_gear, :second_gear], @machine.states.map { |state| state.name }
139
- end
140
-
141
- def test_should_define_predicates_for_each_state
142
- [:parked?, :idling?].each { |predicate| assert @object.respond_to?(predicate) }
143
- end
144
- end
@@ -1,87 +0,0 @@
1
- require_relative '../../test_helper'
2
-
3
- class MachineWithTransitionsTest < StateMachinesTest
4
- def setup
5
- @klass = Class.new
6
- @machine = StateMachines::Machine.new(@klass, initial: :parked)
7
- end
8
-
9
- def test_should_require_on_event
10
- exception = assert_raises(ArgumentError) { @machine.transition(parked: :idling) }
11
- assert_equal 'Must specify :on event', exception.message
12
- end
13
-
14
- def test_should_not_allow_except_on_option
15
- exception = assert_raises(ArgumentError) { @machine.transition(except_on: :ignite, on: :ignite) }
16
- assert_equal 'Unknown key: :except_on. Valid keys are: :from, :to, :except_from, :except_to, :if, :unless', exception.message
17
- end
18
-
19
- def test_should_allow_transitioning_without_a_to_state
20
- @machine.transition(from: :parked, on: :ignite)
21
- end
22
-
23
- def test_should_allow_transitioning_without_a_from_state
24
- @machine.transition(to: :idling, on: :ignite)
25
- end
26
-
27
- def test_should_allow_except_from_option
28
- @machine.transition(except_from: :idling, on: :ignite)
29
- end
30
-
31
- def test_should_allow_except_to_option
32
- @machine.transition(except_to: :parked, on: :ignite)
33
- end
34
-
35
- def test_should_allow_implicit_options
36
- branch = @machine.transition(first_gear: :second_gear, on: :shift_up)
37
- assert_instance_of StateMachines::Branch, branch
38
-
39
- state_requirements = branch.state_requirements
40
- assert_equal 1, state_requirements.length
41
-
42
- assert_instance_of StateMachines::WhitelistMatcher, state_requirements[0][:from]
43
- assert_equal [:first_gear], state_requirements[0][:from].values
44
- assert_instance_of StateMachines::WhitelistMatcher, state_requirements[0][:to]
45
- assert_equal [:second_gear], state_requirements[0][:to].values
46
- assert_instance_of StateMachines::WhitelistMatcher, branch.event_requirement
47
- assert_equal [:shift_up], branch.event_requirement.values
48
- end
49
-
50
- def test_should_allow_multiple_implicit_options
51
- branch = @machine.transition(first_gear: :second_gear, second_gear: :third_gear, on: :shift_up)
52
-
53
- state_requirements = branch.state_requirements
54
- assert_equal 2, state_requirements.length
55
- end
56
-
57
- def test_should_allow_verbose_options
58
- branch = @machine.transition(from: :parked, to: :idling, on: :ignite)
59
- assert_instance_of StateMachines::Branch, branch
60
- end
61
-
62
- def test_should_include_all_transition_states_in_machine_states
63
- @machine.transition(parked: :idling, on: :ignite)
64
-
65
- assert_equal [:parked, :idling], @machine.states.map { |state| state.name }
66
- end
67
-
68
- def test_should_include_all_transition_events_in_machine_events
69
- @machine.transition(parked: :idling, on: :ignite)
70
-
71
- assert_equal [:ignite], @machine.events.map { |event| event.name }
72
- end
73
-
74
- def test_should_allow_multiple_events
75
- branches = @machine.transition(parked: :ignite, on: [:ignite, :shift_up])
76
-
77
- assert_equal 2, branches.length
78
- assert_equal [:ignite, :shift_up], @machine.events.map { |event| event.name }
79
- end
80
-
81
- def test_should_not_modify_options
82
- options = { parked: :idling, on: :ignite }
83
- @machine.transition(options)
84
-
85
- assert_equal options, parked: :idling, on: :ignite
86
- end
87
- end
@@ -1,31 +0,0 @@
1
- require_relative '../../test_helper'
2
-
3
- class MachineWithoutInitializationTest < StateMachinesTest
4
- def setup
5
- @klass = Class.new do
6
- def initialize(attributes = {})
7
- attributes.each { |attr, value| send("#{attr}=", value) }
8
- super()
9
- end
10
- end
11
-
12
- @machine = StateMachines::Machine.new(@klass, initial: :parked, initialize: false)
13
- end
14
-
15
- def test_should_not_have_an_initial_state
16
- object = @klass.new
17
- assert_nil object.state
18
- end
19
-
20
- def test_should_still_allow_manual_initialization
21
- @klass.send(:include, Module.new do
22
- def initialize(_attributes = {})
23
- super()
24
- initialize_state_machines
25
- end
26
- end)
27
-
28
- object = @klass.new
29
- assert_equal 'parked', object.state
30
- end
31
- end
@@ -1,14 +0,0 @@
1
- require_relative '../../test_helper'
2
-
3
- class MachineWithoutInitializeTest < StateMachinesTest
4
- def setup
5
- klass = Class.new
6
- StateMachines::Machine.new(klass, initial: :parked)
7
- @object = klass.new
8
- end
9
-
10
- def test_should_initialize_state
11
- assert_equal 'parked', @object.state
12
- end
13
- end
14
-
@@ -1,31 +0,0 @@
1
- require_relative '../../test_helper'
2
-
3
- class MachineWithoutIntegrationTest < StateMachinesTest
4
- def setup
5
- @klass = Class.new
6
- @machine = StateMachines::Machine.new(@klass)
7
- @object = @klass.new
8
- end
9
-
10
- def test_transaction_should_yield
11
- @yielded = false
12
- @machine.within_transaction(@object) do
13
- @yielded = true
14
- end
15
-
16
- assert @yielded
17
- end
18
-
19
- def test_invalidation_should_do_nothing
20
- assert_nil @machine.invalidate(@object, :state, :invalid_transition, [[:event, 'park']])
21
- end
22
-
23
- def test_reset_should_do_nothing
24
- assert_nil @machine.reset(@object)
25
- end
26
-
27
- def test_errors_for_should_be_empty
28
- assert_equal '', @machine.errors_for(@object)
29
- end
30
- end
31
-
@@ -1,11 +0,0 @@
1
- require_relative '../../test_helper'
2
-
3
- class MachineCollectionByDefaultTest < StateMachinesTest
4
- def setup
5
- @machines = StateMachines::MachineCollection.new
6
- end
7
-
8
- def test_should_not_have_any_machines
9
- assert @machines.empty?
10
- end
11
- end
@@ -1,80 +0,0 @@
1
- require_relative '../../test_helper'
2
-
3
- class MachineCollectionFireTest < StateMachinesTest
4
- def setup
5
- @machines = StateMachines::MachineCollection.new
6
-
7
- @klass = Class.new do
8
- attr_reader :saved
9
-
10
- def save
11
- @saved = true
12
- end
13
- end
14
-
15
- # First machine
16
- @machines[:state] = @state = StateMachines::Machine.new(@klass, :state, initial: :parked, action: :save)
17
- @state.event :ignite do
18
- transition parked: :idling
19
- end
20
- @state.event :park do
21
- transition idling: :parked
22
- end
23
-
24
- # Second machine
25
- @machines[:alarm_state] = @alarm_state = StateMachines::Machine.new(@klass, :alarm_state, initial: :active, action: :save, namespace: 'alarm')
26
- @alarm_state.event :enable do
27
- transition off: :active
28
- end
29
- @alarm_state.event :disable do
30
- transition active: :off
31
- end
32
-
33
- @object = @klass.new
34
- end
35
-
36
- def test_should_raise_exception_if_invalid_event_specified
37
- exception = assert_raises(StateMachines::InvalidEvent) { @machines.fire_events(@object, :invalid) }
38
- assert_equal :invalid, exception.event
39
-
40
- exception = assert_raises(StateMachines::InvalidEvent) { @machines.fire_events(@object, :ignite, :invalid) }
41
- assert_equal :invalid, exception.event
42
- end
43
-
44
- def test_should_fail_if_any_event_cannot_transition
45
- refute @machines.fire_events(@object, :park, :disable_alarm)
46
- assert_equal 'parked', @object.state
47
- assert_equal 'active', @object.alarm_state
48
- refute @object.saved
49
-
50
- refute @machines.fire_events(@object, :ignite, :enable_alarm)
51
- assert_equal 'parked', @object.state
52
- assert_equal 'active', @object.alarm_state
53
- refute @object.saved
54
- end
55
-
56
- def test_should_run_failure_callbacks_if_any_event_cannot_transition
57
- @state_failure_run = @alarm_state_failure_run = false
58
-
59
- @machines[:state].after_failure { @state_failure_run = true }
60
- @machines[:alarm_state].after_failure { @alarm_state_failure_run = true }
61
-
62
- refute @machines.fire_events(@object, :park, :disable_alarm)
63
- assert @state_failure_run
64
- refute @alarm_state_failure_run
65
- end
66
-
67
- def test_should_be_successful_if_all_events_transition
68
- assert @machines.fire_events(@object, :ignite, :disable_alarm)
69
- assert_equal 'idling', @object.state
70
- assert_equal 'off', @object.alarm_state
71
- assert @object.saved
72
- end
73
-
74
- def test_should_not_save_if_skipping_action
75
- assert @machines.fire_events(@object, :ignite, :disable_alarm, false)
76
- assert_equal 'idling', @object.state
77
- assert_equal 'off', @object.alarm_state
78
- refute @object.saved
79
- end
80
- end
@@ -1,54 +0,0 @@
1
- require_relative '../../test_helper'
2
-
3
- class MachineCollectionFireAttributesWithValidationsTest < StateMachinesTest
4
- def setup
5
- @klass = Class.new do
6
- attr_accessor :errors
7
-
8
- def initialize
9
- @errors = []
10
- super
11
- end
12
- end
13
-
14
- @machines = StateMachines::MachineCollection.new
15
- @machines[:state] = @machine = StateMachines::Machine.new(@klass, :state, initial: :parked, action: :save)
16
- @machine.event :ignite do
17
- transition parked: :idling
18
- end
19
-
20
- class << @machine
21
- def invalidate(object, _attribute, message, values = [])
22
- (object.errors ||= []) << generate_message(message, values)
23
- end
24
-
25
- def reset(object)
26
- object.errors = []
27
- end
28
- end
29
-
30
- @object = @klass.new
31
- end
32
-
33
- def test_should_invalidate_if_event_is_invalid
34
- @object.state_event = 'invalid'
35
- @machines.transitions(@object, :save)
36
-
37
- refute @object.errors.empty?
38
- end
39
-
40
- def test_should_invalidate_if_no_transition_exists
41
- @object.state = 'idling'
42
- @object.state_event = 'ignite'
43
- @machines.transitions(@object, :save)
44
-
45
- refute @object.errors.empty?
46
- end
47
-
48
- def test_should_not_invalidate_if_transition_exists
49
- @object.state_event = 'ignite'
50
- @machines.transitions(@object, :save)
51
-
52
- assert @object.errors.empty?
53
- end
54
- end