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 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
- [ obj ]
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.new(1, 0)
109
- when :datetime, :time, :timestamp then Time.now
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: ['Mac', 'Linux']
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
- if @array.many?
150
- description << " is neither #{inspected_array}"
151
- else
152
- description << " is not #{inspected_array}"
153
- end
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
- allows_higher_value &&
166
- disallows_maximum_value
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 allows_higher_value
185
- allows_value_of(@maximum + 1, @expected_message)
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: " nor ",
207
- last_word_connector: ", nor "
242
+ two_words_connector: ' nor ',
243
+ last_word_connector: ', nor ',
208
244
  )
209
245
  end
210
246
  end