state_machines 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/LICENSE.txt +1 -1
- data/README.md +18 -13
- data/lib/state_machines/branch.rb +81 -79
- data/lib/state_machines/callback.rb +22 -21
- data/lib/state_machines/eval_helpers.rb +15 -15
- data/lib/state_machines/event.rb +31 -28
- data/lib/state_machines/event_collection.rb +26 -25
- data/lib/state_machines/extensions.rb +2 -2
- data/lib/state_machines/helper_module.rb +1 -1
- data/lib/state_machines/integrations/base.rb +2 -5
- data/lib/state_machines/integrations.rb +9 -13
- data/lib/state_machines/machine.rb +386 -379
- data/lib/state_machines/machine_collection.rb +11 -10
- data/lib/state_machines/macro_methods.rb +100 -100
- data/lib/state_machines/matcher.rb +23 -23
- data/lib/state_machines/matcher_helpers.rb +11 -11
- data/lib/state_machines/node_collection.rb +15 -13
- data/lib/state_machines/path.rb +56 -55
- data/lib/state_machines/path_collection.rb +38 -38
- data/lib/state_machines/state.rb +28 -22
- data/lib/state_machines/state_collection.rb +21 -20
- data/lib/state_machines/state_context.rb +33 -35
- data/lib/state_machines/transition.rb +180 -178
- data/lib/state_machines/transition_collection.rb +170 -168
- data/lib/state_machines/version.rb +1 -1
- metadata +5 -852
- data/.gitignore +0 -21
- data/.rspec +0 -3
- data/.travis.yml +0 -14
- data/Changelog.md +0 -16
- data/Contributors.md +0 -39
- data/Gemfile +0 -8
- data/Rakefile +0 -12
- data/Testing.md +0 -0
- data/state_machines.gemspec +0 -23
- 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/model_base.rb +0 -6
- data/test/files/models/motorcycle.rb +0 -11
- 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/motorcycle_test.rb +0 -46
- 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_on_requirements_test.rb +0 -20
- 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 -27
- 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_attributes_with_validations_test.rb +0 -72
- 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 -51
- data/test/unit/transition_collection/transition_collection_with_before_callback_halt_test.rb +0 -47
- 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
data/lib/state_machines/event.rb
CHANGED
@@ -12,7 +12,7 @@ module StateMachines
|
|
12
12
|
# The name of the event
|
13
13
|
attr_reader :name
|
14
14
|
|
15
|
-
# The fully-qualified name of the event, scoped by the machine's namespace
|
15
|
+
# The fully-qualified name of the event, scoped by the machine's namespace
|
16
16
|
attr_reader :qualified_name
|
17
17
|
|
18
18
|
# The human-readable name for the event
|
@@ -27,7 +27,7 @@ module StateMachines
|
|
27
27
|
attr_reader :known_states
|
28
28
|
|
29
29
|
# Creates a new event within the context of the given machine
|
30
|
-
#
|
30
|
+
#
|
31
31
|
# Configuration options:
|
32
32
|
# * <tt>:human_name</tt> - The human-readable version of this event's name
|
33
33
|
def initialize(machine, name, options = {}) #:nodoc:
|
@@ -40,7 +40,7 @@ module StateMachines
|
|
40
40
|
reset
|
41
41
|
|
42
42
|
# Output a warning if another event has a conflicting qualified name
|
43
|
-
if conflict = machine.owner_class.state_machines.detect { |_other_name, other_machine| other_machine != @machine && other_machine.events[qualified_name, :qualified_name] }
|
43
|
+
if (conflict = machine.owner_class.state_machines.detect { |_other_name, other_machine| other_machine != @machine && other_machine.events[qualified_name, :qualified_name] })
|
44
44
|
_name, other_machine = conflict
|
45
45
|
warn "Event #{qualified_name.inspect} for #{machine.name.inspect} is already defined in #{other_machine.name.inspect}"
|
46
46
|
else
|
@@ -70,18 +70,18 @@ module StateMachines
|
|
70
70
|
|
71
71
|
# Creates a new transition that determines what to change the current state
|
72
72
|
# to when this event fires.
|
73
|
-
#
|
73
|
+
#
|
74
74
|
# Since this transition is being defined within an event context, you do
|
75
75
|
# *not* need to specify the <tt>:on</tt> option for the transition. For
|
76
76
|
# example:
|
77
|
-
#
|
77
|
+
#
|
78
78
|
# state_machine do
|
79
79
|
# event :ignite do
|
80
80
|
# transition :parked => :idling, :idling => same, :if => :seatbelt_on? # Transitions to :idling if seatbelt is on
|
81
81
|
# transition all => :parked, :unless => :seatbelt_on? # Transitions to :parked if seatbelt is off
|
82
82
|
# end
|
83
83
|
# end
|
84
|
-
#
|
84
|
+
#
|
85
85
|
# See StateMachines::Machine#transition for a description of the possible
|
86
86
|
# configurations for defining transitions.
|
87
87
|
def transition(options)
|
@@ -91,16 +91,16 @@ module StateMachines
|
|
91
91
|
# requirements
|
92
92
|
options.assert_valid_keys(:from, :to, :except_from, :except_to, :if, :unless) if (options.keys - [:from, :to, :on, :except_from, :except_to, :except_on, :if, :unless]).empty?
|
93
93
|
|
94
|
-
branches << branch = Branch.new(options.merge(:
|
94
|
+
branches << branch = Branch.new(options.merge(on: name))
|
95
95
|
@known_states |= branch.known_states
|
96
96
|
branch
|
97
97
|
end
|
98
98
|
|
99
99
|
# Determines whether any transitions can be performed for this event based
|
100
100
|
# on the current state of the given object.
|
101
|
-
#
|
101
|
+
#
|
102
102
|
# If the event can't be fired, then this will return false, otherwise true.
|
103
|
-
#
|
103
|
+
#
|
104
104
|
# *Note* that this will not take the object context into account. Although
|
105
105
|
# a transition may be possible based on the state machine definition,
|
106
106
|
# object-specific behaviors (like validations) may prevent it from firing.
|
@@ -110,7 +110,7 @@ module StateMachines
|
|
110
110
|
|
111
111
|
# Finds and builds the next transition that can be performed on the given
|
112
112
|
# object. If no transitions can be made, then this will return nil.
|
113
|
-
#
|
113
|
+
#
|
114
114
|
# Valid requirement options:
|
115
115
|
# * <tt>:from</tt> - One or more states being transitioned from. If none
|
116
116
|
# are specified, then this will be the object's current state.
|
@@ -120,10 +120,10 @@ module StateMachines
|
|
120
120
|
# conditionals defined for each one. Default is true.
|
121
121
|
def transition_for(object, requirements = {})
|
122
122
|
requirements.assert_valid_keys(:from, :to, :guard)
|
123
|
-
requirements[:from] = machine.states.match!(object).name unless custom_from_state = requirements.include?(:from)
|
123
|
+
requirements[:from] = machine.states.match!(object).name unless (custom_from_state = requirements.include?(:from))
|
124
124
|
|
125
125
|
branches.each do |branch|
|
126
|
-
if match = branch.match(object, requirements)
|
126
|
+
if (match = branch.match(object, requirements))
|
127
127
|
# Branch allows for the transition to occur
|
128
128
|
from = requirements[:from]
|
129
129
|
to = if match[:to].is_a?(LoopbackMatcher)
|
@@ -145,27 +145,29 @@ module StateMachines
|
|
145
145
|
# Attempts to perform the next available transition on the given object.
|
146
146
|
# If no transitions can be made, then this will return false, otherwise
|
147
147
|
# true.
|
148
|
-
#
|
148
|
+
#
|
149
149
|
# Any additional arguments are passed to the StateMachines::Transition#perform
|
150
150
|
# instance method.
|
151
151
|
def fire(object, *args)
|
152
152
|
machine.reset(object)
|
153
153
|
|
154
|
-
if transition = transition_for(object)
|
154
|
+
if (transition = transition_for(object))
|
155
155
|
transition.perform(*args)
|
156
156
|
else
|
157
|
-
on_failure(object)
|
157
|
+
on_failure(object, *args)
|
158
158
|
false
|
159
159
|
end
|
160
160
|
end
|
161
161
|
|
162
162
|
# Marks the object as invalid and runs any failure callbacks associated with
|
163
163
|
# this event. This should get called anytime this event fails to transition.
|
164
|
-
def on_failure(object)
|
164
|
+
def on_failure(object, *args)
|
165
165
|
state = machine.states.match!(object)
|
166
166
|
machine.invalidate(object, :state, :invalid_transition, [[:event, human_name(object.class)], [:state, state.human_name(object.class)]])
|
167
167
|
|
168
|
-
Transition.new(object, machine, name, state.name, state.name)
|
168
|
+
transition = Transition.new(object, machine, name, state.name, state.name)
|
169
|
+
transition.args = args if args.any?
|
170
|
+
transition.run_callbacks(before: false)
|
169
171
|
end
|
170
172
|
|
171
173
|
# Resets back to the initial state of the event, with no branches / known
|
@@ -183,9 +185,9 @@ module StateMachines
|
|
183
185
|
end
|
184
186
|
|
185
187
|
# Generates a nicely formatted description of this event's contents.
|
186
|
-
#
|
188
|
+
#
|
187
189
|
# For example,
|
188
|
-
#
|
190
|
+
#
|
189
191
|
# event = StateMachines::Event.new(machine, :park)
|
190
192
|
# event.transition all - :idling => :parked, :idling => same
|
191
193
|
# event # => #<StateMachines::Event name=:park transitions=[all - :idling => :parked, :idling => same]>
|
@@ -199,29 +201,30 @@ module StateMachines
|
|
199
201
|
"#<#{self.class} name=#{name.inspect} transitions=[#{transitions * ', '}]>"
|
200
202
|
end
|
201
203
|
|
202
|
-
|
204
|
+
protected
|
205
|
+
|
203
206
|
# Add the various instance methods that can transition the object using
|
204
207
|
# the current event
|
205
208
|
def add_actions
|
206
209
|
# Checks whether the event can be fired on the current object
|
207
|
-
machine.define_helper(:instance, "can_#{qualified_name}?") do |machine, object, *args|
|
208
|
-
machine.event(name).can_fire?(object, *args)
|
210
|
+
machine.define_helper(:instance, "can_#{qualified_name}?") do |machine, object, *args, **kwargs|
|
211
|
+
machine.event(name).can_fire?(object, *args, **kwargs)
|
209
212
|
end
|
210
213
|
|
211
214
|
# Gets the next transition that would be performed if the event were
|
212
215
|
# fired now
|
213
|
-
machine.define_helper(:instance, "#{qualified_name}_transition") do |machine, object, *args|
|
214
|
-
machine.event(name).transition_for(object, *args)
|
216
|
+
machine.define_helper(:instance, "#{qualified_name}_transition") do |machine, object, *args, **kwargs|
|
217
|
+
machine.event(name).transition_for(object, *args, **kwargs)
|
215
218
|
end
|
216
219
|
|
217
220
|
# Fires the event
|
218
|
-
machine.define_helper(:instance, qualified_name) do |machine, object, *args|
|
219
|
-
machine.event(name).fire(object, *args)
|
221
|
+
machine.define_helper(:instance, qualified_name) do |machine, object, *args, **kwargs|
|
222
|
+
machine.event(name).fire(object, *args, **kwargs)
|
220
223
|
end
|
221
224
|
|
222
225
|
# Fires the event, raising an exception if it fails
|
223
|
-
machine.define_helper(:instance, "#{qualified_name}!") do |machine, object, *args|
|
224
|
-
object.send(qualified_name, *args) || raise(StateMachines::InvalidTransition.new(object, machine, name))
|
226
|
+
machine.define_helper(:instance, "#{qualified_name}!") do |machine, object, *args, **kwargs|
|
227
|
+
object.send(qualified_name, *args, **kwargs) || raise(StateMachines::InvalidTransition.new(object, machine, name))
|
225
228
|
end
|
226
229
|
end
|
227
230
|
end
|
@@ -2,11 +2,11 @@ module StateMachines
|
|
2
2
|
# Represents a collection of events in a state machine
|
3
3
|
class EventCollection < NodeCollection
|
4
4
|
def initialize(machine) #:nodoc:
|
5
|
-
super(machine, :
|
5
|
+
super(machine, index: [:name, :qualified_name])
|
6
6
|
end
|
7
7
|
|
8
8
|
# Gets the list of events that can be fired on the given object.
|
9
|
-
#
|
9
|
+
#
|
10
10
|
# Valid requirement options:
|
11
11
|
# * <tt>:from</tt> - One or more states being transitioned from. If none
|
12
12
|
# are specified, then this will be the object's current state.
|
@@ -16,26 +16,26 @@ module StateMachines
|
|
16
16
|
# are specified, then this will match any event.
|
17
17
|
# * <tt>:guard</tt> - Whether to guard transitions with the if/unless
|
18
18
|
# conditionals defined for each one. Default is true.
|
19
|
-
#
|
19
|
+
#
|
20
20
|
# == Examples
|
21
|
-
#
|
21
|
+
#
|
22
22
|
# class Vehicle
|
23
23
|
# state_machine :initial => :parked do
|
24
24
|
# event :park do
|
25
25
|
# transition :idling => :parked
|
26
26
|
# end
|
27
|
-
#
|
27
|
+
#
|
28
28
|
# event :ignite do
|
29
29
|
# transition :parked => :idling
|
30
30
|
# end
|
31
31
|
# end
|
32
32
|
# end
|
33
|
-
#
|
33
|
+
#
|
34
34
|
# events = Vehicle.state_machine(:state).events
|
35
|
-
#
|
35
|
+
#
|
36
36
|
# vehicle = Vehicle.new # => #<Vehicle:0xb7c464b0 @state="parked">
|
37
37
|
# events.valid_for(vehicle) # => [#<StateMachines::Event name=:ignite transitions=[:parked => :idling]>]
|
38
|
-
#
|
38
|
+
#
|
39
39
|
# vehicle.state = 'idling'
|
40
40
|
# events.valid_for(vehicle) # => [#<StateMachines::Event name=:park transitions=[:idling => :parked]>]
|
41
41
|
def valid_for(object, requirements = {})
|
@@ -43,7 +43,7 @@ module StateMachines
|
|
43
43
|
end
|
44
44
|
|
45
45
|
# Gets the list of transitions that can be run on the given object.
|
46
|
-
#
|
46
|
+
#
|
47
47
|
# Valid requirement options:
|
48
48
|
# * <tt>:from</tt> - One or more states being transitioned from. If none
|
49
49
|
# are specified, then this will be the object's current state.
|
@@ -53,29 +53,29 @@ module StateMachines
|
|
53
53
|
# are specified, then this will match any event.
|
54
54
|
# * <tt>:guard</tt> - Whether to guard transitions with the if/unless
|
55
55
|
# conditionals defined for each one. Default is true.
|
56
|
-
#
|
56
|
+
#
|
57
57
|
# == Examples
|
58
|
-
#
|
58
|
+
#
|
59
59
|
# class Vehicle
|
60
60
|
# state_machine :initial => :parked do
|
61
61
|
# event :park do
|
62
62
|
# transition :idling => :parked
|
63
63
|
# end
|
64
|
-
#
|
64
|
+
#
|
65
65
|
# event :ignite do
|
66
66
|
# transition :parked => :idling
|
67
67
|
# end
|
68
68
|
# end
|
69
69
|
# end
|
70
|
-
#
|
70
|
+
#
|
71
71
|
# events = Vehicle.state_machine.events
|
72
|
-
#
|
72
|
+
#
|
73
73
|
# vehicle = Vehicle.new # => #<Vehicle:0xb7c464b0 @state="parked">
|
74
74
|
# events.transitions_for(vehicle) # => [#<StateMachines::Transition attribute=:state event=:ignite from="parked" from_name=:parked to="idling" to_name=:idling>]
|
75
|
-
#
|
75
|
+
#
|
76
76
|
# vehicle.state = 'idling'
|
77
77
|
# events.transitions_for(vehicle) # => [#<StateMachines::Transition attribute=:state event=:park from="idling" from_name=:idling to="parked" to_name=:parked>]
|
78
|
-
#
|
78
|
+
#
|
79
79
|
# # Search for explicit transitions regardless of the current state
|
80
80
|
# events.transitions_for(vehicle, :from => :parked) # => [#<StateMachines::Transition attribute=:state event=:ignite from="parked" from_name=:parked to="idling" to_name=:idling>]
|
81
81
|
def transitions_for(object, requirements = {})
|
@@ -86,12 +86,12 @@ module StateMachines
|
|
86
86
|
# given object's event attribute. This also takes an additional parameter
|
87
87
|
# for automatically invalidating the object if the event or transition are
|
88
88
|
# invalid. By default, this is turned off.
|
89
|
-
#
|
89
|
+
#
|
90
90
|
# *Note* that if a transition has already been generated for the event, then
|
91
91
|
# that transition will be used.
|
92
|
-
#
|
92
|
+
#
|
93
93
|
# == Examples
|
94
|
-
#
|
94
|
+
#
|
95
95
|
# class Vehicle < ActiveRecord::Base
|
96
96
|
# state_machine :initial => :parked do
|
97
97
|
# event :ignite do
|
@@ -99,16 +99,16 @@ module StateMachines
|
|
99
99
|
# end
|
100
100
|
# end
|
101
101
|
# end
|
102
|
-
#
|
102
|
+
#
|
103
103
|
# vehicle = Vehicle.new # => #<Vehicle id: nil, state: "parked">
|
104
104
|
# events = Vehicle.state_machine.events
|
105
|
-
#
|
105
|
+
#
|
106
106
|
# vehicle.state_event = nil
|
107
107
|
# events.attribute_transition_for(vehicle) # => nil # Event isn't defined
|
108
|
-
#
|
108
|
+
#
|
109
109
|
# vehicle.state_event = 'invalid'
|
110
110
|
# events.attribute_transition_for(vehicle) # => false # Event is invalid
|
111
|
-
#
|
111
|
+
#
|
112
112
|
# vehicle.state_event = 'ignite'
|
113
113
|
# events.attribute_transition_for(vehicle) # => #<StateMachines::Transition attribute=:state event=:ignite from="parked" from_name=:parked to="idling" to_name=:idling>
|
114
114
|
def attribute_transition_for(object, invalidate = false)
|
@@ -118,7 +118,7 @@ module StateMachines
|
|
118
118
|
machine.read(object, :event_transition) || if event_name = machine.read(object, :event)
|
119
119
|
if event = self[event_name.to_sym, :name]
|
120
120
|
event.transition_for(object) || begin
|
121
|
-
|
121
|
+
# No valid transition: invalidate
|
122
122
|
machine.invalidate(object, :event, :invalid_event, [[:state, machine.states.match!(object).human_name(object.class)]]) if invalidate
|
123
123
|
false
|
124
124
|
end
|
@@ -131,7 +131,8 @@ module StateMachines
|
|
131
131
|
|
132
132
|
end
|
133
133
|
|
134
|
-
|
134
|
+
private
|
135
|
+
|
135
136
|
def match(requirements) #:nodoc:
|
136
137
|
requirements && requirements[:on] ? [fetch(requirements.delete(:on))] : self
|
137
138
|
end
|
@@ -133,13 +133,13 @@ module StateMachines
|
|
133
133
|
# vehicle = Vehicle.new # => #<Vehicle:0xb7c02850 @state="parked", @alarm_state="active">
|
134
134
|
# vehicle.fire_events(:ignite, :disable_alarm) # => true
|
135
135
|
#
|
136
|
-
# vehicle.fire_events!(:ignite, :disable_alarm) # => StateMachines::
|
136
|
+
# vehicle.fire_events!(:ignite, :disable_alarm) # => StateMachines::InvalidParallelTransition: Cannot run events in parallel: ignite, disable_alarm
|
137
137
|
def fire_events!(*events)
|
138
138
|
run_action = [true, false].include?(events.last) ? events.pop : true
|
139
139
|
fire_events(*(events + [run_action])) || fail(StateMachines::InvalidParallelTransition.new(self, events))
|
140
140
|
end
|
141
141
|
|
142
|
-
|
142
|
+
protected
|
143
143
|
|
144
144
|
def initialize_state_machines(options = {}, &block) #:nodoc:
|
145
145
|
self.class.state_machines.initialize_states(self, options, &block)
|
@@ -24,20 +24,17 @@ module StateMachines
|
|
24
24
|
|
25
25
|
# Whether the integration should be used for the given class.
|
26
26
|
def matches?(klass)
|
27
|
-
|
27
|
+
matching_ancestors.any? { |ancestor| klass <= ancestor }
|
28
28
|
end
|
29
29
|
|
30
30
|
# Whether the integration should be used for the given list of ancestors.
|
31
31
|
def matches_ancestors?(ancestors)
|
32
32
|
(ancestors & matching_ancestors).any?
|
33
33
|
end
|
34
|
-
|
35
34
|
end
|
36
35
|
|
37
|
-
extend ClassMethods
|
38
|
-
|
39
36
|
def self.included(base) #:nodoc:
|
40
|
-
base.
|
37
|
+
base.extend ClassMethods
|
41
38
|
end
|
42
39
|
end
|
43
40
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'set'
|
2
|
-
|
3
1
|
module StateMachines
|
4
2
|
# Integrations allow state machines to take advantage of features within the
|
5
3
|
# context of a particular library. This is currently most useful with
|
@@ -11,10 +9,10 @@ module StateMachines
|
|
11
9
|
# * Scopes
|
12
10
|
# * Callbacks
|
13
11
|
# * Validation errors
|
14
|
-
#
|
12
|
+
#
|
15
13
|
# This type of integration allows the user to work with state machines in a
|
16
14
|
# fashion similar to other object models in their application.
|
17
|
-
#
|
15
|
+
#
|
18
16
|
# The integration interface is loosely defined by various unimplemented
|
19
17
|
# methods in the StateMachines::Machine class. See that class or the various
|
20
18
|
# built-in integrations for more information about how to define additional
|
@@ -54,24 +52,23 @@ module StateMachines
|
|
54
52
|
|
55
53
|
alias_method :list, :integrations
|
56
54
|
|
57
|
-
|
58
55
|
# Attempts to find an integration that matches the given class. This will
|
59
56
|
# look through all of the built-in integrations under the StateMachines::Integrations
|
60
57
|
# namespace and find one that successfully matches the class.
|
61
|
-
#
|
58
|
+
#
|
62
59
|
# == Examples
|
63
|
-
#
|
60
|
+
#
|
64
61
|
# class Vehicle
|
65
62
|
# end
|
66
|
-
#
|
63
|
+
#
|
67
64
|
# class ActiveModelVehicle
|
68
65
|
# include ActiveModel::Observing
|
69
66
|
# include ActiveModel::Validations
|
70
67
|
# end
|
71
|
-
#
|
68
|
+
#
|
72
69
|
# class ActiveRecordVehicle < ActiveRecord::Base
|
73
70
|
# end
|
74
|
-
#
|
71
|
+
#
|
75
72
|
# StateMachines::Integrations.match(Vehicle) # => nil
|
76
73
|
# StateMachines::Integrations.match(ActiveModelVehicle) # => StateMachines::Integrations::ActiveModel
|
77
74
|
# StateMachines::Integrations.match(ActiveRecordVehicle) # => StateMachines::Integrations::ActiveRecord
|
@@ -86,7 +83,7 @@ module StateMachines
|
|
86
83
|
# == Examples
|
87
84
|
#
|
88
85
|
# StateMachines::Integrations.match_ancestors([]) # => nil
|
89
|
-
# StateMachines::Integrations.match_ancestors([
|
86
|
+
# StateMachines::Integrations.match_ancestors([ActiveRecord::Base]) # => StateMachines::Integrations::ActiveModel
|
90
87
|
def match_ancestors(ancestors)
|
91
88
|
integrations.detect { |integration| integration.matches_ancestors?(ancestors) }
|
92
89
|
end
|
@@ -103,8 +100,7 @@ module StateMachines
|
|
103
100
|
integrations.detect { |integration| integration.integration_name == name } || raise(IntegrationNotFound.new(name))
|
104
101
|
end
|
105
102
|
|
106
|
-
|
107
|
-
private
|
103
|
+
private
|
108
104
|
|
109
105
|
def add(integration)
|
110
106
|
if integration.respond_to?(:integration_name)
|