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.
Files changed (288) hide show
  1. checksums.yaml +5 -5
  2. data/{MIT-LICENSE → LICENSE} +1 -1
  3. data/README.md +407 -232
  4. data/docs/errors/NonCaseSwappableValueError.md +2 -2
  5. data/lib/shoulda/matchers/action_controller/callback_matcher.rb +7 -80
  6. data/lib/shoulda/matchers/action_controller/filter_param_matcher.rb +4 -3
  7. data/lib/shoulda/matchers/action_controller/flash_store.rb +2 -4
  8. data/lib/shoulda/matchers/action_controller/permit_matcher.rb +36 -30
  9. data/lib/shoulda/matchers/action_controller/redirect_to_matcher.rb +8 -10
  10. data/lib/shoulda/matchers/action_controller/render_template_matcher.rb +7 -9
  11. data/lib/shoulda/matchers/action_controller/render_with_layout_matcher.rb +18 -15
  12. data/lib/shoulda/matchers/action_controller/rescue_from_matcher.rb +3 -2
  13. data/lib/shoulda/matchers/action_controller/respond_with_matcher.rb +3 -3
  14. data/lib/shoulda/matchers/action_controller/route_matcher.rb +88 -29
  15. data/lib/shoulda/matchers/action_controller/route_params.rb +2 -2
  16. data/lib/shoulda/matchers/action_controller/set_flash_matcher.rb +4 -4
  17. data/lib/shoulda/matchers/action_controller/set_session_matcher.rb +3 -3
  18. data/lib/shoulda/matchers/action_controller/set_session_or_flash_matcher.rb +19 -13
  19. data/lib/shoulda/matchers/action_controller.rb +2 -0
  20. data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_changed_value_error.rb +1 -1
  21. data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setter.rb +5 -9
  22. data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setter_and_validator.rb +2 -2
  23. data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setters.rb +1 -1
  24. data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setters_and_validators.rb +1 -1
  25. data/lib/shoulda/matchers/active_model/allow_value_matcher.rb +42 -39
  26. data/lib/shoulda/matchers/active_model/disallow_value_matcher.rb +1 -1
  27. data/lib/shoulda/matchers/active_model/have_secure_password_matcher.rb +52 -26
  28. data/lib/shoulda/matchers/active_model/helpers.rb +2 -2
  29. data/lib/shoulda/matchers/active_model/numericality_matchers/comparison_matcher.rb +32 -30
  30. data/lib/shoulda/matchers/active_model/numericality_matchers/numeric_type_matcher.rb +2 -1
  31. data/lib/shoulda/matchers/active_model/qualifiers/allow_blank.rb +26 -0
  32. data/lib/shoulda/matchers/active_model/qualifiers/allow_nil.rb +26 -0
  33. data/lib/shoulda/matchers/active_model/qualifiers/ignoring_interference_by_writer.rb +1 -1
  34. data/lib/shoulda/matchers/active_model/qualifiers.rb +2 -0
  35. data/lib/shoulda/matchers/active_model/validate_absence_of_matcher.rb +30 -6
  36. data/lib/shoulda/matchers/active_model/validate_acceptance_of_matcher.rb +8 -3
  37. data/lib/shoulda/matchers/active_model/validate_confirmation_of_matcher.rb +31 -16
  38. data/lib/shoulda/matchers/active_model/validate_exclusion_of_matcher.rb +52 -16
  39. data/lib/shoulda/matchers/active_model/validate_inclusion_of_matcher.rb +137 -84
  40. data/lib/shoulda/matchers/active_model/validate_length_of_matcher.rb +159 -46
  41. data/lib/shoulda/matchers/active_model/validate_numericality_of_matcher.rb +130 -66
  42. data/lib/shoulda/matchers/active_model/validate_presence_of_matcher.rb +251 -24
  43. data/lib/shoulda/matchers/active_model/validation_matcher/build_description.rb +12 -9
  44. data/lib/shoulda/matchers/active_model/validation_matcher.rb +38 -6
  45. data/lib/shoulda/matchers/active_model/validation_message_finder.rb +2 -4
  46. data/lib/shoulda/matchers/active_model/validator.rb +4 -9
  47. data/lib/shoulda/matchers/active_model.rb +3 -5
  48. data/lib/shoulda/matchers/active_record/accept_nested_attributes_for_matcher.rb +10 -7
  49. data/lib/shoulda/matchers/active_record/association_matcher.rb +386 -111
  50. data/lib/shoulda/matchers/active_record/association_matchers/counter_cache_matcher.rb +5 -2
  51. data/lib/shoulda/matchers/active_record/association_matchers/dependent_matcher.rb +4 -4
  52. data/lib/shoulda/matchers/active_record/association_matchers/inverse_of_matcher.rb +1 -1
  53. data/lib/shoulda/matchers/active_record/association_matchers/join_table_matcher.rb +11 -6
  54. data/lib/shoulda/matchers/active_record/association_matchers/model_reflection.rb +14 -15
  55. data/lib/shoulda/matchers/active_record/association_matchers/model_reflector.rb +30 -8
  56. data/lib/shoulda/matchers/active_record/association_matchers/option_verifier.rb +34 -11
  57. data/lib/shoulda/matchers/active_record/association_matchers/optional_matcher.rb +69 -0
  58. data/lib/shoulda/matchers/active_record/association_matchers/order_matcher.rb +1 -1
  59. data/lib/shoulda/matchers/active_record/association_matchers/required_matcher.rb +74 -0
  60. data/lib/shoulda/matchers/active_record/association_matchers/source_matcher.rb +3 -2
  61. data/lib/shoulda/matchers/active_record/association_matchers/through_matcher.rb +7 -5
  62. data/lib/shoulda/matchers/active_record/define_enum_for_matcher.rb +458 -42
  63. data/lib/shoulda/matchers/active_record/have_attached_matcher.rb +185 -0
  64. data/lib/shoulda/matchers/active_record/have_db_column_matcher.rb +63 -23
  65. data/lib/shoulda/matchers/active_record/have_db_index_matcher.rb +164 -48
  66. data/lib/shoulda/matchers/active_record/have_implicit_order_column.rb +106 -0
  67. data/lib/shoulda/matchers/active_record/have_readonly_attribute_matcher.rb +13 -11
  68. data/lib/shoulda/matchers/active_record/have_rich_text_matcher.rb +83 -0
  69. data/lib/shoulda/matchers/active_record/have_secure_token_matcher.rb +132 -0
  70. data/lib/shoulda/matchers/active_record/serialize_matcher.rb +18 -18
  71. data/lib/shoulda/matchers/active_record/uniqueness/test_model_creator.rb +1 -3
  72. data/lib/shoulda/matchers/active_record/uniqueness/test_models.rb +0 -2
  73. data/lib/shoulda/matchers/active_record/uniqueness.rb +1 -1
  74. data/lib/shoulda/matchers/active_record/validate_uniqueness_of_matcher.rb +430 -200
  75. data/lib/shoulda/matchers/active_record.rb +28 -20
  76. data/lib/shoulda/matchers/configuration.rb +12 -1
  77. data/lib/shoulda/matchers/doublespeak/double.rb +1 -1
  78. data/lib/shoulda/matchers/doublespeak/double_collection.rb +3 -3
  79. data/lib/shoulda/matchers/doublespeak/double_implementation_registry.rb +8 -5
  80. data/lib/shoulda/matchers/doublespeak/object_double.rb +6 -2
  81. data/lib/shoulda/matchers/doublespeak/stub_implementation.rb +1 -5
  82. data/lib/shoulda/matchers/doublespeak/world.rb +2 -2
  83. data/lib/shoulda/matchers/doublespeak.rb +2 -1
  84. data/lib/shoulda/matchers/error.rb +1 -1
  85. data/lib/shoulda/matchers/independent/delegate_method_matcher.rb +109 -29
  86. data/lib/shoulda/matchers/independent.rb +2 -2
  87. data/lib/shoulda/matchers/integrations/configuration.rb +8 -4
  88. data/lib/shoulda/matchers/integrations/libraries/action_controller.rb +1 -1
  89. data/lib/shoulda/matchers/integrations/libraries/rails.rb +2 -2
  90. data/lib/shoulda/matchers/integrations/test_frameworks/active_support_test_case.rb +1 -1
  91. data/lib/shoulda/matchers/integrations/test_frameworks/minitest_4.rb +1 -1
  92. data/lib/shoulda/matchers/integrations/test_frameworks/minitest_5.rb +1 -1
  93. data/lib/shoulda/matchers/integrations/test_frameworks/missing_test_framework.rb +1 -1
  94. data/lib/shoulda/matchers/integrations/test_frameworks/test_unit.rb +1 -1
  95. data/lib/shoulda/matchers/rails_shim.rb +172 -51
  96. data/lib/shoulda/matchers/routing.rb +2 -2
  97. data/lib/shoulda/matchers/util/word_wrap.rb +17 -12
  98. data/lib/shoulda/matchers/util.rb +39 -5
  99. data/lib/shoulda/matchers/version.rb +1 -1
  100. data/lib/shoulda/matchers/warn.rb +4 -3
  101. data/shoulda-matchers.gemspec +33 -15
  102. metadata +31 -338
  103. data/.gitignore +0 -12
  104. data/.hound.yml +0 -3
  105. data/.hound_config/ruby.yml +0 -12
  106. data/.travis.yml +0 -19
  107. data/.yardopts +0 -10
  108. data/Appraisals +0 -73
  109. data/CONTRIBUTING.md +0 -101
  110. data/Gemfile +0 -15
  111. data/Gemfile.lock +0 -70
  112. data/NEWS.md +0 -986
  113. data/Rakefile +0 -39
  114. data/custom_plan.rb +0 -88
  115. data/doc_config/gh-pages/index.html.erb +0 -9
  116. data/doc_config/yard/setup.rb +0 -22
  117. data/doc_config/yard/templates/default/fulldoc/html/css/bootstrap.css +0 -5967
  118. data/doc_config/yard/templates/default/fulldoc/html/css/full_list.css +0 -12
  119. data/doc_config/yard/templates/default/fulldoc/html/css/global.css +0 -62
  120. data/doc_config/yard/templates/default/fulldoc/html/css/solarized.css +0 -69
  121. data/doc_config/yard/templates/default/fulldoc/html/css/style.css +0 -312
  122. data/doc_config/yard/templates/default/fulldoc/html/full_list.erb +0 -32
  123. data/doc_config/yard/templates/default/fulldoc/html/full_list_class.erb +0 -1
  124. data/doc_config/yard/templates/default/fulldoc/html/full_list_method.erb +0 -8
  125. data/doc_config/yard/templates/default/fulldoc/html/js/app.js +0 -298
  126. data/doc_config/yard/templates/default/fulldoc/html/js/full_list.js +0 -1
  127. data/doc_config/yard/templates/default/fulldoc/html/js/jquery.stickyheaders.js +0 -289
  128. data/doc_config/yard/templates/default/fulldoc/html/js/underscore.min.js +0 -6
  129. data/doc_config/yard/templates/default/fulldoc/html/setup.rb +0 -8
  130. data/doc_config/yard/templates/default/layout/html/breadcrumb.erb +0 -14
  131. data/doc_config/yard/templates/default/layout/html/fonts.erb +0 -1
  132. data/doc_config/yard/templates/default/layout/html/footer.erb +0 -6
  133. data/doc_config/yard/templates/default/layout/html/layout.erb +0 -23
  134. data/doc_config/yard/templates/default/layout/html/search.erb +0 -13
  135. data/doc_config/yard/templates/default/layout/html/setup.rb +0 -40
  136. data/doc_config/yard/templates/default/method_details/html/source.erb +0 -10
  137. data/doc_config/yard/templates/default/module/html/box_info.erb +0 -31
  138. data/gemfiles/4.0.0.gemfile +0 -38
  139. data/gemfiles/4.0.0.gemfile.lock +0 -223
  140. data/gemfiles/4.0.1.gemfile +0 -38
  141. data/gemfiles/4.0.1.gemfile.lock +0 -225
  142. data/gemfiles/4.1.gemfile +0 -38
  143. data/gemfiles/4.1.gemfile.lock +0 -220
  144. data/gemfiles/4.2.gemfile +0 -38
  145. data/gemfiles/4.2.gemfile.lock +0 -243
  146. data/lib/shoulda/matchers/active_model/allow_mass_assignment_of_matcher.rb +0 -159
  147. data/lib/shoulda/matchers/independent/delegate_method_matcher/stubbed_target.rb +0 -37
  148. data/script/SUPPORTED_VERSIONS +0 -1
  149. data/script/install_gems_in_all_appraisals +0 -14
  150. data/script/run_all_tests +0 -14
  151. data/script/update_gem_in_all_appraisals +0 -15
  152. data/script/update_gems_in_all_appraisals +0 -14
  153. data/spec/acceptance/active_model_integration_spec.rb +0 -23
  154. data/spec/acceptance/independent_matchers_spec.rb +0 -125
  155. data/spec/acceptance/multiple_libraries_integration_spec.rb +0 -55
  156. data/spec/acceptance/rails_integration_spec.rb +0 -156
  157. data/spec/acceptance_spec_helper.rb +0 -23
  158. data/spec/doublespeak_spec_helper.rb +0 -2
  159. data/spec/report_warnings.rb +0 -7
  160. data/spec/spec_helper.rb +0 -21
  161. data/spec/support/acceptance/adds_shoulda_matchers_to_project.rb +0 -133
  162. data/spec/support/acceptance/helpers/active_model_helpers.rb +0 -11
  163. data/spec/support/acceptance/helpers/array_helpers.rb +0 -13
  164. data/spec/support/acceptance/helpers/base_helpers.rb +0 -19
  165. data/spec/support/acceptance/helpers/command_helpers.rb +0 -55
  166. data/spec/support/acceptance/helpers/file_helpers.rb +0 -19
  167. data/spec/support/acceptance/helpers/gem_helpers.rb +0 -31
  168. data/spec/support/acceptance/helpers/minitest_helpers.rb +0 -11
  169. data/spec/support/acceptance/helpers/n_unit_helpers.rb +0 -25
  170. data/spec/support/acceptance/helpers/pluralization_helpers.rb +0 -13
  171. data/spec/support/acceptance/helpers/rails_version_helpers.rb +0 -11
  172. data/spec/support/acceptance/helpers/rspec_helpers.rb +0 -24
  173. data/spec/support/acceptance/helpers/ruby_version_helpers.rb +0 -9
  174. data/spec/support/acceptance/helpers/step_helpers.rb +0 -127
  175. data/spec/support/acceptance/helpers.rb +0 -31
  176. data/spec/support/acceptance/matchers/have_output.rb +0 -31
  177. data/spec/support/acceptance/matchers/indicate_number_of_tests_was_run_matcher.rb +0 -55
  178. data/spec/support/acceptance/matchers/indicate_that_tests_were_run_matcher.rb +0 -103
  179. data/spec/support/tests/bundle.rb +0 -94
  180. data/spec/support/tests/command_runner.rb +0 -230
  181. data/spec/support/tests/current_bundle.rb +0 -61
  182. data/spec/support/tests/database.rb +0 -28
  183. data/spec/support/tests/database_adapters/postgresql.rb +0 -25
  184. data/spec/support/tests/database_adapters/sqlite3.rb +0 -26
  185. data/spec/support/tests/database_configuration.rb +0 -33
  186. data/spec/support/tests/database_configuration_registry.rb +0 -28
  187. data/spec/support/tests/filesystem.rb +0 -100
  188. data/spec/support/tests/version.rb +0 -45
  189. data/spec/support/unit/active_record/create_table.rb +0 -54
  190. data/spec/support/unit/attribute.rb +0 -47
  191. data/spec/support/unit/capture.rb +0 -40
  192. data/spec/support/unit/change_value.rb +0 -111
  193. data/spec/support/unit/create_model_arguments/basic.rb +0 -135
  194. data/spec/support/unit/create_model_arguments/has_many.rb +0 -15
  195. data/spec/support/unit/create_model_arguments/uniqueness_matcher.rb +0 -74
  196. data/spec/support/unit/helpers/active_model_helpers.rb +0 -27
  197. data/spec/support/unit/helpers/active_model_versions.rb +0 -28
  198. data/spec/support/unit/helpers/active_record_versions.rb +0 -24
  199. data/spec/support/unit/helpers/active_resource_builder.rb +0 -27
  200. data/spec/support/unit/helpers/allow_value_matcher_helpers.rb +0 -15
  201. data/spec/support/unit/helpers/class_builder.rb +0 -90
  202. data/spec/support/unit/helpers/column_type_helpers.rb +0 -26
  203. data/spec/support/unit/helpers/confirmation_matcher_helpers.rb +0 -17
  204. data/spec/support/unit/helpers/controller_builder.rb +0 -63
  205. data/spec/support/unit/helpers/database_helpers.rb +0 -20
  206. data/spec/support/unit/helpers/i18n_faker.rb +0 -15
  207. data/spec/support/unit/helpers/mailer_builder.rb +0 -12
  208. data/spec/support/unit/helpers/model_builder.rb +0 -114
  209. data/spec/support/unit/helpers/rails_versions.rb +0 -28
  210. data/spec/support/unit/helpers/validation_matcher_scenario_helpers.rb +0 -44
  211. data/spec/support/unit/i18n.rb +0 -7
  212. data/spec/support/unit/load_environment.rb +0 -12
  213. data/spec/support/unit/matchers/deprecate.rb +0 -60
  214. data/spec/support/unit/matchers/fail_with_message_including_matcher.rb +0 -51
  215. data/spec/support/unit/matchers/fail_with_message_matcher.rb +0 -62
  216. data/spec/support/unit/matchers/print_warning_including.rb +0 -59
  217. data/spec/support/unit/model_creation_strategies/active_model.rb +0 -111
  218. data/spec/support/unit/model_creation_strategies/active_record.rb +0 -77
  219. data/spec/support/unit/model_creators/active_model.rb +0 -39
  220. data/spec/support/unit/model_creators/active_record/has_and_belongs_to_many.rb +0 -95
  221. data/spec/support/unit/model_creators/active_record/has_many.rb +0 -67
  222. data/spec/support/unit/model_creators/active_record/uniqueness_matcher.rb +0 -42
  223. data/spec/support/unit/model_creators/active_record.rb +0 -43
  224. data/spec/support/unit/model_creators/basic.rb +0 -97
  225. data/spec/support/unit/model_creators.rb +0 -19
  226. data/spec/support/unit/rails_application.rb +0 -126
  227. data/spec/support/unit/record_builder_with_i18n_validation_message.rb +0 -69
  228. data/spec/support/unit/record_validating_confirmation_builder.rb +0 -51
  229. data/spec/support/unit/record_with_different_error_attribute_builder.rb +0 -92
  230. data/spec/support/unit/shared_examples/ignoring_interference_by_writer.rb +0 -79
  231. data/spec/support/unit/shared_examples/numerical_submatcher.rb +0 -17
  232. data/spec/support/unit/shared_examples/set_session_or_flash.rb +0 -360
  233. data/spec/support/unit/validation_matcher_scenario.rb +0 -62
  234. data/spec/unit/shoulda/matchers/action_controller/callback_matcher_spec.rb +0 -82
  235. data/spec/unit/shoulda/matchers/action_controller/filter_param_matcher_spec.rb +0 -28
  236. data/spec/unit/shoulda/matchers/action_controller/permit_matcher_spec.rb +0 -592
  237. data/spec/unit/shoulda/matchers/action_controller/redirect_to_matcher_spec.rb +0 -42
  238. data/spec/unit/shoulda/matchers/action_controller/render_template_matcher_spec.rb +0 -76
  239. data/spec/unit/shoulda/matchers/action_controller/render_with_layout_matcher_spec.rb +0 -62
  240. data/spec/unit/shoulda/matchers/action_controller/rescue_from_matcher_spec.rb +0 -90
  241. data/spec/unit/shoulda/matchers/action_controller/respond_with_matcher_spec.rb +0 -31
  242. data/spec/unit/shoulda/matchers/action_controller/route_matcher_spec.rb +0 -330
  243. data/spec/unit/shoulda/matchers/action_controller/route_params_spec.rb +0 -30
  244. data/spec/unit/shoulda/matchers/action_controller/set_flash_matcher_spec.rb +0 -67
  245. data/spec/unit/shoulda/matchers/action_controller/set_session_matcher_spec.rb +0 -17
  246. data/spec/unit/shoulda/matchers/action_controller/set_session_or_flash_matcher_spec.rb +0 -562
  247. data/spec/unit/shoulda/matchers/active_model/allow_mass_assignment_of_matcher_spec.rb +0 -115
  248. data/spec/unit/shoulda/matchers/active_model/allow_value_matcher_spec.rb +0 -823
  249. data/spec/unit/shoulda/matchers/active_model/disallow_value_matcher_spec.rb +0 -86
  250. data/spec/unit/shoulda/matchers/active_model/have_secure_password_matcher_spec.rb +0 -20
  251. data/spec/unit/shoulda/matchers/active_model/helpers_spec.rb +0 -162
  252. data/spec/unit/shoulda/matchers/active_model/validate_absence_of_matcher_spec.rb +0 -266
  253. data/spec/unit/shoulda/matchers/active_model/validate_acceptance_of_matcher_spec.rb +0 -91
  254. data/spec/unit/shoulda/matchers/active_model/validate_confirmation_of_matcher_spec.rb +0 -149
  255. data/spec/unit/shoulda/matchers/active_model/validate_exclusion_of_matcher_spec.rb +0 -207
  256. data/spec/unit/shoulda/matchers/active_model/validate_inclusion_of_matcher_spec.rb +0 -1015
  257. data/spec/unit/shoulda/matchers/active_model/validate_length_of_matcher_spec.rb +0 -288
  258. data/spec/unit/shoulda/matchers/active_model/validate_numericality_of_matcher_spec.rb +0 -1837
  259. data/spec/unit/shoulda/matchers/active_model/validate_presence_of_matcher_spec.rb +0 -380
  260. data/spec/unit/shoulda/matchers/active_record/accept_nested_attributes_for_matcher_spec.rb +0 -107
  261. data/spec/unit/shoulda/matchers/active_record/association_matcher_spec.rb +0 -1242
  262. data/spec/unit/shoulda/matchers/active_record/association_matchers/model_reflection_spec.rb +0 -251
  263. data/spec/unit/shoulda/matchers/active_record/define_enum_for_matcher_spec.rb +0 -168
  264. data/spec/unit/shoulda/matchers/active_record/have_db_column_matcher_spec.rb +0 -111
  265. data/spec/unit/shoulda/matchers/active_record/have_db_index_matcher_spec.rb +0 -85
  266. data/spec/unit/shoulda/matchers/active_record/have_readonly_attributes_matcher_spec.rb +0 -41
  267. data/spec/unit/shoulda/matchers/active_record/serialize_matcher_spec.rb +0 -86
  268. data/spec/unit/shoulda/matchers/active_record/validate_uniqueness_of_matcher_spec.rb +0 -1418
  269. data/spec/unit/shoulda/matchers/doublespeak/double_collection_spec.rb +0 -190
  270. data/spec/unit/shoulda/matchers/doublespeak/double_implementation_registry_spec.rb +0 -21
  271. data/spec/unit/shoulda/matchers/doublespeak/double_spec.rb +0 -271
  272. data/spec/unit/shoulda/matchers/doublespeak/object_double_spec.rb +0 -77
  273. data/spec/unit/shoulda/matchers/doublespeak/proxy_implementation_spec.rb +0 -72
  274. data/spec/unit/shoulda/matchers/doublespeak/stub_implementation_spec.rb +0 -101
  275. data/spec/unit/shoulda/matchers/doublespeak/world_spec.rb +0 -80
  276. data/spec/unit/shoulda/matchers/doublespeak_spec.rb +0 -27
  277. data/spec/unit/shoulda/matchers/independent/delegate_method_matcher/stubbed_target_spec.rb +0 -43
  278. data/spec/unit/shoulda/matchers/independent/delegate_method_matcher_spec.rb +0 -517
  279. data/spec/unit/shoulda/matchers/routing/route_matcher_spec.rb +0 -242
  280. data/spec/unit/shoulda/matchers/util/word_wrap_spec.rb +0 -252
  281. data/spec/unit_spec_helper.rb +0 -46
  282. data/spec/warnings_spy/filesystem.rb +0 -45
  283. data/spec/warnings_spy/partitioner.rb +0 -36
  284. data/spec/warnings_spy/reader.rb +0 -53
  285. data/spec/warnings_spy/reporter.rb +0 -88
  286. data/spec/warnings_spy.rb +0 -64
  287. data/tasks/documentation.rb +0 -199
  288. data/zeus.json +0 -11
@@ -12,7 +12,7 @@ module Shoulda
12
12
  # end
13
13
  #
14
14
  # # RSpec
15
- # describe Person do
15
+ # RSpec.describe Person, type: :model do
16
16
  # it { should validate_numericality_of(:gpa) }
17
17
  # end
18
18
  #
@@ -35,7 +35,7 @@ module Shoulda
35
35
  # end
36
36
  #
37
37
  # # RSpec
38
- # describe Person do
38
+ # RSpec.describe Person, type: :model do
39
39
  # it do
40
40
  # should validate_numericality_of(:number_of_dependents).
41
41
  # on(:create)
@@ -61,7 +61,7 @@ module Shoulda
61
61
  # end
62
62
  #
63
63
  # # RSpec
64
- # describe Person do
64
+ # RSpec.describe Person, type: :model do
65
65
  # it { should validate_numericality_of(:age).only_integer }
66
66
  # end
67
67
  #
@@ -85,7 +85,7 @@ module Shoulda
85
85
  # end
86
86
  #
87
87
  # # RSpec
88
- # describe Person do
88
+ # RSpec.describe Person, type: :model do
89
89
  # it do
90
90
  # should validate_numericality_of(:number_of_cars).
91
91
  # is_less_than(2)
@@ -113,7 +113,7 @@ module Shoulda
113
113
  # end
114
114
  #
115
115
  # # RSpec
116
- # describe Person do
116
+ # RSpec.describe Person, type: :model do
117
117
  # it do
118
118
  # should validate_numericality_of(:birth_year).
119
119
  # is_less_than_or_equal_to(1987)
@@ -140,7 +140,7 @@ module Shoulda
140
140
  # end
141
141
  #
142
142
  # # RSpec
143
- # describe Person do
143
+ # RSpec.describe Person, type: :model do
144
144
  # it { should validate_numericality_of(:weight).is_equal_to(150) }
145
145
  # end
146
146
  #
@@ -164,7 +164,7 @@ module Shoulda
164
164
  # end
165
165
  #
166
166
  # # RSpec
167
- # describe Person do
167
+ # RSpec.describe Person, type: :model do
168
168
  # it do
169
169
  # should validate_numericality_of(:height).
170
170
  # is_greater_than_or_equal_to(55)
@@ -191,7 +191,7 @@ module Shoulda
191
191
  # end
192
192
  #
193
193
  # # RSpec
194
- # describe Person do
194
+ # RSpec.describe Person, type: :model do
195
195
  # it do
196
196
  # should validate_numericality_of(:legal_age).
197
197
  # is_greater_than(21)
@@ -204,6 +204,33 @@ module Shoulda
204
204
  # is_greater_than(21)
205
205
  # end
206
206
  #
207
+ # ##### is_other_than
208
+ #
209
+ # Use `is_other_than` to test usage of the `:other_than` option.
210
+ # This asserts that the attribute can take a number which is not equal to
211
+ # the given value.
212
+ #
213
+ # class Person
214
+ # include ActiveModel::Model
215
+ # attr_accessor :legal_age
216
+ #
217
+ # validates_numericality_of :legal_age, other_than: 21
218
+ # end
219
+ #
220
+ # # RSpec
221
+ # RSpec.describe Person, type: :model do
222
+ # it do
223
+ # should validate_numericality_of(:legal_age).
224
+ # is_other_than(21)
225
+ # end
226
+ # end
227
+ #
228
+ # # Minitest (Shoulda)
229
+ # class PersonTest < ActiveSupport::TestCase
230
+ # should validate_numericality_of(:legal_age).
231
+ # is_other_than(21)
232
+ # end
233
+ #
207
234
  # ##### even
208
235
  #
209
236
  # Use `even` to test usage of the `:even` option. This asserts that the
@@ -217,7 +244,7 @@ module Shoulda
217
244
  # end
218
245
  #
219
246
  # # RSpec
220
- # describe Person do
247
+ # RSpec.describe Person, type: :model do
221
248
  # it { should validate_numericality_of(:birth_month).even }
222
249
  # end
223
250
  #
@@ -240,7 +267,7 @@ module Shoulda
240
267
  # end
241
268
  #
242
269
  # # RSpec
243
- # describe Person do
270
+ # RSpec.describe Person, type: :model do
244
271
  # it { should validate_numericality_of(:birth_day).odd }
245
272
  # end
246
273
  #
@@ -262,7 +289,7 @@ module Shoulda
262
289
  # end
263
290
  #
264
291
  # # RSpec
265
- # describe Person do
292
+ # RSpec.describe Person, type: :model do
266
293
  # it do
267
294
  # should validate_numericality_of(:number_of_dependents).
268
295
  # with_message('Number of dependents must be a number')
@@ -287,7 +314,7 @@ module Shoulda
287
314
  # end
288
315
  #
289
316
  # # RSpec
290
- # describe Post do
317
+ # RSpec.describe Post, type: :model do
291
318
  # it { should validate_numericality_of(:age).allow_nil }
292
319
  # end
293
320
  #
@@ -304,8 +331,7 @@ module Shoulda
304
331
 
305
332
  # @private
306
333
  class ValidateNumericalityOfMatcher
307
- NUMERIC_NAME = 'number'
308
- NON_NUMERIC_VALUE = 'abcd'
334
+ NUMERIC_NAME = 'number'.freeze
309
335
  DEFAULT_DIFF_TO_COMPARE = 1
310
336
 
311
337
  include Qualifiers::IgnoringInterferenceByWriter
@@ -337,7 +363,7 @@ module Shoulda
337
363
 
338
364
  def only_integer
339
365
  prepare_submatcher(
340
- NumericalityMatchers::OnlyIntegerMatcher.new(self, @attribute)
366
+ NumericalityMatchers::OnlyIntegerMatcher.new(self, @attribute),
341
367
  )
342
368
  self
343
369
  end
@@ -345,9 +371,9 @@ module Shoulda
345
371
  def allow_nil
346
372
  @expects_to_allow_nil = true
347
373
  prepare_submatcher(
348
- AllowValueMatcher.new(nil)
349
- .for(@attribute)
350
- .with_message(:not_a_number)
374
+ AllowValueMatcher.new(nil).
375
+ for(@attribute).
376
+ with_message(:not_a_number),
351
377
  )
352
378
  self
353
379
  end
@@ -358,14 +384,14 @@ module Shoulda
358
384
 
359
385
  def odd
360
386
  prepare_submatcher(
361
- NumericalityMatchers::OddNumberMatcher.new(self, @attribute)
387
+ NumericalityMatchers::OddNumberMatcher.new(self, @attribute),
362
388
  )
363
389
  self
364
390
  end
365
391
 
366
392
  def even
367
393
  prepare_submatcher(
368
- NumericalityMatchers::EvenNumberMatcher.new(self, @attribute)
394
+ NumericalityMatchers::EvenNumberMatcher.new(self, @attribute),
369
395
  )
370
396
  self
371
397
  end
@@ -395,6 +421,11 @@ module Shoulda
395
421
  self
396
422
  end
397
423
 
424
+ def is_other_than(value)
425
+ prepare_submatcher(comparison_matcher_for(value, :!=).for(@attribute))
426
+ self
427
+ end
428
+
398
429
  def with_message(message)
399
430
  @expects_custom_validation_message = true
400
431
  @expected_message = message
@@ -411,13 +442,13 @@ module Shoulda
411
442
  end
412
443
 
413
444
  def matches?(subject)
414
- @subject = subject
415
- @number_of_submatchers = @submatchers.size
416
-
417
- add_disallow_value_matcher
418
- qualify_submatchers
445
+ matches_or_does_not_match?(subject)
446
+ first_submatcher_that_fails_to_match.nil?
447
+ end
419
448
 
420
- first_failing_submatcher.nil?
449
+ def does_not_match?(subject)
450
+ matches_or_does_not_match?(subject)
451
+ first_submatcher_that_fails_to_not_match.nil?
421
452
  end
422
453
 
423
454
  def simple_description
@@ -427,7 +458,7 @@ module Shoulda
427
458
  description << Shoulda::Matchers::Util.a_or_an(full_allowed_type)
428
459
 
429
460
  if comparison_descriptions.present?
430
- description << ' ' + comparison_descriptions
461
+ description << " #{comparison_descriptions}"
431
462
  end
432
463
 
433
464
  description
@@ -440,20 +471,15 @@ module Shoulda
440
471
  def failure_message
441
472
  overall_failure_message.dup.tap do |message|
442
473
  message << "\n"
443
- message << failure_message_for_first_failing_submatcher
474
+ message << failure_message_for_first_submatcher_that_fails_to_match
444
475
  end
445
476
  end
446
477
 
447
478
  def failure_message_when_negated
448
479
  overall_failure_message_when_negated.dup.tap do |message|
449
- if submatcher_failure_message_when_negated.present?
450
- raise "hmm, this needs to be implemented."
451
- message << "\n"
452
- message << Shoulda::Matchers.word_wrap(
453
- submatcher_failure_message_when_negated,
454
- indent: 2
455
- )
456
- end
480
+ message << "\n"
481
+ message <<
482
+ failure_message_for_first_submatcher_that_fails_to_not_match
457
483
  end
458
484
  end
459
485
 
@@ -464,19 +490,25 @@ module Shoulda
464
490
 
465
491
  private
466
492
 
467
- def model
468
- @subject.class
493
+ def matches_or_does_not_match?(subject)
494
+ @subject = subject
495
+ @number_of_submatchers = @submatchers.size
496
+
497
+ add_disallow_value_matcher
498
+ qualify_submatchers
469
499
  end
470
500
 
471
501
  def overall_failure_message
472
502
  Shoulda::Matchers.word_wrap(
473
- "#{model.name} did not properly #{description}."
503
+ "Expected #{model.name} to #{description}, but this could not "\
504
+ 'be proved.',
474
505
  )
475
506
  end
476
507
 
477
508
  def overall_failure_message_when_negated
478
509
  Shoulda::Matchers.word_wrap(
479
- "Expected #{model.name} not to #{description}, but it did."
510
+ "Expected #{model.name} not to #{description}, but this could not "\
511
+ 'be proved.',
480
512
  )
481
513
  end
482
514
 
@@ -498,7 +530,7 @@ module Shoulda
498
530
 
499
531
  def add_disallow_value_matcher
500
532
  disallow_value_matcher = DisallowValueMatcher.
501
- new(NON_NUMERIC_VALUE).
533
+ new(non_numeric_value).
502
534
  for(@attribute).
503
535
  with_message(:not_a_number)
504
536
 
@@ -526,7 +558,10 @@ module Shoulda
526
558
  end
527
559
 
528
560
  if submatcher.respond_to?(:diff_to_compare)
529
- @diff_to_compare = [@diff_to_compare, submatcher.diff_to_compare].max
561
+ @diff_to_compare = [
562
+ @diff_to_compare,
563
+ submatcher.diff_to_compare,
564
+ ].max
530
565
  end
531
566
 
532
567
  @submatchers << submatcher
@@ -547,7 +582,7 @@ module Shoulda
547
582
  end
548
583
 
549
584
  submatcher.ignoring_interference_by_writer(
550
- ignore_interference_by_writer
585
+ ignore_interference_by_writer,
551
586
  )
552
587
  end
553
588
  end
@@ -562,39 +597,56 @@ module Shoulda
562
597
 
563
598
  def has_been_qualified?
564
599
  @submatchers.any? do |submatcher|
565
- submatcher.class.parent == NumericalityMatchers
600
+ Shoulda::Matchers::RailsShim.parent_of(submatcher.class) ==
601
+ NumericalityMatchers
566
602
  end
567
603
  end
568
604
 
569
- def first_failing_submatcher
570
- @_failing_submatchers ||= @submatchers.detect do |submatcher|
571
- !submatcher.matches?(@subject)
572
- end
605
+ def first_submatcher_that_fails_to_match
606
+ @_first_submatcher_that_fails_to_match ||=
607
+ @submatchers.detect do |submatcher|
608
+ !submatcher.matches?(@subject)
609
+ end
573
610
  end
574
611
 
575
- def submatcher_failure_message
576
- first_failing_submatcher.failure_message
612
+ def first_submatcher_that_fails_to_not_match
613
+ @_first_submatcher_that_fails_to_not_match ||=
614
+ @submatchers.detect do |submatcher|
615
+ !submatcher.does_not_match?(@subject)
616
+ end
577
617
  end
578
618
 
579
- def submatcher_failure_message_when_negated
580
- first_failing_submatcher.failure_message_when_negated
619
+ def failure_message_for_first_submatcher_that_fails_to_match
620
+ build_submatcher_failure_message_for(
621
+ first_submatcher_that_fails_to_match,
622
+ :failure_message,
623
+ )
581
624
  end
582
625
 
583
- def failure_message_for_first_failing_submatcher
584
- submatcher = first_failing_submatcher
626
+ def failure_message_for_first_submatcher_that_fails_to_not_match
627
+ build_submatcher_failure_message_for(
628
+ first_submatcher_that_fails_to_not_match,
629
+ :failure_message_when_negated,
630
+ )
631
+ end
585
632
 
586
- if number_of_submatchers_for_failure_message > 1
587
- submatcher_description = submatcher.simple_description.
588
- sub(/\bvalidate that\b/, 'validates').
589
- sub(/\bdisallow\b/, 'disallows').
590
- sub(/\ballow\b/, 'allows')
591
- submatcher_message =
633
+ def build_submatcher_failure_message_for(
634
+ submatcher,
635
+ failure_message_method
636
+ )
637
+ failure_message = submatcher.public_send(failure_message_method)
638
+ submatcher_description = submatcher.simple_description.
639
+ sub(/\bvalidate that\b/, 'validates').
640
+ sub(/\bdisallow\b/, 'disallows').
641
+ sub(/\ballow\b/, 'allows')
642
+ submatcher_message =
643
+ if number_of_submatchers_for_failure_message > 1
592
644
  "In checking that #{model.name} #{submatcher_description}, " +
593
- submatcher.failure_message[0].downcase +
594
- submatcher.failure_message[1..-1]
595
- else
596
- submatcher_message = submatcher.failure_message
597
- end
645
+ failure_message[0].downcase +
646
+ failure_message[1..]
647
+ else
648
+ failure_message
649
+ end
598
650
 
599
651
  Shoulda::Matchers.word_wrap(submatcher_message, indent: 2)
600
652
  end
@@ -605,7 +657,11 @@ module Shoulda
605
657
 
606
658
  def comparison_descriptions
607
659
  description_array = submatcher_comparison_descriptions
608
- description_array.empty? ? '' : submatcher_comparison_descriptions.join(' and ')
660
+ if description_array.empty?
661
+ ''
662
+ else
663
+ submatcher_comparison_descriptions.join(' and ')
664
+ end
609
665
  end
610
666
 
611
667
  def submatcher_comparison_descriptions
@@ -616,6 +672,14 @@ module Shoulda
616
672
  arr
617
673
  end
618
674
  end
675
+
676
+ def model
677
+ @subject.class
678
+ end
679
+
680
+ def non_numeric_value
681
+ 'abcd'
682
+ end
619
683
  end
620
684
  end
621
685
  end