shoulda-matchers 3.1.0 → 5.2.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/{MIT-LICENSE → LICENSE} +1 -1
- data/README.md +407 -232
- data/docs/errors/NonCaseSwappableValueError.md +2 -2
- data/lib/shoulda/matchers/action_controller/callback_matcher.rb +7 -80
- data/lib/shoulda/matchers/action_controller/filter_param_matcher.rb +4 -3
- data/lib/shoulda/matchers/action_controller/flash_store.rb +2 -4
- data/lib/shoulda/matchers/action_controller/permit_matcher.rb +36 -30
- data/lib/shoulda/matchers/action_controller/redirect_to_matcher.rb +8 -10
- data/lib/shoulda/matchers/action_controller/render_template_matcher.rb +7 -9
- data/lib/shoulda/matchers/action_controller/render_with_layout_matcher.rb +18 -15
- data/lib/shoulda/matchers/action_controller/rescue_from_matcher.rb +3 -2
- data/lib/shoulda/matchers/action_controller/respond_with_matcher.rb +3 -3
- data/lib/shoulda/matchers/action_controller/route_matcher.rb +88 -29
- data/lib/shoulda/matchers/action_controller/route_params.rb +2 -2
- data/lib/shoulda/matchers/action_controller/set_flash_matcher.rb +4 -4
- data/lib/shoulda/matchers/action_controller/set_session_matcher.rb +3 -3
- data/lib/shoulda/matchers/action_controller/set_session_or_flash_matcher.rb +19 -13
- data/lib/shoulda/matchers/action_controller.rb +2 -0
- data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_changed_value_error.rb +1 -1
- data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setter.rb +5 -9
- data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setter_and_validator.rb +2 -2
- data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setters.rb +1 -1
- data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setters_and_validators.rb +1 -1
- data/lib/shoulda/matchers/active_model/allow_value_matcher.rb +42 -39
- data/lib/shoulda/matchers/active_model/disallow_value_matcher.rb +1 -1
- data/lib/shoulda/matchers/active_model/have_secure_password_matcher.rb +52 -26
- data/lib/shoulda/matchers/active_model/helpers.rb +2 -2
- data/lib/shoulda/matchers/active_model/numericality_matchers/comparison_matcher.rb +32 -30
- data/lib/shoulda/matchers/active_model/numericality_matchers/numeric_type_matcher.rb +2 -1
- data/lib/shoulda/matchers/active_model/qualifiers/allow_blank.rb +26 -0
- data/lib/shoulda/matchers/active_model/qualifiers/allow_nil.rb +26 -0
- data/lib/shoulda/matchers/active_model/qualifiers/ignoring_interference_by_writer.rb +1 -1
- data/lib/shoulda/matchers/active_model/qualifiers.rb +2 -0
- data/lib/shoulda/matchers/active_model/validate_absence_of_matcher.rb +30 -6
- data/lib/shoulda/matchers/active_model/validate_acceptance_of_matcher.rb +8 -3
- data/lib/shoulda/matchers/active_model/validate_confirmation_of_matcher.rb +31 -16
- data/lib/shoulda/matchers/active_model/validate_exclusion_of_matcher.rb +52 -16
- data/lib/shoulda/matchers/active_model/validate_inclusion_of_matcher.rb +137 -84
- data/lib/shoulda/matchers/active_model/validate_length_of_matcher.rb +159 -46
- data/lib/shoulda/matchers/active_model/validate_numericality_of_matcher.rb +130 -66
- data/lib/shoulda/matchers/active_model/validate_presence_of_matcher.rb +251 -24
- data/lib/shoulda/matchers/active_model/validation_matcher/build_description.rb +12 -9
- data/lib/shoulda/matchers/active_model/validation_matcher.rb +38 -6
- data/lib/shoulda/matchers/active_model/validation_message_finder.rb +2 -4
- data/lib/shoulda/matchers/active_model/validator.rb +4 -9
- data/lib/shoulda/matchers/active_model.rb +3 -5
- data/lib/shoulda/matchers/active_record/accept_nested_attributes_for_matcher.rb +10 -7
- data/lib/shoulda/matchers/active_record/association_matcher.rb +386 -111
- data/lib/shoulda/matchers/active_record/association_matchers/counter_cache_matcher.rb +5 -2
- data/lib/shoulda/matchers/active_record/association_matchers/dependent_matcher.rb +4 -4
- data/lib/shoulda/matchers/active_record/association_matchers/inverse_of_matcher.rb +1 -1
- data/lib/shoulda/matchers/active_record/association_matchers/join_table_matcher.rb +11 -6
- data/lib/shoulda/matchers/active_record/association_matchers/model_reflection.rb +14 -15
- data/lib/shoulda/matchers/active_record/association_matchers/model_reflector.rb +30 -8
- data/lib/shoulda/matchers/active_record/association_matchers/option_verifier.rb +34 -11
- data/lib/shoulda/matchers/active_record/association_matchers/optional_matcher.rb +69 -0
- data/lib/shoulda/matchers/active_record/association_matchers/order_matcher.rb +1 -1
- data/lib/shoulda/matchers/active_record/association_matchers/required_matcher.rb +74 -0
- data/lib/shoulda/matchers/active_record/association_matchers/source_matcher.rb +3 -2
- data/lib/shoulda/matchers/active_record/association_matchers/through_matcher.rb +7 -5
- data/lib/shoulda/matchers/active_record/define_enum_for_matcher.rb +458 -42
- data/lib/shoulda/matchers/active_record/have_attached_matcher.rb +185 -0
- data/lib/shoulda/matchers/active_record/have_db_column_matcher.rb +63 -23
- data/lib/shoulda/matchers/active_record/have_db_index_matcher.rb +164 -48
- data/lib/shoulda/matchers/active_record/have_implicit_order_column.rb +106 -0
- data/lib/shoulda/matchers/active_record/have_readonly_attribute_matcher.rb +13 -11
- data/lib/shoulda/matchers/active_record/have_rich_text_matcher.rb +83 -0
- data/lib/shoulda/matchers/active_record/have_secure_token_matcher.rb +132 -0
- data/lib/shoulda/matchers/active_record/serialize_matcher.rb +18 -18
- data/lib/shoulda/matchers/active_record/uniqueness/test_model_creator.rb +1 -3
- data/lib/shoulda/matchers/active_record/uniqueness/test_models.rb +0 -2
- data/lib/shoulda/matchers/active_record/uniqueness.rb +1 -1
- data/lib/shoulda/matchers/active_record/validate_uniqueness_of_matcher.rb +430 -200
- data/lib/shoulda/matchers/active_record.rb +28 -20
- data/lib/shoulda/matchers/configuration.rb +12 -1
- data/lib/shoulda/matchers/doublespeak/double.rb +1 -1
- data/lib/shoulda/matchers/doublespeak/double_collection.rb +3 -3
- data/lib/shoulda/matchers/doublespeak/double_implementation_registry.rb +8 -5
- data/lib/shoulda/matchers/doublespeak/object_double.rb +6 -2
- data/lib/shoulda/matchers/doublespeak/stub_implementation.rb +1 -5
- data/lib/shoulda/matchers/doublespeak/world.rb +2 -2
- data/lib/shoulda/matchers/doublespeak.rb +2 -1
- data/lib/shoulda/matchers/error.rb +1 -1
- data/lib/shoulda/matchers/independent/delegate_method_matcher.rb +109 -29
- data/lib/shoulda/matchers/independent.rb +2 -2
- data/lib/shoulda/matchers/integrations/configuration.rb +8 -4
- data/lib/shoulda/matchers/integrations/libraries/action_controller.rb +1 -1
- data/lib/shoulda/matchers/integrations/libraries/rails.rb +2 -2
- data/lib/shoulda/matchers/integrations/test_frameworks/active_support_test_case.rb +1 -1
- data/lib/shoulda/matchers/integrations/test_frameworks/minitest_4.rb +1 -1
- data/lib/shoulda/matchers/integrations/test_frameworks/minitest_5.rb +1 -1
- data/lib/shoulda/matchers/integrations/test_frameworks/missing_test_framework.rb +1 -1
- data/lib/shoulda/matchers/integrations/test_frameworks/test_unit.rb +1 -1
- data/lib/shoulda/matchers/rails_shim.rb +172 -51
- data/lib/shoulda/matchers/routing.rb +2 -2
- data/lib/shoulda/matchers/util/word_wrap.rb +17 -12
- data/lib/shoulda/matchers/util.rb +39 -5
- data/lib/shoulda/matchers/version.rb +1 -1
- data/lib/shoulda/matchers/warn.rb +4 -3
- data/shoulda-matchers.gemspec +33 -15
- metadata +31 -338
- data/.gitignore +0 -12
- data/.hound.yml +0 -3
- data/.hound_config/ruby.yml +0 -12
- data/.travis.yml +0 -19
- data/.yardopts +0 -10
- data/Appraisals +0 -73
- data/CONTRIBUTING.md +0 -101
- data/Gemfile +0 -15
- data/Gemfile.lock +0 -70
- data/NEWS.md +0 -986
- data/Rakefile +0 -39
- data/custom_plan.rb +0 -88
- data/doc_config/gh-pages/index.html.erb +0 -9
- data/doc_config/yard/setup.rb +0 -22
- data/doc_config/yard/templates/default/fulldoc/html/css/bootstrap.css +0 -5967
- data/doc_config/yard/templates/default/fulldoc/html/css/full_list.css +0 -12
- data/doc_config/yard/templates/default/fulldoc/html/css/global.css +0 -62
- data/doc_config/yard/templates/default/fulldoc/html/css/solarized.css +0 -69
- data/doc_config/yard/templates/default/fulldoc/html/css/style.css +0 -312
- data/doc_config/yard/templates/default/fulldoc/html/full_list.erb +0 -32
- data/doc_config/yard/templates/default/fulldoc/html/full_list_class.erb +0 -1
- data/doc_config/yard/templates/default/fulldoc/html/full_list_method.erb +0 -8
- data/doc_config/yard/templates/default/fulldoc/html/js/app.js +0 -298
- data/doc_config/yard/templates/default/fulldoc/html/js/full_list.js +0 -1
- data/doc_config/yard/templates/default/fulldoc/html/js/jquery.stickyheaders.js +0 -289
- data/doc_config/yard/templates/default/fulldoc/html/js/underscore.min.js +0 -6
- data/doc_config/yard/templates/default/fulldoc/html/setup.rb +0 -8
- data/doc_config/yard/templates/default/layout/html/breadcrumb.erb +0 -14
- data/doc_config/yard/templates/default/layout/html/fonts.erb +0 -1
- data/doc_config/yard/templates/default/layout/html/footer.erb +0 -6
- data/doc_config/yard/templates/default/layout/html/layout.erb +0 -23
- data/doc_config/yard/templates/default/layout/html/search.erb +0 -13
- data/doc_config/yard/templates/default/layout/html/setup.rb +0 -40
- data/doc_config/yard/templates/default/method_details/html/source.erb +0 -10
- data/doc_config/yard/templates/default/module/html/box_info.erb +0 -31
- data/gemfiles/4.0.0.gemfile +0 -38
- data/gemfiles/4.0.0.gemfile.lock +0 -223
- data/gemfiles/4.0.1.gemfile +0 -38
- data/gemfiles/4.0.1.gemfile.lock +0 -225
- data/gemfiles/4.1.gemfile +0 -38
- data/gemfiles/4.1.gemfile.lock +0 -220
- data/gemfiles/4.2.gemfile +0 -38
- data/gemfiles/4.2.gemfile.lock +0 -243
- data/lib/shoulda/matchers/active_model/allow_mass_assignment_of_matcher.rb +0 -159
- data/lib/shoulda/matchers/independent/delegate_method_matcher/stubbed_target.rb +0 -37
- data/script/SUPPORTED_VERSIONS +0 -1
- data/script/install_gems_in_all_appraisals +0 -14
- data/script/run_all_tests +0 -14
- data/script/update_gem_in_all_appraisals +0 -15
- data/script/update_gems_in_all_appraisals +0 -14
- data/spec/acceptance/active_model_integration_spec.rb +0 -23
- data/spec/acceptance/independent_matchers_spec.rb +0 -125
- data/spec/acceptance/multiple_libraries_integration_spec.rb +0 -55
- data/spec/acceptance/rails_integration_spec.rb +0 -156
- data/spec/acceptance_spec_helper.rb +0 -23
- data/spec/doublespeak_spec_helper.rb +0 -2
- data/spec/report_warnings.rb +0 -7
- data/spec/spec_helper.rb +0 -21
- data/spec/support/acceptance/adds_shoulda_matchers_to_project.rb +0 -133
- data/spec/support/acceptance/helpers/active_model_helpers.rb +0 -11
- data/spec/support/acceptance/helpers/array_helpers.rb +0 -13
- data/spec/support/acceptance/helpers/base_helpers.rb +0 -19
- data/spec/support/acceptance/helpers/command_helpers.rb +0 -55
- data/spec/support/acceptance/helpers/file_helpers.rb +0 -19
- data/spec/support/acceptance/helpers/gem_helpers.rb +0 -31
- data/spec/support/acceptance/helpers/minitest_helpers.rb +0 -11
- data/spec/support/acceptance/helpers/n_unit_helpers.rb +0 -25
- data/spec/support/acceptance/helpers/pluralization_helpers.rb +0 -13
- data/spec/support/acceptance/helpers/rails_version_helpers.rb +0 -11
- data/spec/support/acceptance/helpers/rspec_helpers.rb +0 -24
- data/spec/support/acceptance/helpers/ruby_version_helpers.rb +0 -9
- data/spec/support/acceptance/helpers/step_helpers.rb +0 -127
- data/spec/support/acceptance/helpers.rb +0 -31
- data/spec/support/acceptance/matchers/have_output.rb +0 -31
- data/spec/support/acceptance/matchers/indicate_number_of_tests_was_run_matcher.rb +0 -55
- data/spec/support/acceptance/matchers/indicate_that_tests_were_run_matcher.rb +0 -103
- data/spec/support/tests/bundle.rb +0 -94
- data/spec/support/tests/command_runner.rb +0 -230
- data/spec/support/tests/current_bundle.rb +0 -61
- data/spec/support/tests/database.rb +0 -28
- data/spec/support/tests/database_adapters/postgresql.rb +0 -25
- data/spec/support/tests/database_adapters/sqlite3.rb +0 -26
- data/spec/support/tests/database_configuration.rb +0 -33
- data/spec/support/tests/database_configuration_registry.rb +0 -28
- data/spec/support/tests/filesystem.rb +0 -100
- data/spec/support/tests/version.rb +0 -45
- data/spec/support/unit/active_record/create_table.rb +0 -54
- data/spec/support/unit/attribute.rb +0 -47
- data/spec/support/unit/capture.rb +0 -40
- data/spec/support/unit/change_value.rb +0 -111
- data/spec/support/unit/create_model_arguments/basic.rb +0 -135
- data/spec/support/unit/create_model_arguments/has_many.rb +0 -15
- data/spec/support/unit/create_model_arguments/uniqueness_matcher.rb +0 -74
- data/spec/support/unit/helpers/active_model_helpers.rb +0 -27
- data/spec/support/unit/helpers/active_model_versions.rb +0 -28
- data/spec/support/unit/helpers/active_record_versions.rb +0 -24
- data/spec/support/unit/helpers/active_resource_builder.rb +0 -27
- data/spec/support/unit/helpers/allow_value_matcher_helpers.rb +0 -15
- data/spec/support/unit/helpers/class_builder.rb +0 -90
- data/spec/support/unit/helpers/column_type_helpers.rb +0 -26
- data/spec/support/unit/helpers/confirmation_matcher_helpers.rb +0 -17
- data/spec/support/unit/helpers/controller_builder.rb +0 -63
- data/spec/support/unit/helpers/database_helpers.rb +0 -20
- data/spec/support/unit/helpers/i18n_faker.rb +0 -15
- data/spec/support/unit/helpers/mailer_builder.rb +0 -12
- data/spec/support/unit/helpers/model_builder.rb +0 -114
- data/spec/support/unit/helpers/rails_versions.rb +0 -28
- data/spec/support/unit/helpers/validation_matcher_scenario_helpers.rb +0 -44
- data/spec/support/unit/i18n.rb +0 -7
- data/spec/support/unit/load_environment.rb +0 -12
- data/spec/support/unit/matchers/deprecate.rb +0 -60
- data/spec/support/unit/matchers/fail_with_message_including_matcher.rb +0 -51
- data/spec/support/unit/matchers/fail_with_message_matcher.rb +0 -62
- data/spec/support/unit/matchers/print_warning_including.rb +0 -59
- data/spec/support/unit/model_creation_strategies/active_model.rb +0 -111
- data/spec/support/unit/model_creation_strategies/active_record.rb +0 -77
- data/spec/support/unit/model_creators/active_model.rb +0 -39
- data/spec/support/unit/model_creators/active_record/has_and_belongs_to_many.rb +0 -95
- data/spec/support/unit/model_creators/active_record/has_many.rb +0 -67
- data/spec/support/unit/model_creators/active_record/uniqueness_matcher.rb +0 -42
- data/spec/support/unit/model_creators/active_record.rb +0 -43
- data/spec/support/unit/model_creators/basic.rb +0 -97
- data/spec/support/unit/model_creators.rb +0 -19
- data/spec/support/unit/rails_application.rb +0 -126
- data/spec/support/unit/record_builder_with_i18n_validation_message.rb +0 -69
- data/spec/support/unit/record_validating_confirmation_builder.rb +0 -51
- data/spec/support/unit/record_with_different_error_attribute_builder.rb +0 -92
- data/spec/support/unit/shared_examples/ignoring_interference_by_writer.rb +0 -79
- data/spec/support/unit/shared_examples/numerical_submatcher.rb +0 -17
- data/spec/support/unit/shared_examples/set_session_or_flash.rb +0 -360
- data/spec/support/unit/validation_matcher_scenario.rb +0 -62
- data/spec/unit/shoulda/matchers/action_controller/callback_matcher_spec.rb +0 -82
- data/spec/unit/shoulda/matchers/action_controller/filter_param_matcher_spec.rb +0 -28
- data/spec/unit/shoulda/matchers/action_controller/permit_matcher_spec.rb +0 -592
- data/spec/unit/shoulda/matchers/action_controller/redirect_to_matcher_spec.rb +0 -42
- data/spec/unit/shoulda/matchers/action_controller/render_template_matcher_spec.rb +0 -76
- data/spec/unit/shoulda/matchers/action_controller/render_with_layout_matcher_spec.rb +0 -62
- data/spec/unit/shoulda/matchers/action_controller/rescue_from_matcher_spec.rb +0 -90
- data/spec/unit/shoulda/matchers/action_controller/respond_with_matcher_spec.rb +0 -31
- data/spec/unit/shoulda/matchers/action_controller/route_matcher_spec.rb +0 -330
- data/spec/unit/shoulda/matchers/action_controller/route_params_spec.rb +0 -30
- data/spec/unit/shoulda/matchers/action_controller/set_flash_matcher_spec.rb +0 -67
- data/spec/unit/shoulda/matchers/action_controller/set_session_matcher_spec.rb +0 -17
- data/spec/unit/shoulda/matchers/action_controller/set_session_or_flash_matcher_spec.rb +0 -562
- data/spec/unit/shoulda/matchers/active_model/allow_mass_assignment_of_matcher_spec.rb +0 -115
- data/spec/unit/shoulda/matchers/active_model/allow_value_matcher_spec.rb +0 -823
- data/spec/unit/shoulda/matchers/active_model/disallow_value_matcher_spec.rb +0 -86
- data/spec/unit/shoulda/matchers/active_model/have_secure_password_matcher_spec.rb +0 -20
- data/spec/unit/shoulda/matchers/active_model/helpers_spec.rb +0 -162
- data/spec/unit/shoulda/matchers/active_model/validate_absence_of_matcher_spec.rb +0 -266
- data/spec/unit/shoulda/matchers/active_model/validate_acceptance_of_matcher_spec.rb +0 -91
- data/spec/unit/shoulda/matchers/active_model/validate_confirmation_of_matcher_spec.rb +0 -149
- data/spec/unit/shoulda/matchers/active_model/validate_exclusion_of_matcher_spec.rb +0 -207
- data/spec/unit/shoulda/matchers/active_model/validate_inclusion_of_matcher_spec.rb +0 -1015
- data/spec/unit/shoulda/matchers/active_model/validate_length_of_matcher_spec.rb +0 -288
- data/spec/unit/shoulda/matchers/active_model/validate_numericality_of_matcher_spec.rb +0 -1837
- data/spec/unit/shoulda/matchers/active_model/validate_presence_of_matcher_spec.rb +0 -380
- data/spec/unit/shoulda/matchers/active_record/accept_nested_attributes_for_matcher_spec.rb +0 -107
- data/spec/unit/shoulda/matchers/active_record/association_matcher_spec.rb +0 -1242
- data/spec/unit/shoulda/matchers/active_record/association_matchers/model_reflection_spec.rb +0 -251
- data/spec/unit/shoulda/matchers/active_record/define_enum_for_matcher_spec.rb +0 -168
- data/spec/unit/shoulda/matchers/active_record/have_db_column_matcher_spec.rb +0 -111
- data/spec/unit/shoulda/matchers/active_record/have_db_index_matcher_spec.rb +0 -85
- data/spec/unit/shoulda/matchers/active_record/have_readonly_attributes_matcher_spec.rb +0 -41
- data/spec/unit/shoulda/matchers/active_record/serialize_matcher_spec.rb +0 -86
- data/spec/unit/shoulda/matchers/active_record/validate_uniqueness_of_matcher_spec.rb +0 -1418
- data/spec/unit/shoulda/matchers/doublespeak/double_collection_spec.rb +0 -190
- data/spec/unit/shoulda/matchers/doublespeak/double_implementation_registry_spec.rb +0 -21
- data/spec/unit/shoulda/matchers/doublespeak/double_spec.rb +0 -271
- data/spec/unit/shoulda/matchers/doublespeak/object_double_spec.rb +0 -77
- data/spec/unit/shoulda/matchers/doublespeak/proxy_implementation_spec.rb +0 -72
- data/spec/unit/shoulda/matchers/doublespeak/stub_implementation_spec.rb +0 -101
- data/spec/unit/shoulda/matchers/doublespeak/world_spec.rb +0 -80
- data/spec/unit/shoulda/matchers/doublespeak_spec.rb +0 -27
- data/spec/unit/shoulda/matchers/independent/delegate_method_matcher/stubbed_target_spec.rb +0 -43
- data/spec/unit/shoulda/matchers/independent/delegate_method_matcher_spec.rb +0 -517
- data/spec/unit/shoulda/matchers/routing/route_matcher_spec.rb +0 -242
- data/spec/unit/shoulda/matchers/util/word_wrap_spec.rb +0 -252
- data/spec/unit_spec_helper.rb +0 -46
- data/spec/warnings_spy/filesystem.rb +0 -45
- data/spec/warnings_spy/partitioner.rb +0 -36
- data/spec/warnings_spy/reader.rb +0 -53
- data/spec/warnings_spy/reporter.rb +0 -88
- data/spec/warnings_spy.rb +0 -64
- data/tasks/documentation.rb +0 -199
- data/zeus.json +0 -11
@@ -12,7 +12,7 @@ module Shoulda
|
|
12
12
|
# end
|
13
13
|
#
|
14
14
|
# # RSpec
|
15
|
-
# describe PowerHungryCountry do
|
15
|
+
# RSpec.describe PowerHungryCountry, type: :model do
|
16
16
|
# it { should validate_absence_of(:nuclear_weapons) }
|
17
17
|
# end
|
18
18
|
#
|
@@ -35,7 +35,7 @@ module Shoulda
|
|
35
35
|
# end
|
36
36
|
#
|
37
37
|
# # RSpec
|
38
|
-
# describe PowerHungryCountry do
|
38
|
+
# RSpec.describe PowerHungryCountry, type: :model do
|
39
39
|
# it { should validate_absence_of(:nuclear_weapons).on(:create) }
|
40
40
|
# end
|
41
41
|
#
|
@@ -57,7 +57,7 @@ module Shoulda
|
|
57
57
|
# end
|
58
58
|
#
|
59
59
|
# # RSpec
|
60
|
-
# describe PowerHungryCountry do
|
60
|
+
# RSpec.describe PowerHungryCountry, type: :model do
|
61
61
|
# it do
|
62
62
|
# should validate_absence_of(:nuclear_weapons).
|
63
63
|
# with_message("there shall be peace on Earth")
|
@@ -88,6 +88,11 @@ module Shoulda
|
|
88
88
|
disallows_value_of(value, @expected_message)
|
89
89
|
end
|
90
90
|
|
91
|
+
def does_not_match?(subject)
|
92
|
+
super(subject)
|
93
|
+
allows_value_of(value, @expected_message)
|
94
|
+
end
|
95
|
+
|
91
96
|
def simple_description
|
92
97
|
"validate that :#{@attribute} is empty/falsy"
|
93
98
|
end
|
@@ -98,15 +103,19 @@ module Shoulda
|
|
98
103
|
if reflection
|
99
104
|
obj = reflection.klass.new
|
100
105
|
if collection?
|
101
|
-
[
|
106
|
+
[obj]
|
102
107
|
else
|
103
108
|
obj
|
104
109
|
end
|
110
|
+
elsif array_column?
|
111
|
+
['an arbitary value']
|
112
|
+
elsif enum_column?
|
113
|
+
enum_values.first
|
105
114
|
else
|
106
115
|
case column_type
|
107
116
|
when :integer, :float then 1
|
108
|
-
when :decimal then BigDecimal
|
109
|
-
when :datetime, :time, :timestamp then Time.
|
117
|
+
when :decimal then BigDecimal(1, 0)
|
118
|
+
when :datetime, :time, :timestamp then Time.current
|
110
119
|
when :date then Date.new
|
111
120
|
when :binary then '0'
|
112
121
|
else 'an arbitrary value'
|
@@ -132,6 +141,21 @@ module Shoulda
|
|
132
141
|
@subject.class.respond_to?(:reflect_on_association) &&
|
133
142
|
@subject.class.reflect_on_association(@attribute)
|
134
143
|
end
|
144
|
+
|
145
|
+
def array_column?
|
146
|
+
@subject.class.respond_to?(:columns_hash) &&
|
147
|
+
@subject.class.columns_hash[@attribute.to_s].respond_to?(:array) &&
|
148
|
+
@subject.class.columns_hash[@attribute.to_s].array
|
149
|
+
end
|
150
|
+
|
151
|
+
def enum_column?
|
152
|
+
@subject.class.respond_to?(:defined_enums) &&
|
153
|
+
@subject.class.defined_enums.key?(@attribute.to_s)
|
154
|
+
end
|
155
|
+
|
156
|
+
def enum_values
|
157
|
+
@subject.class.defined_enums[@attribute.to_s].values
|
158
|
+
end
|
135
159
|
end
|
136
160
|
end
|
137
161
|
end
|
@@ -12,7 +12,7 @@ module Shoulda
|
|
12
12
|
# end
|
13
13
|
#
|
14
14
|
# # RSpec
|
15
|
-
# describe Registration do
|
15
|
+
# RSpec.describe Registration, type: :model do
|
16
16
|
# it { should validate_acceptance_of(:eula) }
|
17
17
|
# end
|
18
18
|
#
|
@@ -35,7 +35,7 @@ module Shoulda
|
|
35
35
|
# end
|
36
36
|
#
|
37
37
|
# # RSpec
|
38
|
-
# describe Registration do
|
38
|
+
# RSpec.describe Registration, type: :model do
|
39
39
|
# it do
|
40
40
|
# should validate_acceptance_of(:terms_of_service).
|
41
41
|
# on(:create)
|
@@ -60,7 +60,7 @@ module Shoulda
|
|
60
60
|
# end
|
61
61
|
#
|
62
62
|
# # RSpec
|
63
|
-
# describe Registration do
|
63
|
+
# RSpec.describe Registration, type: :model do
|
64
64
|
# it do
|
65
65
|
# should validate_acceptance_of(:terms_of_service).
|
66
66
|
# with_message('You must accept the terms of service')
|
@@ -91,6 +91,11 @@ module Shoulda
|
|
91
91
|
disallows_value_of(false, @expected_message)
|
92
92
|
end
|
93
93
|
|
94
|
+
def does_not_match?(subject)
|
95
|
+
super(subject)
|
96
|
+
allows_value_of(false, @expected_message)
|
97
|
+
end
|
98
|
+
|
94
99
|
def simple_description
|
95
100
|
%(validate that :#{@attribute} has been set to "1")
|
96
101
|
end
|
@@ -12,7 +12,7 @@ module Shoulda
|
|
12
12
|
# end
|
13
13
|
#
|
14
14
|
# # RSpec
|
15
|
-
# describe User do
|
15
|
+
# RSpec.describe User, type: :model do
|
16
16
|
# it { should validate_confirmation_of(:email) }
|
17
17
|
# end
|
18
18
|
#
|
@@ -35,7 +35,7 @@ module Shoulda
|
|
35
35
|
# end
|
36
36
|
#
|
37
37
|
# # RSpec
|
38
|
-
# describe User do
|
38
|
+
# RSpec.describe User, type: :model do
|
39
39
|
# it { should validate_confirmation_of(:password).on(:create) }
|
40
40
|
# end
|
41
41
|
#
|
@@ -57,7 +57,7 @@ module Shoulda
|
|
57
57
|
# end
|
58
58
|
#
|
59
59
|
# # RSpec
|
60
|
-
# describe User do
|
60
|
+
# RSpec.describe User, type: :model do
|
61
61
|
# it do
|
62
62
|
# should validate_confirmation_of(:password).
|
63
63
|
# with_message('Please re-enter your password')
|
@@ -100,8 +100,22 @@ module Shoulda
|
|
100
100
|
allows_missing_confirmation
|
101
101
|
end
|
102
102
|
|
103
|
+
def does_not_match?(subject)
|
104
|
+
super(subject)
|
105
|
+
|
106
|
+
allows_different_value ||
|
107
|
+
disallows_same_value ||
|
108
|
+
disallows_missing_confirmation
|
109
|
+
end
|
110
|
+
|
103
111
|
private
|
104
112
|
|
113
|
+
def allows_different_value
|
114
|
+
allows_value_of('different value') do |matcher|
|
115
|
+
qualify_matcher(matcher, 'some value')
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
105
119
|
def disallows_different_value
|
106
120
|
disallows_value_of('different value') do |matcher|
|
107
121
|
qualify_matcher(matcher, 'some value')
|
@@ -114,31 +128,32 @@ module Shoulda
|
|
114
128
|
end
|
115
129
|
end
|
116
130
|
|
131
|
+
def disallows_same_value
|
132
|
+
disallows_value_of('same value') do |matcher|
|
133
|
+
qualify_matcher(matcher, 'same value')
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
117
137
|
def allows_missing_confirmation
|
118
138
|
allows_value_of('any value') do |matcher|
|
119
139
|
qualify_matcher(matcher, nil)
|
120
140
|
end
|
121
141
|
end
|
122
142
|
|
143
|
+
def disallows_missing_confirmation
|
144
|
+
disallows_value_of('any value') do |matcher|
|
145
|
+
qualify_matcher(matcher, nil)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
123
149
|
def qualify_matcher(matcher, confirmation_attribute_value)
|
124
150
|
matcher.values_to_preset = {
|
125
|
-
confirmation_attribute => confirmation_attribute_value
|
151
|
+
confirmation_attribute => confirmation_attribute_value,
|
126
152
|
}
|
127
153
|
matcher.with_message(
|
128
154
|
@expected_message,
|
129
155
|
against: confirmation_attribute,
|
130
|
-
values: { attribute: attribute }
|
131
|
-
)
|
132
|
-
end
|
133
|
-
|
134
|
-
def set_confirmation(value)
|
135
|
-
@last_value_set_on_confirmation_attribute = value
|
136
|
-
|
137
|
-
AttributeSetter.set(
|
138
|
-
matcher_name: 'confirmation',
|
139
|
-
object: @subject,
|
140
|
-
attribute_name: confirmation_attribute,
|
141
|
-
value: value
|
156
|
+
values: { attribute: attribute },
|
142
157
|
)
|
143
158
|
end
|
144
159
|
end
|
@@ -16,7 +16,7 @@ module Shoulda
|
|
16
16
|
# end
|
17
17
|
#
|
18
18
|
# # RSpec
|
19
|
-
# describe Game do
|
19
|
+
# RSpec.describe Game, type: :model do
|
20
20
|
# it do
|
21
21
|
# should validate_exclusion_of(:supported_os).
|
22
22
|
# in_array(['Mac', 'Linux'])
|
@@ -35,11 +35,11 @@ module Shoulda
|
|
35
35
|
# include ActiveModel::Model
|
36
36
|
# attr_accessor :supported_os
|
37
37
|
#
|
38
|
-
# validates_exclusion_of :supported_os, in:
|
38
|
+
# validates_exclusion_of :supported_os, in: 5..8
|
39
39
|
# end
|
40
40
|
#
|
41
41
|
# # RSpec
|
42
|
-
# describe Game do
|
42
|
+
# RSpec.describe Game, type: :model do
|
43
43
|
# it do
|
44
44
|
# should validate_exclusion_of(:floors_with_enemies).
|
45
45
|
# in_range(5..8)
|
@@ -68,7 +68,7 @@ module Shoulda
|
|
68
68
|
# end
|
69
69
|
#
|
70
70
|
# # RSpec
|
71
|
-
# describe Game do
|
71
|
+
# RSpec.describe Game, type: :model do
|
72
72
|
# it do
|
73
73
|
# should validate_exclusion_of(:weapon).
|
74
74
|
# in_array(['pistol', 'paintball gun', 'stick']).
|
@@ -97,7 +97,7 @@ module Shoulda
|
|
97
97
|
# end
|
98
98
|
#
|
99
99
|
# # RSpec
|
100
|
-
# describe Game do
|
100
|
+
# RSpec.describe Game, type: :model do
|
101
101
|
# it do
|
102
102
|
# should validate_exclusion_of(:weapon).
|
103
103
|
# in_array(['pistol', 'paintball gun', 'stick']).
|
@@ -146,11 +146,12 @@ module Shoulda
|
|
146
146
|
else
|
147
147
|
description = "validate that :#{@attribute}"
|
148
148
|
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
149
|
+
description <<
|
150
|
+
if @array.many?
|
151
|
+
" is neither #{inspected_array}"
|
152
|
+
else
|
153
|
+
" is not #{inspected_array}"
|
154
|
+
end
|
154
155
|
|
155
156
|
description
|
156
157
|
end
|
@@ -162,15 +163,34 @@ module Shoulda
|
|
162
163
|
if @range
|
163
164
|
allows_lower_value &&
|
164
165
|
disallows_minimum_value &&
|
165
|
-
|
166
|
-
|
166
|
+
disallows_maximum_value &&
|
167
|
+
allows_higher_value
|
167
168
|
elsif @array
|
168
169
|
disallows_all_values_in_array?
|
169
170
|
end
|
170
171
|
end
|
171
172
|
|
173
|
+
def does_not_match?(subject)
|
174
|
+
super(subject)
|
175
|
+
|
176
|
+
if @range
|
177
|
+
disallows_lower_value ||
|
178
|
+
allows_minimum_value ||
|
179
|
+
allows_maximum_value ||
|
180
|
+
disallows_higher_value
|
181
|
+
elsif @array
|
182
|
+
allows_any_values_in_array?
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
172
186
|
private
|
173
187
|
|
188
|
+
def allows_any_values_in_array?
|
189
|
+
@array.any? do |value|
|
190
|
+
allows_value_of(value, @expected_message)
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
174
194
|
def disallows_all_values_in_array?
|
175
195
|
@array.all? do |value|
|
176
196
|
disallows_value_of(value, @expected_message)
|
@@ -181,18 +201,34 @@ module Shoulda
|
|
181
201
|
@minimum == 0 || allows_value_of(@minimum - 1, @expected_message)
|
182
202
|
end
|
183
203
|
|
184
|
-
def
|
185
|
-
|
204
|
+
def disallows_lower_value
|
205
|
+
@minimum != 0 && disallows_value_of(@minimum - 1, @expected_message)
|
206
|
+
end
|
207
|
+
|
208
|
+
def allows_minimum_value
|
209
|
+
allows_value_of(@minimum, @expected_message)
|
186
210
|
end
|
187
211
|
|
188
212
|
def disallows_minimum_value
|
189
213
|
disallows_value_of(@minimum, @expected_message)
|
190
214
|
end
|
191
215
|
|
216
|
+
def allows_maximum_value
|
217
|
+
allows_value_of(@maximum, @expected_message)
|
218
|
+
end
|
219
|
+
|
192
220
|
def disallows_maximum_value
|
193
221
|
disallows_value_of(@maximum, @expected_message)
|
194
222
|
end
|
195
223
|
|
224
|
+
def allows_higher_value
|
225
|
+
allows_value_of(@maximum + 1, @expected_message)
|
226
|
+
end
|
227
|
+
|
228
|
+
def disallows_higher_value
|
229
|
+
disallows_value_of(@maximum + 1, @expected_message)
|
230
|
+
end
|
231
|
+
|
196
232
|
def inspect_message
|
197
233
|
if @range
|
198
234
|
@range.inspect
|
@@ -203,8 +239,8 @@ module Shoulda
|
|
203
239
|
|
204
240
|
def inspected_array
|
205
241
|
Shoulda::Matchers::Util.inspect_values(@array).to_sentence(
|
206
|
-
two_words_connector:
|
207
|
-
last_word_connector:
|
242
|
+
two_words_connector: ' nor ',
|
243
|
+
last_word_connector: ', nor ',
|
208
244
|
)
|
209
245
|
end
|
210
246
|
end
|