state_machines 0.0.2 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +10 -4
- data/Changelog.md +0 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +1 -1
- data/README.md +6 -8
- data/Rakefile +9 -6
- data/Testing.md +0 -0
- data/lib/state_machines/assertions.rb +5 -5
- data/lib/state_machines/error.rb +2 -1
- data/lib/state_machines/integrations.rb +18 -11
- data/lib/state_machines/machine.rb +8 -12
- data/lib/state_machines/version.rb +1 -1
- data/state_machines.gemspec +6 -8
- data/test/files/integrations/event_on_failure_integration.rb +10 -0
- data/test/files/integrations/vehicle.rb +7 -0
- data/{spec/internal/app → test/files}/models/auto_shop.rb +0 -0
- data/{spec/internal/app → test/files}/models/car.rb +2 -0
- data/{spec/internal/app → test/files}/models/model_base.rb +0 -0
- data/{spec/internal/app → test/files}/models/motorcycle.rb +2 -0
- data/{spec/internal/app → test/files}/models/traffic_light.rb +2 -2
- data/{spec/internal/app → test/files}/models/vehicle.rb +9 -5
- data/test/files/node.rb +5 -0
- data/test/files/switch.rb +15 -0
- data/test/functional/auto_shop_available_test.rb +20 -0
- data/test/functional/auto_shop_busy_test.rb +25 -0
- data/test/functional/car_backing_up_test.rb +45 -0
- data/test/functional/car_test.rb +49 -0
- data/test/functional/motorcycle_test.rb +46 -0
- data/test/functional/traffic_light_caution_test.rb +17 -0
- data/test/functional/traffic_light_proceed_test.rb +17 -0
- data/test/functional/traffic_light_stop_test.rb +26 -0
- data/test/functional/vehicle_first_gear_test.rb +42 -0
- data/test/functional/vehicle_idling_test.rb +59 -0
- data/test/functional/vehicle_locked_test.rb +29 -0
- data/test/functional/vehicle_parked_test.rb +53 -0
- data/test/functional/vehicle_repaired_test.rb +20 -0
- data/test/functional/vehicle_second_gear_test.rb +42 -0
- data/test/functional/vehicle_stalled_test.rb +65 -0
- data/test/functional/vehicle_test.rb +20 -0
- data/test/functional/vehicle_third_gear_test.rb +42 -0
- data/test/functional/vehicle_unsaved_test.rb +181 -0
- data/test/functional/vehicle_with_event_attributes_test.rb +30 -0
- data/test/functional/vehicle_with_parallel_events_test.rb +36 -0
- data/test/test_helper.rb +15 -0
- data/test/unit/assertions/assert_exclusive_keys_test.rb +22 -0
- data/test/unit/assertions/assert_valid_key_test.rb +12 -0
- data/test/unit/branch/branch_test.rb +28 -0
- data/test/unit/branch/branch_with_conflicting_conditionals_test.rb +27 -0
- data/test/unit/branch/branch_with_conflicting_from_requirements_test.rb +8 -0
- data/test/unit/branch/branch_with_conflicting_on_requirements_test.rb +8 -0
- data/test/unit/branch/branch_with_conflicting_to_requirements_test.rb +8 -0
- data/test/unit/branch/branch_with_different_requirements_test.rb +41 -0
- data/test/unit/branch/branch_with_except_from_matcher_requirement_test.rb +8 -0
- data/test/unit/branch/branch_with_except_from_requirement_test.rb +36 -0
- data/test/unit/branch/branch_with_except_on_matcher_requirement_test.rb +8 -0
- data/test/unit/branch/branch_with_except_on_requirement_test.rb +36 -0
- data/test/unit/branch/branch_with_except_to_matcher_requirement_test.rb +8 -0
- data/test/unit/branch/branch_with_except_to_requirement_test.rb +36 -0
- data/test/unit/branch/branch_with_from_matcher_requirement_test.rb +20 -0
- data/test/unit/branch/branch_with_from_requirement_test.rb +45 -0
- data/test/unit/branch/branch_with_if_conditional_test.rb +27 -0
- data/test/unit/branch/branch_with_implicit_and_explicit_requirements_test.rb +23 -0
- data/test/unit/branch/branch_with_implicit_from_requirement_matcher_test.rb +20 -0
- data/test/unit/branch/branch_with_implicit_requirement_test.rb +20 -0
- data/test/unit/branch/branch_with_implicit_to_requirement_matcher_test.rb +16 -0
- data/test/unit/branch/branch_with_multiple_except_from_requirements_test.rb +20 -0
- data/test/unit/branch/branch_with_multiple_except_on_requirements_test.rb +16 -0
- data/test/unit/branch/branch_with_multiple_except_to_requirements_test.rb +20 -0
- data/test/unit/branch/branch_with_multiple_from_requirements_test.rb +16 -0
- data/test/unit/branch/branch_with_multiple_if_conditionals_test.rb +20 -0
- data/test/unit/branch/branch_with_multiple_implicit_requirements_test.rb +53 -0
- data/test/unit/branch/branch_with_multiple_on_requirements_test.rb +20 -0
- data/test/unit/branch/branch_with_multiple_to_requirements_test.rb +20 -0
- data/test/unit/branch/branch_with_multiple_unless_conditionals_test.rb +20 -0
- data/test/unit/branch/branch_with_nil_requirements_test.rb +28 -0
- data/test/unit/branch/branch_with_no_requirements_test.rb +36 -0
- data/test/unit/branch/branch_with_on_matcher_requirement_test.rb +16 -0
- data/test/unit/branch/branch_with_on_requirement_test.rb +45 -0
- data/test/unit/branch/branch_with_to_matcher_requirement_test.rb +20 -0
- data/test/unit/branch/branch_with_to_requirement_test.rb +45 -0
- data/test/unit/branch/branch_with_unless_conditional_test.rb +27 -0
- data/test/unit/branch/branch_without_guards_test.rb +27 -0
- data/test/unit/callback/callback_by_default_test.rb +25 -0
- data/test/unit/callback/callback_test.rb +53 -0
- data/test/unit/callback/callback_with_application_bound_object_test.rb +23 -0
- data/test/unit/callback/callback_with_application_terminator_test.rb +24 -0
- data/test/unit/callback/callback_with_arguments_test.rb +14 -0
- data/test/unit/callback/callback_with_around_type_and_arguments_test.rb +25 -0
- data/test/unit/callback/callback_with_around_type_and_block_test.rb +44 -0
- data/test/unit/callback/callback_with_around_type_and_bound_method_test.rb +23 -0
- data/test/unit/callback/callback_with_around_type_and_multiple_methods_test.rb +93 -0
- data/test/unit/callback/callback_with_around_type_and_terminator_test.rb +17 -0
- data/test/unit/callback/callback_with_block_test.rb +20 -0
- data/test/unit/callback/callback_with_bound_method_and_arguments_test.rb +28 -0
- data/test/unit/callback/callback_with_bound_method_test.rb +35 -0
- data/test/unit/callback/callback_with_do_method_test.rb +18 -0
- data/test/unit/callback/callback_with_explicit_requirements_test.rb +32 -0
- data/test/unit/callback/callback_with_if_condition_test.rb +17 -0
- data/test/unit/callback/callback_with_implicit_requirements_test.rb +32 -0
- data/test/unit/callback/callback_with_method_argument_test.rb +18 -0
- data/test/unit/callback/callback_with_mixed_methods_test.rb +31 -0
- data/test/unit/callback/callback_with_multiple_bound_methods_test.rb +21 -0
- data/test/unit/callback/callback_with_multiple_do_methods_test.rb +29 -0
- data/test/unit/callback/callback_with_multiple_method_arguments_test.rb +29 -0
- data/test/unit/callback/callback_with_terminator_test.rb +22 -0
- data/test/unit/callback/callback_with_unbound_method_test.rb +14 -0
- data/test/unit/callback/callback_with_unless_condition_test.rb +17 -0
- data/test/unit/callback/callback_without_arguments_test.rb +14 -0
- data/test/unit/callback/callback_without_terminator_test.rb +12 -0
- data/test/unit/error/error_by_default_test.rb +21 -0
- data/test/unit/error/error_with_message_test.rb +23 -0
- data/test/unit/eval_helper/eval_helpers_base_test.rb +8 -0
- data/test/unit/eval_helper/eval_helpers_proc_block_and_explicit_arguments_test.rb +14 -0
- data/test/unit/eval_helper/eval_helpers_proc_block_and_implicit_arguments_test.rb +14 -0
- data/test/unit/eval_helper/eval_helpers_proc_test.rb +13 -0
- data/test/unit/eval_helper/eval_helpers_proc_with_arguments_test.rb +13 -0
- data/test/unit/eval_helper/eval_helpers_proc_with_block_test.rb +13 -0
- data/test/unit/eval_helper/eval_helpers_proc_with_block_without_arguments_test.rb +18 -0
- data/test/unit/eval_helper/eval_helpers_proc_with_block_without_object_test.rb +14 -0
- data/test/unit/eval_helper/eval_helpers_proc_without_arguments_test.rb +19 -0
- data/test/unit/eval_helper/eval_helpers_string_test.rb +25 -0
- data/test/unit/eval_helper/eval_helpers_string_with_block_test.rb +12 -0
- data/test/unit/eval_helper/eval_helpers_symbol_method_missing_test.rb +20 -0
- data/test/unit/eval_helper/eval_helpers_symbol_private_test.rb +17 -0
- data/test/unit/eval_helper/eval_helpers_symbol_protected_test.rb +17 -0
- data/test/unit/eval_helper/eval_helpers_symbol_tainted_method_test.rb +18 -0
- data/test/unit/eval_helper/eval_helpers_symbol_test.rb +16 -0
- data/test/unit/eval_helper/eval_helpers_symbol_with_arguments_and_block_test.rb +16 -0
- data/test/unit/eval_helper/eval_helpers_symbol_with_arguments_test.rb +16 -0
- data/test/unit/eval_helper/eval_helpers_symbol_with_block_test.rb +16 -0
- data/test/unit/eval_helper/eval_helpers_test.rb +13 -0
- data/test/unit/event/event_after_being_copied_test.rb +17 -0
- data/test/unit/event/event_by_default_test.rb +60 -0
- data/test/unit/event/event_context_test.rb +16 -0
- data/test/unit/event/event_on_failure_test.rb +44 -0
- data/test/unit/event/event_test.rb +34 -0
- data/test/unit/event/event_transitions_test.rb +62 -0
- data/test/unit/event/event_with_conflicting_helpers_after_definition_test.rb +79 -0
- data/test/unit/event/event_with_conflicting_helpers_before_definition_test.rb +58 -0
- data/test/unit/event/event_with_conflicting_machine_test.rb +48 -0
- data/test/unit/event/event_with_dynamic_human_name_test.rb +26 -0
- data/test/unit/event/event_with_human_name_test.rb +13 -0
- data/test/unit/event/event_with_invalid_current_state_test.rb +30 -0
- data/test/unit/event/event_with_machine_action_test.rb +33 -0
- data/test/unit/event/event_with_marshalling_test.rb +47 -0
- data/test/unit/event/event_with_matching_disabled_transitions_test.rb +115 -0
- data/test/unit/event/event_with_matching_enabled_transitions_test.rb +75 -0
- data/test/unit/event/event_with_multiple_transitions_test.rb +61 -0
- data/test/unit/event/event_with_namespace_test.rb +34 -0
- data/test/unit/event/event_with_transition_with_blacklisted_to_state_test.rb +60 -0
- data/test/unit/event/event_with_transition_with_loopback_state_test.rb +36 -0
- data/test/unit/event/event_with_transition_with_nil_to_state_test.rb +36 -0
- data/test/unit/event/event_with_transition_with_whitelisted_to_state_test.rb +51 -0
- data/test/unit/event/event_with_transition_without_to_state_test.rb +36 -0
- data/test/unit/event/event_with_transitions_test.rb +32 -0
- data/test/unit/event/event_without_matching_transitions_test.rb +41 -0
- data/test/unit/event/event_without_transitions_test.rb +28 -0
- data/{spec/state_machines/invalid_event_spec.rb → test/unit/event/invalid_event_test.rb} +8 -7
- data/test/unit/event_collection/event_collection_attribute_with_machine_action_test.rb +62 -0
- data/test/unit/event_collection/event_collection_attribute_with_namespaced_machine_test.rb +36 -0
- data/test/unit/event_collection/event_collection_by_default_test.rb +26 -0
- data/test/unit/event_collection/event_collection_test.rb +39 -0
- data/test/unit/event_collection/event_collection_with_custom_machine_attribute_test.rb +31 -0
- data/test/unit/event_collection/event_collection_with_events_with_transitions_test.rb +76 -0
- data/test/unit/event_collection/event_collection_with_multiple_events_test.rb +27 -0
- data/test/unit/event_collection/event_collection_with_validations_test.rb +75 -0
- data/test/unit/event_collection/event_collection_without_machine_action_test.rb +18 -0
- data/test/unit/event_collection/event_string_collection_test.rb +31 -0
- data/test/unit/helper_module_test.rb +17 -0
- data/test/unit/integrations/integration_finder_test.rb +16 -0
- data/test/unit/integrations/integration_matcher_test.rb +27 -0
- data/test/unit/invalid_transition/invalid_parallel_transition_test.rb +18 -0
- data/test/unit/invalid_transition/invalid_transition_test.rb +47 -0
- data/test/unit/invalid_transition/invalid_transition_with_integration_test.rb +47 -0
- data/test/unit/invalid_transition/invalid_transition_with_namespace_test.rb +32 -0
- data/test/unit/machine/machine_after_being_copied_test.rb +62 -0
- data/test/unit/machine/machine_after_changing_initial_state.rb +28 -0
- data/test/unit/machine/machine_after_changing_owner_class_test.rb +31 -0
- data/test/unit/machine/machine_by_default_test.rb +160 -0
- data/test/unit/machine/machine_finder_custom_options_test.rb +17 -0
- data/test/unit/machine/machine_finder_with_existing_machine_on_superclass_test.rb +86 -0
- data/test/unit/machine/machine_finder_with_existing_on_same_class_test.rb +23 -0
- data/test/unit/machine/machine_finder_without_existing_machine_test.rb +25 -0
- data/test/unit/machine/machine_persistence_test.rb +52 -0
- data/test/unit/machine/machine_state_initialization_test.rb +56 -0
- data/test/unit/machine/machine_test.rb +30 -0
- data/test/unit/machine/machine_with_action_already_overridden_test.rb +23 -0
- data/test/unit/machine/machine_with_action_defined_in_class_test.rb +37 -0
- data/test/unit/machine/machine_with_action_defined_in_included_module_test.rb +46 -0
- data/test/unit/machine/machine_with_action_defined_in_superclass_test.rb +43 -0
- data/test/unit/machine/machine_with_action_undefined_test.rb +33 -0
- data/test/unit/machine/machine_with_cached_state_test.rb +20 -0
- data/test/unit/machine/machine_with_class_helpers_test.rb +179 -0
- data/test/unit/machine/machine_with_conflicting_helpers_after_definition_test.rb +243 -0
- data/test/unit/machine/machine_with_conflicting_helpers_before_definition_test.rb +175 -0
- data/test/unit/machine/machine_with_custom_action_test.rb +11 -0
- data/test/unit/machine/machine_with_custom_attribute_test.rb +103 -0
- data/test/unit/machine/machine_with_custom_initialize_test.rb +24 -0
- data/test/unit/machine/machine_with_custom_integration_test.rb +69 -0
- data/test/unit/machine/machine_with_custom_invalidation_test.rb +40 -0
- data/test/unit/machine/machine_with_custom_name_test.rb +57 -0
- data/test/unit/machine/machine_with_custom_plural_test.rb +53 -0
- data/test/unit/machine/machine_with_dynamic_initial_state_test.rb +65 -0
- data/test/unit/machine/machine_with_event_matchers_test.rb +41 -0
- data/test/unit/machine/machine_with_events_test.rb +52 -0
- data/test/unit/machine/machine_with_events_with_custom_human_names_test.rb +18 -0
- data/test/unit/machine/machine_with_events_with_transitions_test.rb +37 -0
- data/test/unit/machine/machine_with_existing_event_test.rb +17 -0
- data/test/unit/machine/machine_with_existing_machines_on_owner_class_test.rb +20 -0
- data/test/unit/machine/machine_with_existing_machines_with_same_attributes_on_owner_class_test.rb +71 -0
- data/test/unit/machine/machine_with_existing_machines_with_same_attributes_on_owner_subclass_test.rb +31 -0
- data/test/unit/machine/machine_with_existing_state_test.rb +27 -0
- data/test/unit/machine/machine_with_failure_callbacks_test.rb +48 -0
- data/test/unit/machine/machine_with_helpers_test.rb +14 -0
- data/test/unit/machine/machine_with_initial_state_with_value_and_owner_default.rb +25 -0
- data/test/unit/machine/machine_with_initialize_and_super_test.rb +17 -0
- data/test/unit/machine/machine_with_initialize_arguments_and_block_test.rb +31 -0
- data/test/unit/machine/machine_with_initialize_without_super_test.rb +17 -0
- data/test/unit/machine/machine_with_instance_helpers_test.rb +179 -0
- data/test/unit/machine/machine_with_integration_test.rb +71 -0
- data/test/unit/machine/machine_with_multiple_events_test.rb +32 -0
- data/test/unit/machine/machine_with_namespace_test.rb +48 -0
- data/test/unit/machine/machine_with_nil_action_test.rb +24 -0
- data/test/unit/machine/machine_with_other_states.rb +22 -0
- data/test/unit/machine/machine_with_owner_subclass_test.rb +18 -0
- data/test/unit/machine/machine_with_paths_test.rb +25 -0
- data/test/unit/machine/machine_with_private_action_test.rb +43 -0
- data/test/unit/machine/machine_with_state_matchers_test.rb +41 -0
- data/test/unit/machine/machine_with_state_with_matchers_test.rb +19 -0
- data/test/unit/machine/machine_with_states_test.rb +55 -0
- data/test/unit/machine/machine_with_states_with_behaviors_test.rb +23 -0
- data/test/unit/machine/machine_with_states_with_custom_human_names_test.rb +18 -0
- data/test/unit/machine/machine_with_states_with_custom_values_test.rb +21 -0
- data/test/unit/machine/machine_with_states_with_runtime_dependencies_test.rb +19 -0
- data/test/unit/machine/machine_with_static_initial_state_test.rb +60 -0
- data/test/unit/machine/machine_with_superclass_conflicting_helpers_after_definition_test.rb +36 -0
- data/test/unit/machine/machine_with_transition_callbacks_test.rb +144 -0
- data/test/unit/machine/machine_with_transitions_test.rb +87 -0
- data/test/unit/machine/machine_without_initialization_test.rb +31 -0
- data/test/unit/machine/machine_without_initialize_test.rb +14 -0
- data/test/unit/machine/machine_without_integration_test.rb +31 -0
- data/test/unit/machine_collection/machine_collection_by_default_test.rb +11 -0
- data/test/unit/machine_collection/machine_collection_fire_attributes_with_validations_test.rb +72 -0
- data/test/unit/machine_collection/machine_collection_fire_test.rb +80 -0
- data/test/unit/machine_collection/machine_collection_fire_with_transactions_test.rb +54 -0
- data/test/unit/machine_collection/machine_collection_fire_with_validations_test.rb +76 -0
- data/test/unit/machine_collection/machine_collection_state_initialization_test.rb +101 -0
- data/test/unit/machine_collection/machine_collection_transitions_with_blank_events_test.rb +25 -0
- data/test/unit/machine_collection/machine_collection_transitions_with_custom_options_test.rb +20 -0
- data/test/unit/machine_collection/machine_collection_transitions_with_different_actions_test.rb +26 -0
- data/test/unit/machine_collection/machine_collection_transitions_with_exisiting_transitions_test.rb +25 -0
- data/test/unit/machine_collection/machine_collection_transitions_with_invalid_events_test.rb +25 -0
- data/test/unit/machine_collection/machine_collection_transitions_with_same_actions_test.rb +31 -0
- data/test/unit/machine_collection/machine_collection_transitions_with_transition_test.rb +26 -0
- data/test/unit/machine_collection/machine_collection_transitions_without_events_test.rb +25 -0
- data/test/unit/machine_collection/machine_collection_transitions_without_transition_test.rb +27 -0
- data/test/unit/matcher/all_matcher_test.rb +29 -0
- data/test/unit/matcher/blacklist_matcher_test.rb +30 -0
- data/test/unit/matcher/loopback_matcher_test.rb +27 -0
- data/test/unit/matcher/matcher_by_default_test.rb +15 -0
- data/test/unit/matcher/matcher_with_multiple_values_test.rb +15 -0
- data/test/unit/matcher/matcher_with_value_test.rb +15 -0
- data/test/unit/matcher/whitelist_matcher_test.rb +30 -0
- data/test/unit/matcher_helpers/matcher_helpers_all_test.rb +14 -0
- data/test/unit/matcher_helpers/matcher_helpers_any_test.rb +14 -0
- data/test/unit/matcher_helpers/matcher_helpers_same_test.rb +13 -0
- data/test/unit/node_collection/node_collection_after_being_copied_test/n.rb +46 -0
- data/test/unit/node_collection/node_collection_after_update_test/n.rb +36 -0
- data/test/unit/node_collection/node_collection_by_default_test.rb +22 -0
- data/test/unit/node_collection/node_collection_test.rb +23 -0
- data/test/unit/node_collection/node_collection_with_indices_test/n.rb +42 -0
- data/test/unit/node_collection/node_collection_with_matcher_contexts_test.rb +25 -0
- data/test/unit/node_collection/node_collection_with_nodes_test/n.rb +46 -0
- data/test/unit/node_collection/node_collection_with_numeric_index_test/n.rb +24 -0
- data/test/unit/node_collection/node_collection_with_postdefined_contexts_test/n.rb +22 -0
- data/test/unit/node_collection/node_collection_with_predefined_contexts_test/n.rb +23 -0
- data/test/unit/node_collection/node_collection_with_string_index_test/n.rb +20 -0
- data/test/unit/node_collection/node_collection_with_symbol_index_test/n.rb +20 -0
- data/test/unit/node_collection/node_collection_without_indices_test/n.rb +30 -0
- data/test/unit/path/path_by_default_test.rb +54 -0
- data/test/unit/path/path_test.rb +14 -0
- data/test/unit/path/path_with_available_transitions_after_reaching_target_test.rb +40 -0
- data/test/unit/path/path_with_available_transitions_test.rb +54 -0
- data/test/unit/path/path_with_deep_target_reached_test.rb +50 -0
- data/test/unit/path/path_with_deep_target_test.rb +40 -0
- data/test/unit/path/path_with_duplicates_test.rb +32 -0
- data/test/unit/path/path_with_encountered_transitions_test.rb +34 -0
- data/test/unit/path/path_with_guarded_transitions_test.rb +42 -0
- data/test/unit/path/path_with_reached_target_test.rb +35 -0
- data/test/unit/path/path_with_transitions_test.rb +54 -0
- data/test/unit/path/path_with_unreached_target_test.rb +31 -0
- data/test/unit/path/path_without_transitions_test.rb +24 -0
- data/test/unit/path_collection/path_collection_by_default_test.rb +46 -0
- data/test/unit/path_collection/path_collection_test.rb +24 -0
- data/test/unit/path_collection/path_collection_with_deep_paths_test.rb +43 -0
- data/test/unit/path_collection/path_collection_with_duplicate_nodes_test.rb +31 -0
- data/test/unit/path_collection/path_collection_with_from_state_test.rb +27 -0
- data/test/unit/path_collection/path_collection_with_paths_test.rb +47 -0
- data/test/unit/path_collection/path_collection_with_to_state_test.rb +29 -0
- data/test/unit/path_collection/path_with_guarded_paths_test.rb +25 -0
- data/test/unit/state/state_after_being_copied_test.rb +19 -0
- data/test/unit/state/state_by_default_test.rb +41 -0
- data/test/unit/state/state_final_test.rb +28 -0
- data/test/unit/state/state_initial_test.rb +13 -0
- data/test/unit/state/state_not_final_test.rb +32 -0
- data/test/unit/state/state_not_initial_test.rb +13 -0
- data/test/unit/state/state_test.rb +44 -0
- data/test/unit/state/state_with_cached_lambda_value_test.rb +29 -0
- data/test/unit/state/state_with_conflicting_helpers_after_definition_test.rb +38 -0
- data/test/unit/state/state_with_conflicting_helpers_before_definition_test.rb +29 -0
- data/test/unit/state/state_with_conflicting_machine_name_test.rb +20 -0
- data/test/unit/state/state_with_conflicting_machine_test.rb +37 -0
- data/test/unit/state/state_with_context_test.rb +60 -0
- data/test/unit/state/state_with_dynamic_human_name_test.rb +25 -0
- data/test/unit/state/state_with_existing_context_method_test.rb +24 -0
- data/test/unit/state/state_with_human_name_test.rb +13 -0
- data/test/unit/state/state_with_integer_value_test.rb +32 -0
- data/test/unit/state/state_with_invalid_method_call_test.rb +21 -0
- data/test/unit/state/state_with_lambda_value_test.rb +37 -0
- data/test/unit/state/state_with_matcher_test.rb +18 -0
- data/test/unit/state/state_with_multiple_contexts_test.rb +57 -0
- data/test/unit/state/state_with_name_test.rb +43 -0
- data/test/unit/state/state_with_namespace_test.rb +22 -0
- data/test/unit/state/state_with_nil_value_test.rb +35 -0
- data/test/unit/state/state_with_redefined_context_method_test.rb +45 -0
- data/test/unit/state/state_with_symbolic_value_test.rb +32 -0
- data/test/unit/state/state_with_valid_inherited_method_call_for_current_state_test.rb +40 -0
- data/test/unit/state/state_with_valid_method_call_for_current_state_test.rb +33 -0
- data/test/unit/state/state_with_valid_method_call_for_different_state_test.rb +41 -0
- data/test/unit/state/state_without_cached_lambda_value_test.rb +25 -0
- data/test/unit/state/state_without_name_test.rb +39 -0
- data/test/unit/state_collection/state_collection_by_default_test.rb +21 -0
- data/test/unit/state_collection/state_collection_string_test.rb +35 -0
- data/test/unit/state_collection/state_collection_test.rb +74 -0
- data/test/unit/state_collection/state_collection_with_custom_state_values_test.rb +29 -0
- data/test/unit/state_collection/state_collection_with_event_transitions_test.rb +39 -0
- data/test/unit/state_collection/state_collection_with_initial_state_test.rb +40 -0
- data/test/unit/state_collection/state_collection_with_namespace_test.rb +21 -0
- data/test/unit/state_collection/state_collection_with_state_behaviors_test.rb +40 -0
- data/test/unit/state_collection/state_collection_with_state_matchers_test.rb +29 -0
- data/test/unit/state_collection/state_collection_with_transition_callbacks_test.rb +40 -0
- data/test/unit/state_context/state_context_proxy_test.rb +26 -0
- data/test/unit/state_context/state_context_proxy_with_if_and_unless_conditions_test.rb +42 -0
- data/test/unit/state_context/state_context_proxy_with_if_condition_test.rb +64 -0
- data/test/unit/state_context/state_context_proxy_with_multiple_if_conditions_test.rb +32 -0
- data/test/unit/state_context/state_context_proxy_with_multiple_unless_conditions_test.rb +32 -0
- data/test/unit/state_context/state_context_proxy_with_unless_condition_test.rb +64 -0
- data/test/unit/state_context/state_context_proxy_without_conditions_test.rb +31 -0
- data/test/unit/state_context/state_context_test.rb +28 -0
- data/test/unit/state_context/state_context_transition_test.rb +104 -0
- data/test/unit/state_context/state_context_with_matching_transition_test.rb +27 -0
- data/test/unit/state_machine/state_machine_by_default_test.rb +12 -0
- data/test/unit/state_machine/state_machine_test.rb +20 -0
- data/test/unit/transition/transition_after_being_performed_test.rb +48 -0
- data/test/unit/transition/transition_after_being_persisted_test.rb +46 -0
- data/test/unit/transition/transition_after_being_rolled_back_test.rb +35 -0
- data/test/unit/transition/transition_equality_test.rb +52 -0
- data/test/unit/transition/transition_loopback_test.rb +18 -0
- data/test/unit/transition/transition_test.rb +96 -0
- data/test/unit/transition/transition_transient_test.rb +20 -0
- data/test/unit/transition/transition_with_action_test.rb +27 -0
- data/test/unit/transition/transition_with_after_callbacks_skipped_test.rb +127 -0
- data/test/unit/transition/transition_with_after_callbacks_test.rb +93 -0
- data/test/unit/transition/transition_with_around_callbacks_test.rb +141 -0
- data/test/unit/transition/transition_with_before_callbacks_skipped_test.rb +30 -0
- data/test/unit/transition/transition_with_before_callbacks_test.rb +104 -0
- data/test/unit/transition/transition_with_custom_machine_attribute_test.rb +28 -0
- data/test/unit/transition/transition_with_different_states_test.rb +18 -0
- data/test/unit/transition/transition_with_dynamic_to_value_test.rb +19 -0
- data/test/unit/transition/transition_with_failure_callbacks_test.rb +84 -0
- data/test/unit/transition/transition_with_invalid_nodes_test.rb +29 -0
- data/test/unit/transition/transition_with_mixed_callbacks_test.rb +105 -0
- data/test/unit/transition/transition_with_multiple_after_callbacks_test.rb +40 -0
- data/test/unit/transition/transition_with_multiple_around_callbacks_test.rb +114 -0
- data/test/unit/transition/transition_with_multiple_before_callbacks_test.rb +40 -0
- data/test/unit/transition/transition_with_multiple_failure_callbacks_test.rb +40 -0
- data/test/unit/transition/transition_with_namespace_test.rb +47 -0
- data/test/unit/transition/transition_with_perform_arguments_test.rb +35 -0
- data/test/unit/transition/transition_with_transactions_test.rb +42 -0
- data/test/unit/transition/transition_without_callbacks_test.rb +33 -0
- data/test/unit/transition/transition_without_reading_state_test.rb +22 -0
- data/test/unit/transition/transition_without_running_action_test.rb +47 -0
- data/test/unit/transition_collection/attribute_transition_collection_by_default_test.rb +23 -0
- data/test/unit/transition_collection/attribute_transition_collection_marshalling_test.rb +64 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_action_error_test.rb +44 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_action_failed_test.rb +44 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_after_callback_error_test.rb +32 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_after_callback_halt_test.rb +33 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_around_after_yield_callback_error_test.rb +32 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_after_yield_error_test.rb +32 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_after_yield_halt_test.rb +33 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_before_yield_halt_test.rb +33 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_before_callback_error_test.rb +32 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_before_callback_halt_test.rb +33 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_callbacks_test.rb +68 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_event_transitions_test.rb +41 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_events_test.rb +44 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_skipped_after_callbacks_test.rb +42 -0
- data/test/unit/transition_collection/transition_collection_by_default_test.rb +23 -0
- data/test/unit/transition_collection/transition_collection_empty_with_block_test.rb +23 -0
- data/test/unit/transition_collection/transition_collection_empty_without_block_test.rb +12 -0
- data/test/unit/transition_collection/transition_collection_invalid_test.rb +21 -0
- data/test/unit/transition_collection/transition_collection_partial_invalid_test.rb +69 -0
- data/test/unit/transition_collection/transition_collection_test.rb +26 -0
- data/test/unit/transition_collection/transition_collection_valid_test.rb +57 -0
- data/test/unit/transition_collection/transition_collection_with_action_error_test.rb +66 -0
- data/test/unit/transition_collection/transition_collection_with_action_failed_test.rb +60 -0
- data/test/unit/transition_collection/transition_collection_with_action_hook_and_block_test.rb +17 -0
- data/test/unit/transition_collection/transition_collection_with_action_hook_and_skipped_action_test.rb +17 -0
- data/test/unit/transition_collection/transition_collection_with_action_hook_and_skipped_after_callbacks_test.rb +37 -0
- data/test/unit/transition_collection/transition_collection_with_action_hook_base_test.rb +34 -0
- data/test/unit/transition_collection/transition_collection_with_action_hook_error_test.rb +29 -0
- data/test/unit/transition_collection/transition_collection_with_action_hook_invalid_test.rb +17 -0
- data/test/unit/transition_collection/transition_collection_with_action_hook_multiple_test.rb +79 -0
- data/test/unit/transition_collection/transition_collection_with_action_hook_test.rb +45 -0
- data/test/unit/transition_collection/transition_collection_with_action_hook_with_different_actions_test.rb +48 -0
- data/test/unit/transition_collection/transition_collection_with_action_hook_with_nil_action_test.rb +42 -0
- data/test/unit/transition_collection/transition_collection_with_after_callback_halt_test.rb +51 -0
- data/test/unit/transition_collection/transition_collection_with_before_callback_halt_test.rb +47 -0
- data/test/unit/transition_collection/transition_collection_with_block_test.rb +46 -0
- data/test/unit/transition_collection/transition_collection_with_callbacks_test.rb +135 -0
- data/test/unit/transition_collection/transition_collection_with_different_actions_test.rb +189 -0
- data/test/unit/transition_collection/transition_collection_with_duplicate_actions_test.rb +48 -0
- data/test/unit/transition_collection/transition_collection_with_empty_actions_test.rb +41 -0
- data/test/unit/transition_collection/transition_collection_with_mixed_actions_test.rb +41 -0
- data/test/unit/transition_collection/transition_collection_with_skipped_actions_and_block_test.rb +34 -0
- data/test/unit/transition_collection/transition_collection_with_skipped_actions_test.rb +69 -0
- data/test/unit/transition_collection/transition_collection_with_skipped_after_callbacks_and_around_callbacks_test.rb +53 -0
- data/test/unit/transition_collection/transition_collection_with_skipped_after_callbacks_test.rb +34 -0
- data/test/unit/transition_collection/transition_collection_with_transactions_test.rb +65 -0
- data/test/unit/transition_collection/transition_collection_without_transactions_test.rb +29 -0
- metadata +888 -101
- data/spec/models/auto_shop_spec.rb +0 -41
- data/spec/models/car_spec.rb +0 -90
- data/spec/models/motorcycle_spec.rb +0 -44
- data/spec/models/traffic_light_spec.rb +0 -56
- data/spec/models/vehicle_spec.rb +0 -580
- data/spec/spec_helper.rb +0 -7
- data/spec/state_machines/assertions_spec.rb +0 -31
- data/spec/state_machines/branch_spec.rb +0 -827
- data/spec/state_machines/callbacks_spec.rb +0 -706
- data/spec/state_machines/errors_spec.rb +0 -1
- data/spec/state_machines/event_collection_spec.rb +0 -401
- data/spec/state_machines/event_spec.rb +0 -1140
- data/spec/state_machines/helper_spec.rb +0 -14
- data/spec/state_machines/integration_base_spec.rb +0 -12
- data/spec/state_machines/integration_spec.rb +0 -132
- data/spec/state_machines/invalid_parallel_transition_spec.rb +0 -18
- data/spec/state_machines/invalid_transition_spec.rb +0 -114
- data/spec/state_machines/machine_collection_spec.rb +0 -606
- data/spec/state_machines/machine_spec.rb +0 -3176
- data/spec/state_machines/matcher_helpers_spec.rb +0 -39
- data/spec/state_machines/matcher_spec.rb +0 -157
- data/spec/state_machines/node_collection_spec.rb +0 -371
- data/spec/state_machines/path_collection_spec.rb +0 -271
- data/spec/state_machines/path_spec.rb +0 -488
- data/spec/state_machines/state_collection_spec.rb +0 -352
- data/spec/state_machines/state_context_spec.rb +0 -442
- data/spec/state_machines/state_machine_spec.rb +0 -29
- data/spec/state_machines/state_spec.rb +0 -970
- data/spec/state_machines/transition_collection_spec.rb +0 -2199
- data/spec/state_machines/transition_spec.rb +0 -1558
- data/spec/support/migration_helpers.rb +0 -59
- data/spec/support/models.rb +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c50330d0782d72bdf4e9ed537340c4072b573b6b
|
4
|
+
data.tar.gz: d057ae65cec153e36b69ea5c227035d28629c314
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 362c90ff95ddf0535fef6743f267958d1c8c45be68c3bf7026dc10f20d89e48bf02333344d0692456b84ab09c737e7b7e754c766e9bfc9ea243689a2e7a5f0a5
|
7
|
+
data.tar.gz: 1bad1ea983e9946dc60f5a373ccd1cc180e1287d4b8f3410f4d7579987d67c584501e7c156d620bc9a8ca3864fc1eac4e6c2c96f401987b9073694c10a7de9c7
|
data/.travis.yml
CHANGED
data/Changelog.md
ADDED
File without changes
|
data/Gemfile
CHANGED
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
[](https://travis-ci.org/state-machines/state_machines)
|
2
|
+
[](https://codeclimate.com/github/state-machines/state_machines)
|
3
3
|
# State Machines
|
4
4
|
|
5
5
|
State Machines adds support for creating state machines for attributes on any Ruby class.
|
@@ -20,7 +20,7 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
-
|
23
|
+
|
24
24
|
|
25
25
|
## Dependencies
|
26
26
|
|
@@ -30,15 +30,13 @@ Ruby versions officially supported and tested:
|
|
30
30
|
* JRuby (1.9)
|
31
31
|
* Rubinius
|
32
32
|
|
33
|
-
|
34
|
-
|
35
33
|
For graphing state machine:
|
36
34
|
|
37
|
-
* [state_machines-graphviz](http://github.com/
|
35
|
+
* [state_machines-graphviz](http://github.com/state-machines/state_machines-graphviz)
|
38
36
|
|
39
37
|
For documenting state machines:
|
40
38
|
|
41
|
-
* [state_machines-yard](http://github.com/
|
39
|
+
* [state_machines-yard](http://github.com/state-machines/state_machines-yard)
|
42
40
|
|
43
41
|
|
44
42
|
## TODO
|
@@ -47,7 +45,7 @@ Add matchers/assertions for rspec and minitest
|
|
47
45
|
|
48
46
|
## Contributing
|
49
47
|
|
50
|
-
1. Fork it ( https://github.com/
|
48
|
+
1. Fork it ( https://github.com/state-machines/state_machines/fork )
|
51
49
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
52
50
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
53
51
|
4. Push to the branch (`git push origin my-new-feature`)
|
data/Rakefile
CHANGED
@@ -1,10 +1,13 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rake/testtask'
|
3
|
+
Rake::TestTask.new(:functional) do |t|
|
4
|
+
# t.pattern = 'test/**/*_test.rb'
|
5
|
+
t.test_files = FileList['test/functional/*_test.rb']
|
6
|
+
end
|
3
7
|
|
4
|
-
|
5
|
-
|
6
|
-
t.pattern = 'spec/**/*_spec.rb'
|
8
|
+
Rake::TestTask.new(:unit) do |t|
|
9
|
+
t.test_files = FileList['test/unit/**/*_test.rb']
|
7
10
|
end
|
8
11
|
|
9
12
|
desc 'Default: run all tests.'
|
10
|
-
task :
|
13
|
+
task default: [:unit, :functional]
|
data/Testing.md
ADDED
File without changes
|
@@ -2,7 +2,7 @@ class Hash
|
|
2
2
|
# Provides a set of helper methods for making assertions about the content
|
3
3
|
# of various objects
|
4
4
|
|
5
|
-
unless
|
5
|
+
unless respond_to?(:assert_valid_keys)
|
6
6
|
# Validate all keys in a hash match <tt>*valid_keys</tt>, raising ArgumentError
|
7
7
|
# on a mismatch. Note that keys are NOT treated indifferently, meaning if you
|
8
8
|
# use strings for keys but assert symbols as keys, this will fail.
|
@@ -28,10 +28,10 @@ class Hash
|
|
28
28
|
# == Examples
|
29
29
|
#
|
30
30
|
# options = {:only => :on, :except => :off}
|
31
|
-
# assert_exclusive_keys(
|
32
|
-
# assert_exclusive_keys(
|
33
|
-
# assert_exclusive_keys(
|
34
|
-
# assert_exclusive_keys(
|
31
|
+
# options.assert_exclusive_keys(:only) # => nil
|
32
|
+
# options.assert_exclusive_keys(:except) # => nil
|
33
|
+
# options.assert_exclusive_keys(:only, :except) # => ArgumentError: Conflicting keys: only, except
|
34
|
+
# options.assert_exclusive_keys(:only, :except, :with) # => ArgumentError: Conflicting keys: only, except
|
35
35
|
def assert_exclusive_keys(*exclusive_keys)
|
36
36
|
conflicting_keys = exclusive_keys & keys
|
37
37
|
raise ArgumentError, "Conflicting keys: #{conflicting_keys.join(', ')}" unless conflicting_keys.length <= 1
|
data/lib/state_machines/error.rb
CHANGED
@@ -14,7 +14,8 @@ module StateMachines
|
|
14
14
|
# An invalid integration was specified
|
15
15
|
class IntegrationNotFound < Error
|
16
16
|
def initialize(name)
|
17
|
-
|
17
|
+
valid_integrations_name = Integrations.list.collect(&:integration_name)
|
18
|
+
super(nil, "#{name.inspect} is an invalid integration. Valid integrations are: #{valid_integrations_name.join(', ')} ")
|
18
19
|
end
|
19
20
|
end
|
20
21
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
1
3
|
module StateMachines
|
2
4
|
# Integrations allow state machines to take advantage of features within the
|
3
5
|
# context of a particular library. This is currently most useful with
|
@@ -22,11 +24,10 @@ module StateMachines
|
|
22
24
|
|
23
25
|
class << self
|
24
26
|
# Register integration
|
25
|
-
def register(
|
26
|
-
|
27
|
-
case arg.class.to_s
|
27
|
+
def register(name_or_module)
|
28
|
+
case name_or_module.class.to_s
|
28
29
|
when 'Module'
|
29
|
-
add(
|
30
|
+
add(name_or_module)
|
30
31
|
else
|
31
32
|
fail IntegrationError
|
32
33
|
end
|
@@ -34,6 +35,16 @@ module StateMachines
|
|
34
35
|
end
|
35
36
|
|
36
37
|
|
38
|
+
def unregister(name) #:nodoc:#
|
39
|
+
@integrations.delete(name)
|
40
|
+
end
|
41
|
+
|
42
|
+
def reset #:nodoc:#
|
43
|
+
name_spaced_integrations
|
44
|
+
@integrations = Set.new
|
45
|
+
true
|
46
|
+
end
|
47
|
+
|
37
48
|
# Gets a list of all of the available integrations for use.
|
38
49
|
#
|
39
50
|
# == Example
|
@@ -48,6 +59,7 @@ module StateMachines
|
|
48
59
|
name_spaced_integrations
|
49
60
|
@integrations
|
50
61
|
end
|
62
|
+
alias_method :list, :integrations
|
51
63
|
|
52
64
|
|
53
65
|
# Attempts to find an integration that matches the given class. This will
|
@@ -104,17 +116,12 @@ module StateMachines
|
|
104
116
|
def name_spaced_integrations
|
105
117
|
self.constants.each do |const|
|
106
118
|
integration = self.const_get(const)
|
107
|
-
add(integration)
|
119
|
+
add(integration)
|
108
120
|
end
|
109
121
|
end
|
110
122
|
|
111
123
|
def add(integration)
|
112
|
-
@integrations << integration
|
113
|
-
end
|
114
|
-
|
115
|
-
def reset
|
116
|
-
@integrations = Set.new
|
117
|
-
name_spaced_integrations
|
124
|
+
@integrations << integration if integration.respond_to?(:integration_name)
|
118
125
|
end
|
119
126
|
end
|
120
127
|
end
|
@@ -439,14 +439,13 @@ module StateMachines
|
|
439
439
|
end
|
440
440
|
|
441
441
|
|
442
|
-
def draw(
|
442
|
+
def draw(*)
|
443
443
|
fail NotImplementedError
|
444
444
|
end
|
445
|
-
end
|
446
445
|
|
447
|
-
|
448
|
-
|
449
|
-
attr_accessor :
|
446
|
+
# Default messages to use for validation errors in ORM integrations
|
447
|
+
attr_accessor :default_messages
|
448
|
+
attr_accessor :ignore_method_conflicts
|
450
449
|
end
|
451
450
|
@default_messages = {
|
452
451
|
:invalid => 'is invalid',
|
@@ -456,9 +455,6 @@ module StateMachines
|
|
456
455
|
|
457
456
|
# Whether to ignore any conflicts that are detected for helper methods that
|
458
457
|
# get generated for a machine's owner class. Default is false.
|
459
|
-
class << self;
|
460
|
-
attr_accessor :ignore_method_conflicts;
|
461
|
-
end
|
462
458
|
@ignore_method_conflicts = false
|
463
459
|
|
464
460
|
# The class that the machine is defined in
|
@@ -1828,20 +1824,20 @@ module StateMachines
|
|
1828
1824
|
# Marks the given object as invalid with the given message.
|
1829
1825
|
#
|
1830
1826
|
# By default, this is a no-op.
|
1831
|
-
def invalidate(
|
1827
|
+
def invalidate(_object, _attribute, _message, _values = [])
|
1832
1828
|
end
|
1833
1829
|
|
1834
1830
|
# Gets a description of the errors for the given object. This is used to
|
1835
1831
|
# provide more detailed information when an InvalidTransition exception is
|
1836
1832
|
# raised.
|
1837
|
-
def errors_for(
|
1833
|
+
def errors_for(_object)
|
1838
1834
|
''
|
1839
1835
|
end
|
1840
1836
|
|
1841
1837
|
# Resets any errors previously added when invalidating the given object.
|
1842
1838
|
#
|
1843
1839
|
# By default, this is a no-op.
|
1844
|
-
def reset(
|
1840
|
+
def reset(_object)
|
1845
1841
|
end
|
1846
1842
|
|
1847
1843
|
# Generates the message to use when invalidating the given object after
|
@@ -1872,7 +1868,7 @@ module StateMachines
|
|
1872
1868
|
end
|
1873
1869
|
|
1874
1870
|
|
1875
|
-
def draw(
|
1871
|
+
def draw(*)
|
1876
1872
|
fail NotImplementedError
|
1877
1873
|
end
|
1878
1874
|
|
data/state_machines.gemspec
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# coding: utf-8
|
2
1
|
lib = File.expand_path('../lib', __FILE__)
|
3
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
3
|
require 'state_machines/version'
|
@@ -7,19 +6,18 @@ Gem::Specification.new do |spec|
|
|
7
6
|
spec.name = 'state_machines'
|
8
7
|
spec.version = StateMachines::VERSION
|
9
8
|
spec.authors = ['Abdelkader Boudih', 'Aaron Pfeifer']
|
10
|
-
spec.email =
|
9
|
+
spec.email = %w(terminale@gmail.com aaron@pluginaweek.org)
|
11
10
|
spec.summary = %q(State machines for attributes)
|
12
11
|
spec.description = %q(Adds support for creating state machines for attributes on any Ruby class)
|
13
|
-
spec.homepage = 'https://github.com/
|
12
|
+
spec.homepage = 'https://github.com/state-machines/state_machines'
|
14
13
|
spec.license = 'MIT'
|
15
14
|
|
16
|
-
spec.required_ruby_version = '>=
|
15
|
+
spec.required_ruby_version = '>= 2.0.0'
|
17
16
|
spec.files = `git ls-files -z`.split("\x0")
|
18
|
-
spec.test_files = spec.files.grep(/^
|
17
|
+
spec.test_files = spec.files.grep(/^test\//)
|
19
18
|
spec.require_paths = ['lib']
|
20
19
|
|
21
|
-
spec.add_development_dependency 'bundler'
|
20
|
+
spec.add_development_dependency 'bundler', '>= 1.7.6'
|
22
21
|
spec.add_development_dependency 'rake'
|
23
|
-
spec.add_development_dependency '
|
24
|
-
spec.add_development_dependency 'rspec-its'
|
22
|
+
spec.add_development_dependency 'minitest', '>= 5.4'
|
25
23
|
end
|
File without changes
|
File without changes
|
@@ -25,7 +25,7 @@ class TrafficLight
|
|
25
25
|
end
|
26
26
|
|
27
27
|
state :proceed do
|
28
|
-
def color(
|
28
|
+
def color(_transform)
|
29
29
|
'green'
|
30
30
|
end
|
31
31
|
|
@@ -35,7 +35,7 @@ class TrafficLight
|
|
35
35
|
end
|
36
36
|
|
37
37
|
state :caution do
|
38
|
-
def color(
|
38
|
+
def color(_transform)
|
39
39
|
'yellow'
|
40
40
|
end
|
41
41
|
end
|
@@ -1,3 +1,6 @@
|
|
1
|
+
require_relative 'model_base'
|
2
|
+
require_relative 'auto_shop'
|
3
|
+
|
1
4
|
class Vehicle < ModelBase
|
2
5
|
attr_accessor :auto_shop, :seatbelt_on, :insurance_premium, :force_idle, :callbacks, :saved, :time_elapsed, :last_transition_args
|
3
6
|
|
@@ -16,7 +19,7 @@ class Vehicle < ModelBase
|
|
16
19
|
end
|
17
20
|
|
18
21
|
# Defines the state machine for the state of the vehicled
|
19
|
-
state_machine initial:
|
22
|
+
state_machine initial: ->(vehicle) { vehicle.force_idle ? :idling : :parked }, action: :save do
|
20
23
|
before_transition { |vehicle, transition| vehicle.last_transition_args = transition.args }
|
21
24
|
before_transition parked: any, do: :put_on_seatbelt
|
22
25
|
before_transition any => :stalled, :do => :increase_insurance_premium
|
@@ -25,10 +28,10 @@ class Vehicle < ModelBase
|
|
25
28
|
after_transition on: :repair, do: :fix
|
26
29
|
|
27
30
|
# Callback tracking for initial state callbacks
|
28
|
-
after_transition any => :parked, :do =>
|
29
|
-
before_transition any => :idling, :do =>
|
31
|
+
after_transition any => :parked, :do => ->(vehicle) { vehicle.callbacks << 'before_enter_parked' }
|
32
|
+
before_transition any => :idling, :do => ->(vehicle) { vehicle.callbacks << 'before_enter_idling' }
|
30
33
|
|
31
|
-
around_transition do |vehicle,
|
34
|
+
around_transition do |vehicle, _transition, block|
|
32
35
|
time = Time.now
|
33
36
|
block.call
|
34
37
|
vehicle.time_elapsed = Time.now - time
|
@@ -61,7 +64,7 @@ class Vehicle < ModelBase
|
|
61
64
|
end
|
62
65
|
|
63
66
|
event :crash do
|
64
|
-
transition [:first_gear, :second_gear, :third_gear] => :stalled, :if =>
|
67
|
+
transition [:first_gear, :second_gear, :third_gear] => :stalled, :if => ->(vehicle) { vehicle.auto_shop.available? }
|
65
68
|
end
|
66
69
|
|
67
70
|
event :repair do
|
@@ -106,6 +109,7 @@ class Vehicle < ModelBase
|
|
106
109
|
end
|
107
110
|
|
108
111
|
private
|
112
|
+
|
109
113
|
# Safety first! Puts on our seatbelt
|
110
114
|
def put_on_seatbelt
|
111
115
|
self.seatbelt_on = true
|
data/test/files/node.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require_relative '../files/models/auto_shop'
|
3
|
+
|
4
|
+
class AutoShopAvailableTest < MiniTest::Test
|
5
|
+
def setup
|
6
|
+
@auto_shop = AutoShop.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_should_be_in_available_state
|
10
|
+
assert_equal 'available', @auto_shop.state
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_allow_tow_vehicle
|
14
|
+
assert @auto_shop.tow_vehicle
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_should_not_allow_fix_vehicle
|
18
|
+
refute @auto_shop.fix_vehicle
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require_relative '../files/models/auto_shop'
|
3
|
+
|
4
|
+
class AutoShopBusyTest < MiniTest::Test
|
5
|
+
def setup
|
6
|
+
@auto_shop = AutoShop.new
|
7
|
+
@auto_shop.tow_vehicle
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_should_be_in_busy_state
|
11
|
+
assert_equal 'busy', @auto_shop.state
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_should_have_incremented_number_of_customers
|
15
|
+
assert_equal 1, @auto_shop.num_customers
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_should_not_allow_tow_vehicle
|
19
|
+
refute @auto_shop.tow_vehicle
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_should_allow_fix_vehicle
|
23
|
+
assert @auto_shop.fix_vehicle
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require_relative '../files/models/car'
|
3
|
+
|
4
|
+
class CarBackingUpTest < MiniTest::Test
|
5
|
+
def setup
|
6
|
+
@car = Car.new
|
7
|
+
@car.reverse
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_should_be_in_backing_up_state
|
11
|
+
assert_equal 'backing_up', @car.state
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_should_allow_park
|
15
|
+
assert @car.park
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_should_not_allow_ignite
|
19
|
+
refute @car.ignite
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_should_allow_idle
|
23
|
+
assert @car.idle
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_should_allow_shift_up
|
27
|
+
assert @car.shift_up
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_should_not_allow_shift_down
|
31
|
+
refute @car.shift_down
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_should_not_allow_crash
|
35
|
+
refute @car.crash
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_should_not_allow_repair
|
39
|
+
refute @car.repair
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_should_not_allow_reverse
|
43
|
+
refute @car.reverse
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require_relative '../files/models/car'
|
3
|
+
|
4
|
+
class CarTest < MiniTest::Test
|
5
|
+
def setup
|
6
|
+
@car = Car.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_should_be_in_parked_state
|
10
|
+
assert_equal 'parked', @car.state
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_not_have_the_seatbelt_on
|
14
|
+
refute @car.seatbelt_on
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_should_not_allow_park
|
18
|
+
refute @car.park
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_should_allow_ignite
|
22
|
+
assert @car.ignite
|
23
|
+
assert_equal 'idling', @car.state
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_should_not_allow_idle
|
27
|
+
refute @car.idle
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_should_not_allow_shift_up
|
31
|
+
refute @car.shift_up
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_should_not_allow_shift_down
|
35
|
+
refute @car.shift_down
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_should_not_allow_crash
|
39
|
+
refute @car.crash
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_should_not_allow_repair
|
43
|
+
refute @car.repair
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_should_allow_reverse
|
47
|
+
assert @car.reverse
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require_relative '../files/models/motorcycle'
|
3
|
+
|
4
|
+
class MotorcycleTest < MiniTest::Test
|
5
|
+
def setup
|
6
|
+
@motorcycle = Motorcycle.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_should_be_in_idling_state
|
10
|
+
assert_equal 'idling', @motorcycle.state
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_allow_park
|
14
|
+
assert @motorcycle.park
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_should_not_allow_ignite
|
18
|
+
refute @motorcycle.ignite
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_should_allow_shift_up
|
22
|
+
assert @motorcycle.shift_up
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_should_not_allow_shift_down
|
26
|
+
refute @motorcycle.shift_down
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_should_not_allow_crash
|
30
|
+
refute @motorcycle.crash
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_should_not_allow_repair
|
34
|
+
refute @motorcycle.repair
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_should_inherit_decibels_from_superclass
|
38
|
+
@motorcycle.park
|
39
|
+
assert_equal 0.0, @motorcycle.decibels
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_should_use_decibels_defined_in_state
|
43
|
+
@motorcycle.shift_up
|
44
|
+
assert_equal 1.0, @motorcycle.decibels
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require_relative '../files/models/traffic_light'
|
3
|
+
|
4
|
+
class TrafficLightCautionTest < MiniTest::Test
|
5
|
+
def setup
|
6
|
+
@light = TrafficLight.new
|
7
|
+
@light.state = 'caution'
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_should_use_caution_color
|
11
|
+
assert_equal 'yellow', @light.color
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_should_use_caution_capture_violations
|
15
|
+
assert_equal true, @light.capture_violations?
|
16
|
+
end
|
17
|
+
end
|