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
@@ -1,40 +0,0 @@
1
- module Kernel
2
- # #capture, #silence_stream, and #silence_stderr are deprecated after Rails
3
- # 4.2 and will be removed in 5.0, so just override them completely here
4
-
5
- undef_method :capture
6
-
7
- def capture(stream)
8
- stream = stream.to_s
9
- captured_stream = Tempfile.new(stream)
10
- stream_io = eval("$#{stream}")
11
- origin_stream = stream_io.dup
12
- stream_io.reopen(captured_stream)
13
-
14
- yield
15
-
16
- stream_io.rewind
17
- return captured_stream.read
18
- ensure
19
- captured_stream.unlink
20
- stream_io.reopen(origin_stream)
21
- end
22
-
23
- undef_method :silence_stream
24
-
25
- def silence_stream(stream)
26
- old_stream = stream.dup
27
- stream.reopen(RbConfig::CONFIG['host_os'] =~ /mswin|mingw/ ? 'NUL:' : '/dev/null')
28
- stream.sync = true
29
- yield
30
- ensure
31
- stream.reopen(old_stream)
32
- old_stream.close
33
- end
34
-
35
- undef_method :silence_stderr
36
-
37
- def silence_stderr
38
- silence_stream(STDERR) { yield }
39
- end
40
- end
@@ -1,111 +0,0 @@
1
- module UnitTests
2
- class ChangeValue
3
- def self.call(column_type, value, value_changer)
4
- new(column_type, value, value_changer).call
5
- end
6
-
7
- def initialize(column_type, value, value_changer)
8
- @column_type = column_type
9
- @value = value
10
- @value_changer = value_changer
11
- end
12
-
13
- def call
14
- if value_changer.is_a?(Proc)
15
- value_changer.call(value)
16
- elsif respond_to?(value_changer, true)
17
- send(value_changer)
18
- else
19
- value.public_send(value_changer)
20
- end
21
- end
22
-
23
- protected
24
-
25
- attr_reader :column_type, :value, :value_changer
26
-
27
- private
28
-
29
- def previous_value
30
- if value.is_a?(String)
31
- value[0..-2] + (value[-1].ord - 1).chr
32
- else
33
- value - 1
34
- end
35
- end
36
-
37
- def next_value
38
- if value.is_a?(Array)
39
- value + [value.first.class.new]
40
- elsif value.respond_to?(:next)
41
- value.next
42
- else
43
- value + 1
44
- end
45
- end
46
-
47
- def next_next_value
48
- change_value(change_value(value, :next_value), :next_value)
49
- end
50
-
51
- def next_value_or_numeric_value
52
- if value
53
- change_value(value, :next_value)
54
- else
55
- change_value(value, :numeric_value)
56
- end
57
- end
58
-
59
- def next_value_or_non_numeric_value
60
- if value
61
- change_value(value, :next_value)
62
- else
63
- change_value(value, :non_numeric_value)
64
- end
65
- end
66
-
67
- def never_falsy
68
- value || dummy_value_for_column
69
- end
70
-
71
- def truthy_or_numeric
72
- value || 1
73
- end
74
-
75
- def never_blank
76
- value.presence || dummy_value_for_column
77
- end
78
-
79
- def nil_to_blank
80
- value || ''
81
- end
82
-
83
- def always_nil
84
- nil
85
- end
86
-
87
- def add_character
88
- value + 'a'
89
- end
90
-
91
- def remove_character
92
- value.chop
93
- end
94
-
95
- def numeric_value
96
- '1'
97
- end
98
-
99
- def non_numeric_value
100
- 'a'
101
- end
102
-
103
- def change_value(value, value_changer)
104
- self.class.call(column_type, value, value_changer)
105
- end
106
-
107
- def dummy_value_for_column
108
- Shoulda::Matchers::Util.dummy_value_for(column_type)
109
- end
110
- end
111
- end
@@ -1,135 +0,0 @@
1
- require 'forwardable'
2
-
3
- module UnitTests
4
- module CreateModelArguments
5
- class Basic
6
- DEFAULT_MODEL_NAME = 'Example'
7
- DEFAULT_ATTRIBUTE_NAME = :attr
8
- DEFAULT_COLUMN_TYPE = :string
9
-
10
- def self.wrap(args)
11
- if args.is_a?(self)
12
- args
13
- else
14
- new(args)
15
- end
16
- end
17
-
18
- extend Forwardable
19
-
20
- def_delegators(
21
- :attribute,
22
- :column_type,
23
- :column_options,
24
- :default_value,
25
- :value_type
26
- )
27
-
28
- def initialize(args)
29
- @args = args
30
- end
31
-
32
- def fetch(*args, &block)
33
- self.args.fetch(*args, &block)
34
- end
35
-
36
- def merge(given_args)
37
- self.class.new(args.deep_merge(given_args))
38
- end
39
-
40
- def model_name
41
- args.fetch(:model_name, DEFAULT_MODEL_NAME)
42
- end
43
-
44
- def attribute_name
45
- args.fetch(:attribute_name, default_attribute_name)
46
- end
47
-
48
- def model_creation_strategy
49
- args.fetch(:model_creation_strategy)
50
- end
51
-
52
- def columns
53
- { attribute_name => column_options }
54
- end
55
-
56
- def attribute
57
- @_attribute ||= attribute_class.new(attribute_args)
58
- end
59
-
60
- def all_attribute_overrides
61
- @_all_attribute_overrides ||= begin
62
- attribute_overrides = args.slice(
63
- :changing_values_with,
64
- :default_value
65
- )
66
-
67
- overrides =
68
- if attribute_overrides.empty?
69
- {}
70
- else
71
- { attribute_name => attribute_overrides }
72
- end
73
-
74
- overrides.deep_merge(args.fetch(:attribute_overrides, {}))
75
- end
76
- end
77
-
78
- def attribute_overrides
79
- all_attribute_overrides.fetch(attribute_name, {})
80
- end
81
-
82
- def validation_name
83
- args.fetch(:validation_name) { map_matcher_name_to_validation_name }
84
- end
85
-
86
- def validation_options
87
- args.fetch(:validation_options, {})
88
- end
89
-
90
- def custom_validation?
91
- args.fetch(:custom_validation, false)
92
- end
93
-
94
- def matcher_name
95
- args.fetch(:matcher_name)
96
- end
97
-
98
- def attribute_default_values_by_name
99
- if attribute_overrides.key?(:default_value)
100
- { attribute_name => attribute_overrides[:default_value] }
101
- else
102
- {}
103
- end
104
- end
105
-
106
- def to_hash
107
- args.deep_dup
108
- end
109
-
110
- protected
111
-
112
- attr_reader :args
113
-
114
- def attribute_class
115
- UnitTests::Attribute
116
- end
117
-
118
- def default_attribute_name
119
- DEFAULT_ATTRIBUTE_NAME
120
- end
121
-
122
- private
123
-
124
- def map_matcher_name_to_validation_name
125
- matcher_name.to_s.sub('validate', 'validates')
126
- end
127
-
128
- def attribute_args
129
- args.slice(:column_type).deep_merge(
130
- attribute_overrides.deep_merge(name: attribute_name)
131
- )
132
- end
133
- end
134
- end
135
- end
@@ -1,15 +0,0 @@
1
- module UnitTests
2
- module CreateModelArguments
3
- class HasMany < Basic
4
- def columns
5
- super.except(attribute_name)
6
- end
7
-
8
- private
9
-
10
- def default_attribute_name
11
- :children
12
- end
13
- end
14
- end
15
- end
@@ -1,74 +0,0 @@
1
- module UnitTests
2
- module CreateModelArguments
3
- class UniquenessMatcher < Basic
4
- def self.normalize_attribute(attribute)
5
- if attribute.is_a?(Hash)
6
- Attribute.new(attribute)
7
- else
8
- Attribute.new(name: attribute)
9
- end
10
- end
11
-
12
- def self.normalize_attributes(attributes)
13
- attributes.map do |attribute|
14
- normalize_attribute(attribute)
15
- end
16
- end
17
-
18
- def columns
19
- attributes.reduce({}) do |options, attribute|
20
- options.merge(
21
- attribute.name => {
22
- type: attribute.column_type,
23
- options: attribute.column_options
24
- }
25
- )
26
- end
27
- end
28
-
29
- def validation_options
30
- super.merge(scope: scope_attribute_names)
31
- end
32
-
33
- def attribute_default_values_by_name
34
- attributes.reduce({}) do |values, attribute|
35
- values.merge(attribute.name => attribute.default_value)
36
- end
37
- end
38
-
39
- protected
40
-
41
- def attribute_class
42
- Attribute
43
- end
44
-
45
- private
46
-
47
- def attributes
48
- [attribute] + scope_attributes + additional_attributes
49
- end
50
-
51
- def scope_attribute_names
52
- scope_attributes.map(&:name)
53
- end
54
-
55
- def scope_attributes
56
- @_scope_attributes ||= self.class.normalize_attributes(
57
- args.fetch(:scopes, [])
58
- )
59
- end
60
-
61
- def additional_attributes
62
- @_additional_attributes ||= self.class.normalize_attributes(
63
- args.fetch(:additional_attributes, [])
64
- )
65
- end
66
-
67
- class Attribute < UnitTests::Attribute
68
- def value_type
69
- args.fetch(:value_type) { column_type }
70
- end
71
- end
72
- end
73
- end
74
- end
@@ -1,27 +0,0 @@
1
- module UnitTests
2
- module ActiveModelHelpers
3
- def self.configure_example_group(example_group)
4
- example_group.include(self)
5
- end
6
-
7
- def custom_validation(options = {}, &block)
8
- attribute_name = options.fetch(:attribute_name, :attr)
9
- attribute_type = options.fetch(:attribute_type, :integer)
10
- column_options = options.fetch(:column_options, {})
11
- attribute_options = { type: attribute_type, options: column_options }
12
-
13
- define_model(:example, attribute_name => attribute_options) do
14
- validate :custom_validation
15
-
16
- define_method(:custom_validation, &block)
17
- end.new
18
- end
19
- alias record_with_custom_validation custom_validation
20
-
21
- def validating_format(options)
22
- define_model :example, attr: :string do
23
- validates_format_of :attr, options
24
- end.new
25
- end
26
- end
27
- end
@@ -1,28 +0,0 @@
1
- module UnitTests
2
- module ActiveModelVersions
3
- def self.configure_example_group(example_group)
4
- example_group.include(self)
5
- example_group.extend(self)
6
- end
7
-
8
- def active_model_version
9
- Tests::Version.new(::ActiveModel::VERSION::STRING)
10
- end
11
-
12
- def active_model_3_1?
13
- (::ActiveModel::VERSION::MAJOR == 3 && ::ActiveModel::VERSION::MINOR >= 1) || active_model_4_0?
14
- end
15
-
16
- def active_model_3_2?
17
- (::ActiveModel::VERSION::MAJOR == 3 && ::ActiveModel::VERSION::MINOR >= 2) || active_model_4_0?
18
- end
19
-
20
- def active_model_4_0?
21
- ::ActiveModel::VERSION::MAJOR == 4
22
- end
23
-
24
- def active_model_supports_strict?
25
- active_model_version >= 3.2
26
- end
27
- end
28
- end
@@ -1,24 +0,0 @@
1
- module UnitTests
2
- module ActiveRecordVersions
3
- def self.configure_example_group(example_group)
4
- example_group.include(self)
5
- example_group.extend(self)
6
- end
7
-
8
- def active_record_version
9
- Tests::Version.new(::ActiveRecord::VERSION::STRING)
10
- end
11
-
12
- def active_record_supports_enum?
13
- defined?(::ActiveRecord::Enum)
14
- end
15
-
16
- def active_record_supports_has_secure_password?
17
- active_record_version >= 3.1
18
- end
19
-
20
- def active_record_supports_array_columns?
21
- active_record_version > 4.2
22
- end
23
- end
24
- end
@@ -1,27 +0,0 @@
1
- require 'active_resource'
2
-
3
- module UnitTests
4
- module ActiveResourceBuilder
5
- def self.configure_example_group(example_group)
6
- example_group.include ActiveResourceBuilder
7
-
8
- example_group.after do
9
- ActiveSupport::Dependencies.clear
10
- end
11
- end
12
-
13
- def define_active_resource_class(class_name, attributes = {}, &block)
14
- define_class(class_name, ActiveResource::Base) do
15
- schema do
16
- attributes.each do |attr, type|
17
- attribute attr, type
18
- end
19
- end
20
-
21
- if block_given?
22
- class_eval(&block)
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,15 +0,0 @@
1
- require_relative '../record_with_different_error_attribute_builder'
2
- require_relative '../record_builder_with_i18n_validation_message'
3
-
4
- module UnitTests
5
- module AllowValueMatcherHelpers
6
- def builder_for_record_with_different_error_attribute(options = {})
7
- RecordWithDifferentErrorAttributeBuilder.new(options)
8
- end
9
-
10
- def builder_for_record_with_different_error_attribute_using_i18n(options = {})
11
- builder = builder_for_record_with_different_error_attribute(options)
12
- RecordBuilderWithI18nValidationMessage.new(builder)
13
- end
14
- end
15
- end
@@ -1,90 +0,0 @@
1
- module UnitTests
2
- module ClassBuilder
3
- def define_module(*args, &block)
4
- ClassBuilder.define_module(*args, &block)
5
- end
6
-
7
- def define_class(*args, &block)
8
- ClassBuilder.define_class(*args, &block)
9
- end
10
-
11
- class << self
12
- def configure_example_group(example_group)
13
- example_group.include(self)
14
-
15
- example_group.after do
16
- ClassBuilder.reset
17
- end
18
- end
19
-
20
- def reset
21
- remove_defined_classes
22
- end
23
-
24
- def define_module(module_name, &block)
25
- module_name = module_name.to_s.camelize
26
-
27
- namespace, name_without_namespace =
28
- ClassBuilder.parse_constant_name(module_name)
29
-
30
- if namespace.const_defined?(name_without_namespace, false)
31
- namespace.__send__(:remove_const, name_without_namespace)
32
- end
33
-
34
- eval <<-RUBY
35
- module #{namespace}::#{name_without_namespace}
36
- end
37
- RUBY
38
-
39
- namespace.const_get(name_without_namespace).tap do |constant|
40
- constant.unloadable
41
-
42
- if block
43
- constant.module_eval(&block)
44
- end
45
- end
46
- end
47
-
48
- def define_class(class_name, parent_class = Object, &block)
49
- class_name = class_name.to_s.camelize
50
-
51
- namespace, name_without_namespace =
52
- ClassBuilder.parse_constant_name(class_name)
53
-
54
- if namespace.const_defined?(name_without_namespace, false)
55
- namespace.__send__(:remove_const, name_without_namespace)
56
- end
57
-
58
- eval <<-RUBY
59
- class #{namespace}::#{name_without_namespace} < ::#{parent_class}
60
- end
61
- RUBY
62
-
63
- namespace.const_get(name_without_namespace).tap do |constant|
64
- constant.unloadable
65
-
66
- if block
67
- if block.arity == 0
68
- constant.class_eval(&block)
69
- else
70
- block.call(constant)
71
- end
72
- end
73
- end
74
- end
75
-
76
- def parse_constant_name(name)
77
- namespace = Shoulda::Matchers::Util.deconstantize(name)
78
- qualified_namespace = (namespace.presence || 'Object').constantize
79
- name_without_namespace = name.to_s.demodulize
80
- [qualified_namespace, name_without_namespace]
81
- end
82
-
83
- private
84
-
85
- def remove_defined_classes
86
- ::ActiveSupport::Dependencies.clear
87
- end
88
- end
89
- end
90
- end
@@ -1,26 +0,0 @@
1
- module UnitTests
2
- module ColumnTypeHelpers
3
- def self.configure_example_group(example_group)
4
- example_group.include(self)
5
- end
6
-
7
- def column_type_class_namespace
8
- if database_adapter == :postgresql
9
- ActiveRecord::ConnectionAdapters::PostgreSQL
10
- else
11
- ActiveRecord::Type
12
- end
13
- end
14
-
15
- def column_type_class_for(type)
16
- namespace =
17
- if type == :integer && database_adapter == :postgresql
18
- column_type_class_namespace::OID
19
- else
20
- column_type_class_namespace
21
- end
22
-
23
- namespace.const_get(type.to_s.camelize)
24
- end
25
- end
26
- end
@@ -1,17 +0,0 @@
1
- require_relative '../record_validating_confirmation_builder'
2
- require_relative '../record_builder_with_i18n_validation_message'
3
-
4
- module UnitTests
5
- module ConfirmationMatcherHelpers
6
- def builder_for_record_validating_confirmation(options = {})
7
- RecordValidatingConfirmationBuilder.new(options)
8
- end
9
-
10
- def builder_for_record_validating_confirmation_with_18n_message(options = {})
11
- builder = builder_for_record_validating_confirmation(options)
12
- RecordBuilderWithI18nValidationMessage.new(builder,
13
- validation_message_key: :confirmation
14
- )
15
- end
16
- end
17
- end
@@ -1,63 +0,0 @@
1
- module UnitTests
2
- module ControllerBuilder
3
- def self.configure_example_group(example_group)
4
- example_group.include(self)
5
-
6
- example_group.after do
7
- delete_temporary_views
8
- restore_original_routes
9
- end
10
- end
11
-
12
- def define_controller(class_name, &block)
13
- class_name = class_name.to_s
14
- class_name << 'Controller' unless class_name =~ /Controller$/
15
- define_class(class_name, ActionController::Base, &block)
16
- end
17
-
18
- def define_routes(&block)
19
- self.routes = $test_app.draw_routes(&block)
20
- end
21
-
22
- def build_fake_response(opts = {}, &block)
23
- action = opts[:action] || 'example'
24
- partial = opts[:partial] || '_partial'
25
- block ||= lambda { render nothing: true }
26
- controller_class = define_controller('Examples') do
27
- layout false
28
- define_method(action, &block)
29
- end
30
- controller_class.view_paths = [ $test_app.temp_views_directory.to_s ]
31
-
32
- define_routes do
33
- get 'examples', to: "examples##{action}"
34
- end
35
-
36
- create_view("examples/#{action}.html.erb", 'action')
37
- create_view("examples/#{partial}.html.erb", 'partial')
38
-
39
- setup_rails_controller_test(controller_class)
40
- self.class.render_views(true)
41
-
42
- get action
43
-
44
- controller
45
- end
46
-
47
- def setup_rails_controller_test(controller_class)
48
- @controller = controller_class.new
49
- end
50
-
51
- def create_view(path, contents)
52
- $test_app.create_temp_view(path, contents)
53
- end
54
-
55
- def delete_temporary_views
56
- $test_app.delete_temp_views
57
- end
58
-
59
- def restore_original_routes
60
- Rails.application.reload_routes!
61
- end
62
- end
63
- end