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.
- checksums.yaml +5 -5
- data/LICENSE.txt +1 -1
- data/README.md +34 -15
- data/lib/state_machines/assertions.rb +2 -0
- data/lib/state_machines/branch.rb +85 -81
- data/lib/state_machines/callback.rb +24 -21
- data/lib/state_machines/core.rb +2 -0
- data/lib/state_machines/core_ext/class/state_machine.rb +2 -0
- data/lib/state_machines/core_ext.rb +2 -0
- data/lib/state_machines/error.rb +2 -0
- data/lib/state_machines/eval_helpers.rb +51 -22
- data/lib/state_machines/event.rb +35 -30
- data/lib/state_machines/event_collection.rb +28 -25
- data/lib/state_machines/extensions.rb +3 -1
- data/lib/state_machines/helper_module.rb +3 -1
- data/lib/state_machines/integrations/base.rb +2 -0
- data/lib/state_machines/integrations.rb +10 -8
- data/lib/state_machines/machine/class_methods.rb +79 -0
- data/lib/state_machines/machine.rb +381 -425
- data/lib/state_machines/machine_collection.rb +13 -10
- data/lib/state_machines/macro_methods.rb +102 -100
- data/lib/state_machines/matcher.rb +26 -23
- data/lib/state_machines/matcher_helpers.rb +13 -11
- data/lib/state_machines/node_collection.rb +17 -13
- data/lib/state_machines/path.rb +58 -55
- data/lib/state_machines/path_collection.rb +37 -35
- data/lib/state_machines/state.rb +50 -38
- data/lib/state_machines/state_collection.rb +22 -19
- data/lib/state_machines/state_context.rb +35 -35
- data/lib/state_machines/stdio_renderer.rb +74 -0
- data/lib/state_machines/transition.rb +182 -178
- data/lib/state_machines/transition_collection.rb +172 -168
- data/lib/state_machines/version.rb +3 -1
- data/lib/state_machines.rb +4 -1
- metadata +10 -439
- data/.gitignore +0 -21
- data/.rspec +0 -3
- data/.ruby-gemset +0 -1
- data/.ruby-version +0 -1
- data/.travis.yml +0 -16
- data/Changelog.md +0 -22
- data/Contributors.md +0 -39
- data/Gemfile +0 -8
- data/Rakefile +0 -12
- data/Testing.md +0 -0
- data/state_machines.gemspec +0 -22
- data/test/files/integrations/event_on_failure_integration.rb +0 -10
- data/test/files/integrations/vehicle.rb +0 -7
- data/test/files/models/auto_shop.rb +0 -31
- data/test/files/models/car.rb +0 -21
- data/test/files/models/driver.rb +0 -13
- data/test/files/models/model_base.rb +0 -6
- data/test/files/models/motorcycle.rb +0 -16
- data/test/files/models/traffic_light.rb +0 -47
- data/test/files/models/vehicle.rb +0 -127
- data/test/files/node.rb +0 -5
- data/test/files/switch.rb +0 -15
- data/test/functional/auto_shop_available_test.rb +0 -20
- data/test/functional/auto_shop_busy_test.rb +0 -25
- data/test/functional/car_backing_up_test.rb +0 -45
- data/test/functional/car_test.rb +0 -49
- data/test/functional/driver_default_nonstandard_test.rb +0 -13
- data/test/functional/motorcycle_test.rb +0 -52
- data/test/functional/traffic_light_caution_test.rb +0 -17
- data/test/functional/traffic_light_proceed_test.rb +0 -17
- data/test/functional/traffic_light_stop_test.rb +0 -26
- data/test/functional/vehicle_first_gear_test.rb +0 -42
- data/test/functional/vehicle_idling_test.rb +0 -59
- data/test/functional/vehicle_locked_test.rb +0 -29
- data/test/functional/vehicle_parked_test.rb +0 -53
- data/test/functional/vehicle_repaired_test.rb +0 -20
- data/test/functional/vehicle_second_gear_test.rb +0 -42
- data/test/functional/vehicle_stalled_test.rb +0 -65
- data/test/functional/vehicle_test.rb +0 -20
- data/test/functional/vehicle_third_gear_test.rb +0 -42
- data/test/functional/vehicle_unsaved_test.rb +0 -181
- data/test/functional/vehicle_with_event_attributes_test.rb +0 -30
- data/test/functional/vehicle_with_parallel_events_test.rb +0 -36
- data/test/test_helper.rb +0 -15
- data/test/unit/assertions/assert_exclusive_keys_test.rb +0 -22
- data/test/unit/assertions/assert_valid_key_test.rb +0 -12
- data/test/unit/branch/branch_test.rb +0 -28
- data/test/unit/branch/branch_with_conflicting_conditionals_test.rb +0 -27
- data/test/unit/branch/branch_with_conflicting_from_requirements_test.rb +0 -8
- data/test/unit/branch/branch_with_conflicting_on_requirements_test.rb +0 -8
- data/test/unit/branch/branch_with_conflicting_to_requirements_test.rb +0 -8
- data/test/unit/branch/branch_with_different_requirements_test.rb +0 -41
- data/test/unit/branch/branch_with_except_from_matcher_requirement_test.rb +0 -8
- data/test/unit/branch/branch_with_except_from_requirement_test.rb +0 -36
- data/test/unit/branch/branch_with_except_on_matcher_requirement_test.rb +0 -8
- data/test/unit/branch/branch_with_except_on_requirement_test.rb +0 -36
- data/test/unit/branch/branch_with_except_to_matcher_requirement_test.rb +0 -8
- data/test/unit/branch/branch_with_except_to_requirement_test.rb +0 -36
- data/test/unit/branch/branch_with_from_matcher_requirement_test.rb +0 -20
- data/test/unit/branch/branch_with_from_requirement_test.rb +0 -45
- data/test/unit/branch/branch_with_if_conditional_test.rb +0 -27
- data/test/unit/branch/branch_with_implicit_and_explicit_requirements_test.rb +0 -23
- data/test/unit/branch/branch_with_implicit_from_requirement_matcher_test.rb +0 -20
- data/test/unit/branch/branch_with_implicit_requirement_test.rb +0 -20
- data/test/unit/branch/branch_with_implicit_to_requirement_matcher_test.rb +0 -16
- data/test/unit/branch/branch_with_multiple_except_from_requirements_test.rb +0 -20
- data/test/unit/branch/branch_with_multiple_except_on_requirements_test.rb +0 -16
- data/test/unit/branch/branch_with_multiple_except_to_requirements_test.rb +0 -20
- data/test/unit/branch/branch_with_multiple_from_requirements_test.rb +0 -16
- data/test/unit/branch/branch_with_multiple_if_conditionals_test.rb +0 -20
- data/test/unit/branch/branch_with_multiple_implicit_requirements_test.rb +0 -53
- data/test/unit/branch/branch_with_multiple_to_requirements_test.rb +0 -20
- data/test/unit/branch/branch_with_multiple_unless_conditionals_test.rb +0 -20
- data/test/unit/branch/branch_with_nil_requirements_test.rb +0 -28
- data/test/unit/branch/branch_with_no_requirements_test.rb +0 -36
- data/test/unit/branch/branch_with_on_matcher_requirement_test.rb +0 -16
- data/test/unit/branch/branch_with_on_requirement_test.rb +0 -45
- data/test/unit/branch/branch_with_to_matcher_requirement_test.rb +0 -20
- data/test/unit/branch/branch_with_to_requirement_test.rb +0 -45
- data/test/unit/branch/branch_with_unless_conditional_test.rb +0 -27
- data/test/unit/branch/branch_without_guards_test.rb +0 -27
- data/test/unit/callback/callback_by_default_test.rb +0 -25
- data/test/unit/callback/callback_test.rb +0 -53
- data/test/unit/callback/callback_with_application_bound_object_test.rb +0 -23
- data/test/unit/callback/callback_with_application_terminator_test.rb +0 -24
- data/test/unit/callback/callback_with_arguments_test.rb +0 -14
- data/test/unit/callback/callback_with_around_type_and_arguments_test.rb +0 -25
- data/test/unit/callback/callback_with_around_type_and_block_test.rb +0 -44
- data/test/unit/callback/callback_with_around_type_and_bound_method_test.rb +0 -23
- data/test/unit/callback/callback_with_around_type_and_multiple_methods_test.rb +0 -93
- data/test/unit/callback/callback_with_around_type_and_terminator_test.rb +0 -17
- data/test/unit/callback/callback_with_block_test.rb +0 -20
- data/test/unit/callback/callback_with_bound_method_and_arguments_test.rb +0 -28
- data/test/unit/callback/callback_with_bound_method_test.rb +0 -35
- data/test/unit/callback/callback_with_do_method_test.rb +0 -18
- data/test/unit/callback/callback_with_explicit_requirements_test.rb +0 -32
- data/test/unit/callback/callback_with_if_condition_test.rb +0 -17
- data/test/unit/callback/callback_with_implicit_requirements_test.rb +0 -32
- data/test/unit/callback/callback_with_method_argument_test.rb +0 -18
- data/test/unit/callback/callback_with_mixed_methods_test.rb +0 -31
- data/test/unit/callback/callback_with_multiple_bound_methods_test.rb +0 -21
- data/test/unit/callback/callback_with_multiple_do_methods_test.rb +0 -29
- data/test/unit/callback/callback_with_multiple_method_arguments_test.rb +0 -29
- data/test/unit/callback/callback_with_terminator_test.rb +0 -22
- data/test/unit/callback/callback_with_unbound_method_test.rb +0 -14
- data/test/unit/callback/callback_with_unless_condition_test.rb +0 -17
- data/test/unit/callback/callback_without_arguments_test.rb +0 -14
- data/test/unit/callback/callback_without_terminator_test.rb +0 -12
- data/test/unit/error/error_by_default_test.rb +0 -21
- data/test/unit/error/error_with_message_test.rb +0 -23
- data/test/unit/eval_helper/eval_helpers_base_test.rb +0 -8
- data/test/unit/eval_helper/eval_helpers_proc_block_and_explicit_arguments_test.rb +0 -14
- data/test/unit/eval_helper/eval_helpers_proc_block_and_implicit_arguments_test.rb +0 -14
- data/test/unit/eval_helper/eval_helpers_proc_test.rb +0 -13
- data/test/unit/eval_helper/eval_helpers_proc_with_arguments_test.rb +0 -13
- data/test/unit/eval_helper/eval_helpers_proc_with_block_test.rb +0 -13
- data/test/unit/eval_helper/eval_helpers_proc_with_block_without_arguments_test.rb +0 -18
- data/test/unit/eval_helper/eval_helpers_proc_with_block_without_object_test.rb +0 -14
- data/test/unit/eval_helper/eval_helpers_proc_without_arguments_test.rb +0 -19
- data/test/unit/eval_helper/eval_helpers_string_test.rb +0 -25
- data/test/unit/eval_helper/eval_helpers_string_with_block_test.rb +0 -12
- data/test/unit/eval_helper/eval_helpers_symbol_method_missing_test.rb +0 -20
- data/test/unit/eval_helper/eval_helpers_symbol_private_test.rb +0 -17
- data/test/unit/eval_helper/eval_helpers_symbol_protected_test.rb +0 -17
- data/test/unit/eval_helper/eval_helpers_symbol_tainted_method_test.rb +0 -18
- data/test/unit/eval_helper/eval_helpers_symbol_test.rb +0 -16
- data/test/unit/eval_helper/eval_helpers_symbol_with_arguments_and_block_test.rb +0 -16
- data/test/unit/eval_helper/eval_helpers_symbol_with_arguments_test.rb +0 -16
- data/test/unit/eval_helper/eval_helpers_symbol_with_block_test.rb +0 -16
- data/test/unit/eval_helper/eval_helpers_test.rb +0 -13
- data/test/unit/event/event_after_being_copied_test.rb +0 -17
- data/test/unit/event/event_by_default_test.rb +0 -60
- data/test/unit/event/event_context_test.rb +0 -16
- data/test/unit/event/event_on_failure_test.rb +0 -44
- data/test/unit/event/event_test.rb +0 -34
- data/test/unit/event/event_transitions_test.rb +0 -62
- data/test/unit/event/event_with_conflicting_helpers_after_definition_test.rb +0 -79
- data/test/unit/event/event_with_conflicting_helpers_before_definition_test.rb +0 -58
- data/test/unit/event/event_with_conflicting_machine_test.rb +0 -48
- data/test/unit/event/event_with_dynamic_human_name_test.rb +0 -26
- data/test/unit/event/event_with_human_name_test.rb +0 -13
- data/test/unit/event/event_with_invalid_current_state_test.rb +0 -30
- data/test/unit/event/event_with_machine_action_test.rb +0 -33
- data/test/unit/event/event_with_marshalling_test.rb +0 -47
- data/test/unit/event/event_with_matching_disabled_transitions_test.rb +0 -115
- data/test/unit/event/event_with_matching_enabled_transitions_test.rb +0 -75
- data/test/unit/event/event_with_multiple_transitions_test.rb +0 -61
- data/test/unit/event/event_with_namespace_test.rb +0 -34
- data/test/unit/event/event_with_transition_with_blacklisted_to_state_test.rb +0 -60
- data/test/unit/event/event_with_transition_with_loopback_state_test.rb +0 -36
- data/test/unit/event/event_with_transition_with_nil_to_state_test.rb +0 -36
- data/test/unit/event/event_with_transition_with_whitelisted_to_state_test.rb +0 -51
- data/test/unit/event/event_with_transition_without_to_state_test.rb +0 -36
- data/test/unit/event/event_with_transitions_test.rb +0 -32
- data/test/unit/event/event_without_matching_transitions_test.rb +0 -41
- data/test/unit/event/event_without_transitions_test.rb +0 -28
- data/test/unit/event/invalid_event_test.rb +0 -20
- data/test/unit/event_collection/event_collection_attribute_with_machine_action_test.rb +0 -62
- data/test/unit/event_collection/event_collection_attribute_with_namespaced_machine_test.rb +0 -36
- data/test/unit/event_collection/event_collection_by_default_test.rb +0 -26
- data/test/unit/event_collection/event_collection_test.rb +0 -39
- data/test/unit/event_collection/event_collection_with_custom_machine_attribute_test.rb +0 -31
- data/test/unit/event_collection/event_collection_with_events_with_transitions_test.rb +0 -76
- data/test/unit/event_collection/event_collection_with_multiple_events_test.rb +0 -27
- data/test/unit/event_collection/event_collection_with_validations_test.rb +0 -74
- data/test/unit/event_collection/event_collection_without_machine_action_test.rb +0 -18
- data/test/unit/event_collection/event_string_collection_test.rb +0 -31
- data/test/unit/helper_module_test.rb +0 -17
- data/test/unit/integrations/integration_finder_test.rb +0 -16
- data/test/unit/integrations/integration_matcher_test.rb +0 -29
- data/test/unit/invalid_transition/invalid_parallel_transition_test.rb +0 -18
- data/test/unit/invalid_transition/invalid_transition_test.rb +0 -47
- data/test/unit/invalid_transition/invalid_transition_with_integration_test.rb +0 -45
- data/test/unit/invalid_transition/invalid_transition_with_namespace_test.rb +0 -32
- data/test/unit/machine/machine_after_being_copied_test.rb +0 -62
- data/test/unit/machine/machine_after_changing_initial_state.rb +0 -28
- data/test/unit/machine/machine_after_changing_owner_class_test.rb +0 -31
- data/test/unit/machine/machine_by_default_test.rb +0 -160
- data/test/unit/machine/machine_finder_custom_options_test.rb +0 -17
- data/test/unit/machine/machine_finder_with_existing_machine_on_superclass_test.rb +0 -85
- data/test/unit/machine/machine_finder_with_existing_on_same_class_test.rb +0 -23
- data/test/unit/machine/machine_finder_without_existing_machine_test.rb +0 -25
- data/test/unit/machine/machine_persistence_test.rb +0 -52
- data/test/unit/machine/machine_state_initialization_test.rb +0 -56
- data/test/unit/machine/machine_test.rb +0 -30
- data/test/unit/machine/machine_with_action_already_overridden_test.rb +0 -23
- data/test/unit/machine/machine_with_action_defined_in_class_test.rb +0 -37
- data/test/unit/machine/machine_with_action_defined_in_included_module_test.rb +0 -46
- data/test/unit/machine/machine_with_action_defined_in_superclass_test.rb +0 -43
- data/test/unit/machine/machine_with_action_undefined_test.rb +0 -33
- data/test/unit/machine/machine_with_cached_state_test.rb +0 -20
- data/test/unit/machine/machine_with_class_helpers_test.rb +0 -179
- data/test/unit/machine/machine_with_conflicting_helpers_after_definition_test.rb +0 -244
- data/test/unit/machine/machine_with_conflicting_helpers_before_definition_test.rb +0 -175
- data/test/unit/machine/machine_with_custom_action_test.rb +0 -11
- data/test/unit/machine/machine_with_custom_attribute_test.rb +0 -103
- data/test/unit/machine/machine_with_custom_initialize_test.rb +0 -24
- data/test/unit/machine/machine_with_custom_integration_test.rb +0 -72
- data/test/unit/machine/machine_with_custom_invalidation_test.rb +0 -39
- data/test/unit/machine/machine_with_custom_name_test.rb +0 -57
- data/test/unit/machine/machine_with_custom_plural_test.rb +0 -52
- data/test/unit/machine/machine_with_dynamic_initial_state_test.rb +0 -65
- data/test/unit/machine/machine_with_event_matchers_test.rb +0 -41
- data/test/unit/machine/machine_with_events_test.rb +0 -52
- data/test/unit/machine/machine_with_events_with_custom_human_names_test.rb +0 -18
- data/test/unit/machine/machine_with_events_with_transitions_test.rb +0 -37
- data/test/unit/machine/machine_with_existing_event_test.rb +0 -17
- data/test/unit/machine/machine_with_existing_machines_on_owner_class_test.rb +0 -20
- data/test/unit/machine/machine_with_existing_machines_with_same_attributes_on_owner_class_test.rb +0 -71
- data/test/unit/machine/machine_with_existing_machines_with_same_attributes_on_owner_subclass_test.rb +0 -31
- data/test/unit/machine/machine_with_existing_state_test.rb +0 -27
- data/test/unit/machine/machine_with_failure_callbacks_test.rb +0 -48
- data/test/unit/machine/machine_with_helpers_test.rb +0 -14
- data/test/unit/machine/machine_with_initial_state_with_value_and_owner_default.rb +0 -25
- data/test/unit/machine/machine_with_initialize_and_super_test.rb +0 -17
- data/test/unit/machine/machine_with_initialize_arguments_and_block_test.rb +0 -31
- data/test/unit/machine/machine_with_initialize_without_super_test.rb +0 -17
- data/test/unit/machine/machine_with_instance_helpers_test.rb +0 -179
- data/test/unit/machine/machine_with_integration_test.rb +0 -72
- data/test/unit/machine/machine_with_multiple_events_test.rb +0 -32
- data/test/unit/machine/machine_with_namespace_test.rb +0 -48
- data/test/unit/machine/machine_with_nil_action_test.rb +0 -27
- data/test/unit/machine/machine_with_other_states.rb +0 -22
- data/test/unit/machine/machine_with_owner_subclass_test.rb +0 -18
- data/test/unit/machine/machine_with_paths_test.rb +0 -25
- data/test/unit/machine/machine_with_private_action_test.rb +0 -43
- data/test/unit/machine/machine_with_state_matchers_test.rb +0 -41
- data/test/unit/machine/machine_with_state_with_matchers_test.rb +0 -19
- data/test/unit/machine/machine_with_states_test.rb +0 -55
- data/test/unit/machine/machine_with_states_with_behaviors_test.rb +0 -23
- data/test/unit/machine/machine_with_states_with_custom_human_names_test.rb +0 -18
- data/test/unit/machine/machine_with_states_with_custom_values_test.rb +0 -21
- data/test/unit/machine/machine_with_states_with_runtime_dependencies_test.rb +0 -19
- data/test/unit/machine/machine_with_static_initial_state_test.rb +0 -49
- data/test/unit/machine/machine_with_superclass_conflicting_helpers_after_definition_test.rb +0 -36
- data/test/unit/machine/machine_with_transition_callbacks_test.rb +0 -144
- data/test/unit/machine/machine_with_transitions_test.rb +0 -87
- data/test/unit/machine/machine_without_initialization_test.rb +0 -31
- data/test/unit/machine/machine_without_initialize_test.rb +0 -14
- data/test/unit/machine/machine_without_integration_test.rb +0 -31
- data/test/unit/machine_collection/machine_collection_by_default_test.rb +0 -11
- data/test/unit/machine_collection/machine_collection_fire_test.rb +0 -80
- data/test/unit/machine_collection/machine_collection_fire_with_transactions_test.rb +0 -54
- data/test/unit/machine_collection/machine_collection_fire_with_validations_test.rb +0 -76
- data/test/unit/machine_collection/machine_collection_state_initialization_test.rb +0 -111
- data/test/unit/machine_collection/machine_collection_transitions_with_blank_events_test.rb +0 -25
- data/test/unit/machine_collection/machine_collection_transitions_with_custom_options_test.rb +0 -20
- data/test/unit/machine_collection/machine_collection_transitions_with_different_actions_test.rb +0 -26
- data/test/unit/machine_collection/machine_collection_transitions_with_exisiting_transitions_test.rb +0 -25
- data/test/unit/machine_collection/machine_collection_transitions_with_invalid_events_test.rb +0 -25
- data/test/unit/machine_collection/machine_collection_transitions_with_same_actions_test.rb +0 -31
- data/test/unit/machine_collection/machine_collection_transitions_with_transition_test.rb +0 -26
- data/test/unit/machine_collection/machine_collection_transitions_without_events_test.rb +0 -25
- data/test/unit/machine_collection/machine_collection_transitions_without_transition_test.rb +0 -27
- data/test/unit/matcher/all_matcher_test.rb +0 -29
- data/test/unit/matcher/blacklist_matcher_test.rb +0 -30
- data/test/unit/matcher/loopback_matcher_test.rb +0 -27
- data/test/unit/matcher/matcher_by_default_test.rb +0 -15
- data/test/unit/matcher/matcher_with_multiple_values_test.rb +0 -15
- data/test/unit/matcher/matcher_with_value_test.rb +0 -15
- data/test/unit/matcher/whitelist_matcher_test.rb +0 -30
- data/test/unit/matcher_helpers/matcher_helpers_all_test.rb +0 -14
- data/test/unit/matcher_helpers/matcher_helpers_any_test.rb +0 -14
- data/test/unit/matcher_helpers/matcher_helpers_same_test.rb +0 -13
- data/test/unit/node_collection/node_collection_after_being_copied_test.rb +0 -46
- data/test/unit/node_collection/node_collection_after_update_test.rb +0 -36
- data/test/unit/node_collection/node_collection_by_default_test.rb +0 -22
- data/test/unit/node_collection/node_collection_test.rb +0 -23
- data/test/unit/node_collection/node_collection_with_indices_test.rb +0 -42
- data/test/unit/node_collection/node_collection_with_matcher_contexts_test.rb +0 -25
- data/test/unit/node_collection/node_collection_with_nodes_test.rb +0 -46
- data/test/unit/node_collection/node_collection_with_numeric_index_test.rb +0 -24
- data/test/unit/node_collection/node_collection_with_postdefined_contexts_test.rb +0 -22
- data/test/unit/node_collection/node_collection_with_predefined_contexts_test.rb +0 -23
- data/test/unit/node_collection/node_collection_with_string_index_test.rb +0 -20
- data/test/unit/node_collection/node_collection_with_symbol_index_test.rb +0 -20
- data/test/unit/node_collection/node_collection_without_indices_test.rb +0 -30
- data/test/unit/path/path_by_default_test.rb +0 -54
- data/test/unit/path/path_test.rb +0 -14
- data/test/unit/path/path_with_available_transitions_after_reaching_target_test.rb +0 -40
- data/test/unit/path/path_with_available_transitions_test.rb +0 -54
- data/test/unit/path/path_with_deep_target_reached_test.rb +0 -50
- data/test/unit/path/path_with_deep_target_test.rb +0 -40
- data/test/unit/path/path_with_duplicates_test.rb +0 -32
- data/test/unit/path/path_with_encountered_transitions_test.rb +0 -34
- data/test/unit/path/path_with_guarded_transitions_test.rb +0 -42
- data/test/unit/path/path_with_reached_target_test.rb +0 -35
- data/test/unit/path/path_with_transitions_test.rb +0 -54
- data/test/unit/path/path_with_unreached_target_test.rb +0 -31
- data/test/unit/path/path_without_transitions_test.rb +0 -24
- data/test/unit/path_collection/path_collection_by_default_test.rb +0 -46
- data/test/unit/path_collection/path_collection_test.rb +0 -24
- data/test/unit/path_collection/path_collection_with_deep_paths_test.rb +0 -43
- data/test/unit/path_collection/path_collection_with_duplicate_nodes_test.rb +0 -31
- data/test/unit/path_collection/path_collection_with_from_state_test.rb +0 -27
- data/test/unit/path_collection/path_collection_with_paths_test.rb +0 -47
- data/test/unit/path_collection/path_collection_with_to_state_test.rb +0 -29
- data/test/unit/path_collection/path_with_guarded_paths_test.rb +0 -25
- data/test/unit/state/state_after_being_copied_test.rb +0 -19
- data/test/unit/state/state_by_default_test.rb +0 -41
- data/test/unit/state/state_final_test.rb +0 -28
- data/test/unit/state/state_initial_test.rb +0 -13
- data/test/unit/state/state_not_final_test.rb +0 -32
- data/test/unit/state/state_not_initial_test.rb +0 -13
- data/test/unit/state/state_test.rb +0 -44
- data/test/unit/state/state_with_cached_lambda_value_test.rb +0 -29
- data/test/unit/state/state_with_conflicting_helpers_after_definition_test.rb +0 -38
- data/test/unit/state/state_with_conflicting_helpers_before_definition_test.rb +0 -29
- data/test/unit/state/state_with_conflicting_machine_name_test.rb +0 -20
- data/test/unit/state/state_with_conflicting_machine_test.rb +0 -37
- data/test/unit/state/state_with_context_test.rb +0 -60
- data/test/unit/state/state_with_dynamic_human_name_test.rb +0 -25
- data/test/unit/state/state_with_existing_context_method_test.rb +0 -24
- data/test/unit/state/state_with_human_name_test.rb +0 -13
- data/test/unit/state/state_with_integer_value_test.rb +0 -32
- data/test/unit/state/state_with_invalid_method_call_test.rb +0 -21
- data/test/unit/state/state_with_lambda_value_test.rb +0 -37
- data/test/unit/state/state_with_matcher_test.rb +0 -18
- data/test/unit/state/state_with_multiple_contexts_test.rb +0 -57
- data/test/unit/state/state_with_name_test.rb +0 -43
- data/test/unit/state/state_with_namespace_test.rb +0 -22
- data/test/unit/state/state_with_nil_value_test.rb +0 -35
- data/test/unit/state/state_with_redefined_context_method_test.rb +0 -45
- data/test/unit/state/state_with_symbolic_value_test.rb +0 -32
- data/test/unit/state/state_with_valid_inherited_method_call_for_current_state_test.rb +0 -40
- data/test/unit/state/state_with_valid_method_call_for_current_state_test.rb +0 -33
- data/test/unit/state/state_with_valid_method_call_for_different_state_test.rb +0 -41
- data/test/unit/state/state_without_cached_lambda_value_test.rb +0 -25
- data/test/unit/state/state_without_name_test.rb +0 -39
- data/test/unit/state_collection/state_collection_by_default_test.rb +0 -21
- data/test/unit/state_collection/state_collection_string_test.rb +0 -35
- data/test/unit/state_collection/state_collection_test.rb +0 -74
- data/test/unit/state_collection/state_collection_with_custom_state_values_test.rb +0 -29
- data/test/unit/state_collection/state_collection_with_event_transitions_test.rb +0 -39
- data/test/unit/state_collection/state_collection_with_initial_state_test.rb +0 -40
- data/test/unit/state_collection/state_collection_with_namespace_test.rb +0 -21
- data/test/unit/state_collection/state_collection_with_state_behaviors_test.rb +0 -40
- data/test/unit/state_collection/state_collection_with_state_matchers_test.rb +0 -29
- data/test/unit/state_collection/state_collection_with_transition_callbacks_test.rb +0 -40
- data/test/unit/state_context/state_context_proxy_test.rb +0 -26
- data/test/unit/state_context/state_context_proxy_with_if_and_unless_conditions_test.rb +0 -42
- data/test/unit/state_context/state_context_proxy_with_if_condition_test.rb +0 -64
- data/test/unit/state_context/state_context_proxy_with_multiple_if_conditions_test.rb +0 -32
- data/test/unit/state_context/state_context_proxy_with_multiple_unless_conditions_test.rb +0 -32
- data/test/unit/state_context/state_context_proxy_with_unless_condition_test.rb +0 -64
- data/test/unit/state_context/state_context_proxy_without_conditions_test.rb +0 -31
- data/test/unit/state_context/state_context_test.rb +0 -28
- data/test/unit/state_context/state_context_transition_test.rb +0 -104
- data/test/unit/state_context/state_context_with_matching_transition_test.rb +0 -27
- data/test/unit/state_machine/state_machine_by_default_test.rb +0 -12
- data/test/unit/state_machine/state_machine_test.rb +0 -20
- data/test/unit/transition/transition_after_being_performed_test.rb +0 -48
- data/test/unit/transition/transition_after_being_persisted_test.rb +0 -46
- data/test/unit/transition/transition_after_being_rolled_back_test.rb +0 -35
- data/test/unit/transition/transition_equality_test.rb +0 -52
- data/test/unit/transition/transition_loopback_test.rb +0 -18
- data/test/unit/transition/transition_test.rb +0 -96
- data/test/unit/transition/transition_transient_test.rb +0 -20
- data/test/unit/transition/transition_with_action_test.rb +0 -27
- data/test/unit/transition/transition_with_after_callbacks_skipped_test.rb +0 -127
- data/test/unit/transition/transition_with_after_callbacks_test.rb +0 -93
- data/test/unit/transition/transition_with_around_callbacks_test.rb +0 -141
- data/test/unit/transition/transition_with_before_callbacks_skipped_test.rb +0 -30
- data/test/unit/transition/transition_with_before_callbacks_test.rb +0 -104
- data/test/unit/transition/transition_with_custom_machine_attribute_test.rb +0 -28
- data/test/unit/transition/transition_with_different_states_test.rb +0 -18
- data/test/unit/transition/transition_with_dynamic_to_value_test.rb +0 -19
- data/test/unit/transition/transition_with_failure_callbacks_test.rb +0 -84
- data/test/unit/transition/transition_with_invalid_nodes_test.rb +0 -29
- data/test/unit/transition/transition_with_mixed_callbacks_test.rb +0 -105
- data/test/unit/transition/transition_with_multiple_after_callbacks_test.rb +0 -40
- data/test/unit/transition/transition_with_multiple_around_callbacks_test.rb +0 -114
- data/test/unit/transition/transition_with_multiple_before_callbacks_test.rb +0 -40
- data/test/unit/transition/transition_with_multiple_failure_callbacks_test.rb +0 -40
- data/test/unit/transition/transition_with_namespace_test.rb +0 -47
- data/test/unit/transition/transition_with_perform_arguments_test.rb +0 -35
- data/test/unit/transition/transition_with_transactions_test.rb +0 -42
- data/test/unit/transition/transition_without_callbacks_test.rb +0 -33
- data/test/unit/transition/transition_without_reading_state_test.rb +0 -22
- data/test/unit/transition/transition_without_running_action_test.rb +0 -47
- data/test/unit/transition_collection/attribute_transition_collection_by_default_test.rb +0 -23
- data/test/unit/transition_collection/attribute_transition_collection_marshalling_test.rb +0 -64
- data/test/unit/transition_collection/attribute_transition_collection_with_action_error_test.rb +0 -44
- data/test/unit/transition_collection/attribute_transition_collection_with_action_failed_test.rb +0 -44
- data/test/unit/transition_collection/attribute_transition_collection_with_after_callback_error_test.rb +0 -32
- data/test/unit/transition_collection/attribute_transition_collection_with_after_callback_halt_test.rb +0 -33
- data/test/unit/transition_collection/attribute_transition_collection_with_around_after_yield_callback_error_test.rb +0 -32
- data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_after_yield_error_test.rb +0 -32
- data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_after_yield_halt_test.rb +0 -33
- data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_before_yield_halt_test.rb +0 -33
- data/test/unit/transition_collection/attribute_transition_collection_with_before_callback_error_test.rb +0 -32
- data/test/unit/transition_collection/attribute_transition_collection_with_before_callback_halt_test.rb +0 -33
- data/test/unit/transition_collection/attribute_transition_collection_with_callbacks_test.rb +0 -68
- data/test/unit/transition_collection/attribute_transition_collection_with_event_transitions_test.rb +0 -41
- data/test/unit/transition_collection/attribute_transition_collection_with_events_test.rb +0 -44
- data/test/unit/transition_collection/attribute_transition_collection_with_skipped_after_callbacks_test.rb +0 -42
- data/test/unit/transition_collection/transition_collection_by_default_test.rb +0 -23
- data/test/unit/transition_collection/transition_collection_empty_with_block_test.rb +0 -23
- data/test/unit/transition_collection/transition_collection_empty_without_block_test.rb +0 -12
- data/test/unit/transition_collection/transition_collection_invalid_test.rb +0 -21
- data/test/unit/transition_collection/transition_collection_partial_invalid_test.rb +0 -69
- data/test/unit/transition_collection/transition_collection_test.rb +0 -26
- data/test/unit/transition_collection/transition_collection_valid_test.rb +0 -57
- data/test/unit/transition_collection/transition_collection_with_action_error_test.rb +0 -66
- data/test/unit/transition_collection/transition_collection_with_action_failed_test.rb +0 -60
- data/test/unit/transition_collection/transition_collection_with_action_hook_and_block_test.rb +0 -17
- data/test/unit/transition_collection/transition_collection_with_action_hook_and_skipped_action_test.rb +0 -17
- data/test/unit/transition_collection/transition_collection_with_action_hook_and_skipped_after_callbacks_test.rb +0 -37
- data/test/unit/transition_collection/transition_collection_with_action_hook_base_test.rb +0 -34
- data/test/unit/transition_collection/transition_collection_with_action_hook_error_test.rb +0 -29
- data/test/unit/transition_collection/transition_collection_with_action_hook_invalid_test.rb +0 -17
- data/test/unit/transition_collection/transition_collection_with_action_hook_multiple_test.rb +0 -79
- data/test/unit/transition_collection/transition_collection_with_action_hook_test.rb +0 -45
- data/test/unit/transition_collection/transition_collection_with_action_hook_with_different_actions_test.rb +0 -48
- data/test/unit/transition_collection/transition_collection_with_action_hook_with_nil_action_test.rb +0 -42
- data/test/unit/transition_collection/transition_collection_with_after_callback_halt_test.rb +0 -47
- data/test/unit/transition_collection/transition_collection_with_before_callback_halt_test.rb +0 -51
- data/test/unit/transition_collection/transition_collection_with_block_test.rb +0 -46
- data/test/unit/transition_collection/transition_collection_with_callbacks_test.rb +0 -135
- data/test/unit/transition_collection/transition_collection_with_different_actions_test.rb +0 -189
- data/test/unit/transition_collection/transition_collection_with_duplicate_actions_test.rb +0 -48
- data/test/unit/transition_collection/transition_collection_with_empty_actions_test.rb +0 -41
- data/test/unit/transition_collection/transition_collection_with_mixed_actions_test.rb +0 -41
- data/test/unit/transition_collection/transition_collection_with_skipped_actions_and_block_test.rb +0 -34
- data/test/unit/transition_collection/transition_collection_with_skipped_actions_test.rb +0 -69
- data/test/unit/transition_collection/transition_collection_with_skipped_after_callbacks_and_around_callbacks_test.rb +0 -53
- data/test/unit/transition_collection/transition_collection_with_skipped_after_callbacks_test.rb +0 -34
- data/test/unit/transition_collection/transition_collection_with_transactions_test.rb +0 -65
- 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,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
|