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,20 +0,0 @@
1
- module UnitTests
2
- module DatabaseHelpers
3
- def self.configure_example_group(example_group)
4
- example_group.include(self)
5
- example_group.extend(self)
6
- end
7
-
8
- def database_adapter
9
- Tests::Database.instance.adapter_name
10
- end
11
-
12
- def postgresql?
13
- database_adapter == :postgresql
14
- end
15
-
16
- alias_method :database_supports_array_columns?, :postgresql?
17
- alias_method :database_supports_uuid_columns?, :postgresql?
18
- alias_method :database_supports_money_columns?, :postgresql?
19
- end
20
- end
@@ -1,15 +0,0 @@
1
- module UnitTests
2
- module I18nFaker
3
- extend self
4
-
5
- def self.configure_example_group(example_group)
6
- example_group.include(self)
7
- end
8
-
9
- def stub_translation(key_or_keys, message)
10
- keys = [key_or_keys].flatten.join('.').split('.')
11
- tree = keys.reverse.inject(message) { |data, key| { key => data } }
12
- I18n.backend.store_translations(:en, tree)
13
- end
14
- end
15
- end
@@ -1,12 +0,0 @@
1
- module UnitTests
2
- module MailerBuilder
3
- def self.configure_example_group(example_group)
4
- example_group.include(self)
5
- end
6
-
7
- def define_mailer(name, paths, &block)
8
- class_name = name.to_s.pluralize.classify
9
- define_class(class_name, ActionMailer::Base, &block)
10
- end
11
- end
12
- end
@@ -1,114 +0,0 @@
1
- require_relative 'class_builder'
2
-
3
- module UnitTests
4
- module ModelBuilder
5
- def create_table(*args, &block)
6
- ModelBuilder.create_table(*args, &block)
7
- end
8
-
9
- def define_model(*args, &block)
10
- ModelBuilder.define_model(*args, &block)
11
- end
12
-
13
- def define_model_class(*args, &block)
14
- ModelBuilder.define_model_class(*args, &block)
15
- end
16
-
17
- def define_active_model_class(*args, &block)
18
- ModelBuilder.define_active_model_class(*args, &block)
19
- end
20
-
21
- class << self
22
- def configure_example_group(example_group)
23
- example_group.include(self)
24
-
25
- example_group.after do
26
- ModelBuilder.reset
27
- end
28
- end
29
-
30
- def reset
31
- clear_column_caches
32
- drop_created_tables
33
- created_tables.clear
34
- defined_models.clear
35
- end
36
-
37
- def create_table(table_name, options = {}, &block)
38
- connection = ::ActiveRecord::Base.connection
39
-
40
- begin
41
- connection.execute("DROP TABLE IF EXISTS #{table_name}")
42
- connection.create_table(table_name, options, &block)
43
- created_tables << table_name
44
- connection
45
- rescue Exception => e
46
- connection.execute("DROP TABLE IF EXISTS #{table_name}")
47
- raise e
48
- end
49
- end
50
-
51
- def define_model_class(class_name, &block)
52
- ClassBuilder.define_class(class_name, ::ActiveRecord::Base, &block)
53
- end
54
-
55
- def define_active_model_class(class_name, options = {}, &block)
56
- attribute_names = options.delete(:accessors) { [] }
57
-
58
- columns = attribute_names.reduce({}) do |hash, attribute_name|
59
- hash.merge(attribute_name => nil)
60
- end
61
-
62
- UnitTests::ModelCreationStrategies::ActiveModel.call(
63
- 'Example',
64
- columns,
65
- options,
66
- &block
67
- )
68
- end
69
-
70
- def define_model(name, columns = {}, options = {}, &block)
71
- model = UnitTests::ModelCreationStrategies::ActiveRecord.call(
72
- name,
73
- columns,
74
- options,
75
- &block
76
- )
77
- defined_models << model
78
- model
79
- end
80
-
81
- private
82
-
83
- def clear_column_caches
84
- # Rails 4.x
85
- if ::ActiveRecord::Base.connection.respond_to?(:schema_cache)
86
- ::ActiveRecord::Base.connection.schema_cache.clear!
87
- # Rails 3.1 - 4.0
88
- elsif ::ActiveRecord::Base.connection_pool.respond_to?(:clear_cache!)
89
- ::ActiveRecord::Base.connection_pool.clear_cache!
90
- end
91
-
92
- defined_models.each do |model|
93
- model.reset_column_information
94
- end
95
- end
96
-
97
- def drop_created_tables
98
- connection = ::ActiveRecord::Base.connection
99
-
100
- created_tables.each do |table_name|
101
- connection.execute("DROP TABLE IF EXISTS #{table_name}")
102
- end
103
- end
104
-
105
- def created_tables
106
- @_created_tables ||= []
107
- end
108
-
109
- def defined_models
110
- @_defined_models ||= []
111
- end
112
- end
113
- end
114
- end
@@ -1,28 +0,0 @@
1
- module UnitTests
2
- module RailsVersions
3
- def self.configure_example_group(example_group)
4
- example_group.include(self)
5
- example_group.extend(self)
6
- end
7
-
8
- def rails_version
9
- Tests::Version.new(Rails::VERSION::STRING)
10
- end
11
-
12
- def rails_3_x?
13
- rails_version =~ '~> 3.0'
14
- end
15
-
16
- def rails_4_x?
17
- rails_version =~ '~> 4.0'
18
- end
19
-
20
- def rails_gte_4_1?
21
- rails_version >= 4.1
22
- end
23
-
24
- def rails_gte_4_2?
25
- rails_version >= 4.2
26
- end
27
- end
28
- end
@@ -1,44 +0,0 @@
1
- module UnitTests
2
- module ValidationMatcherScenarioHelpers
3
- def self.configure_example_group(example_group)
4
- example_group.include(self)
5
- end
6
-
7
- def build_scenario_for_validation_matcher(args)
8
- UnitTests::ValidationMatcherScenario.new(
9
- build_validation_matcher_scenario_args(args)
10
- )
11
- end
12
-
13
- protected
14
-
15
- def validation_matcher_scenario_args
16
- {}
17
- end
18
-
19
- def configure_validation_matcher(matcher)
20
- matcher
21
- end
22
-
23
- private
24
-
25
- def build_validation_matcher_scenario_args(args)
26
- args.
27
- deep_merge(validation_matcher_scenario_args).
28
- deep_merge(
29
- matcher_name: matcher_name,
30
- matcher_proc: method(matcher_name)
31
- )
32
- end
33
-
34
- def matcher_name
35
- validation_matcher_scenario_args.fetch(:matcher_name) do
36
- raise KeyNotFoundError.new(<<-MESSAGE)
37
- Please implement #validation_matcher_scenario_args in your example
38
- group, in such a way that it returns a hash that contains a
39
- :matcher_name key.
40
- MESSAGE
41
- end
42
- end
43
- end
44
- end
@@ -1,7 +0,0 @@
1
- RSpec.configure do |config|
2
- config.after do
3
- # Clear any translations added during tests by telling the backend to
4
- # replace its translations with whatever is in the YAML files.
5
- I18n.backend.reload!
6
- end
7
- end
@@ -1,12 +0,0 @@
1
- require_relative '../tests/current_bundle'
2
- require_relative 'rails_application'
3
-
4
- Tests::CurrentBundle.instance.assert_appraisal!
5
-
6
- $test_app = UnitTests::RailsApplication.new
7
- $test_app.create
8
- $test_app.load
9
-
10
- require 'active_record/base'
11
-
12
- ENV['RAILS_ENV'] = 'test'
@@ -1,60 +0,0 @@
1
- module UnitTests
2
- module Matchers
3
- def deprecate(old_method, new_method)
4
- DeprecateMatcher.new(old_method, new_method)
5
- end
6
-
7
- class DeprecateMatcher
8
- def initialize(old_method, new_method)
9
- @old_method = old_method
10
- @new_method = new_method
11
- end
12
-
13
- def matches?(block)
14
- @captured_stderr = capture(:stderr, &block).gsub(/\n+/, ' ')
15
- captured_stderr.include?(expected_message)
16
- end
17
-
18
- def failure_message
19
- "Expected block to #{expectation}, but it did not.\nActual warning: #{actual_warning}"
20
- end
21
- alias_method :failure_message_for_should, :failure_message
22
-
23
- def failure_message_when_negated
24
- "Expected block not to #{expectation}, but it did."
25
- end
26
- alias_method :failure_message_for_should_not,
27
- :failure_message_when_negated
28
-
29
- def description
30
- "should #{expectation}"
31
- end
32
-
33
- def supports_block_expectations?
34
- true
35
- end
36
-
37
- protected
38
-
39
- attr_reader :old_method, :new_method, :captured_stderr
40
-
41
- private
42
-
43
- def expected_message
44
- "#{old_method} is deprecated and will be removed in the next major release. Please use #{new_method} instead."
45
- end
46
-
47
- def expectation
48
- "print a warning deprecating #{old_method} in favor of #{new_method}"
49
- end
50
-
51
- def actual_warning
52
- if captured_stderr.empty?
53
- "nothing"
54
- else
55
- "\n #{captured_stderr}"
56
- end
57
- end
58
- end
59
- end
60
- end
@@ -1,51 +0,0 @@
1
- module UnitTests
2
- module Matchers
3
- extend RSpec::Matchers::DSL
4
-
5
- matcher :fail_with_message_including do |expected|
6
- def supports_block_expectations?
7
- true
8
- end
9
-
10
- match do |block|
11
- @actual = nil
12
-
13
- begin
14
- block.call
15
- rescue RSpec::Expectations::ExpectationNotMetError => ex
16
- @actual = ex.message
17
- end
18
-
19
- @actual && @actual.include?(expected)
20
- end
21
-
22
- def failure_message
23
- lines = ['Expectation should have failed with message including:']
24
- lines << Shoulda::Matchers::Util.indent(expected, 2)
25
-
26
- if @actual
27
- lines << 'The full message was:'
28
- lines << Shoulda::Matchers::Util.indent(@actual, 2)
29
- else
30
- lines << 'However, the expectation did not fail at all.'
31
- end
32
-
33
- lines.join("\n")
34
- end
35
-
36
- def failure_message_for_should
37
- failure_message
38
- end
39
-
40
- def failure_message_when_negated
41
- lines = ['Expectation should not have failed with message including:']
42
- lines << Shoulda::Matchers::Util.indent(expected, 2)
43
- lines.join("\n")
44
- end
45
-
46
- def failure_message_for_should_not
47
- failure_message_when_negated
48
- end
49
- end
50
- end
51
- end
@@ -1,62 +0,0 @@
1
- module UnitTests
2
- module Matchers
3
- extend RSpec::Matchers::DSL
4
-
5
- matcher :fail_with_message do |expected|
6
- def supports_block_expectations?
7
- true
8
- end
9
-
10
- match do |block|
11
- @actual = nil
12
-
13
- begin
14
- block.call
15
- rescue RSpec::Expectations::ExpectationNotMetError => ex
16
- @actual = ex.message
17
- end
18
-
19
- @actual && @actual == expected.sub(/\n\z/, '')
20
- end
21
-
22
- def failure_message
23
- lines = ['Expectation should have failed with message:']
24
- lines << Shoulda::Matchers::Util.indent(expected, 2)
25
-
26
- if @actual
27
- lines << 'Actually failed with:'
28
- lines << Shoulda::Matchers::Util.indent(@actual, 2)
29
- lines << "Diff:"
30
- lines << Shoulda::Matchers::Util.indent(
31
- differ.diff(@actual, expected)[1..-1],
32
- 2
33
- )
34
- else
35
- lines << 'However, the expectation did not fail at all.'
36
- end
37
-
38
- lines.join("\n")
39
- end
40
-
41
- def failure_message_for_should
42
- failure_message
43
- end
44
-
45
- def failure_message_when_negated
46
- lines = ['Expectation should not have failed with message:']
47
- lines << Shoulda::Matchers::Util.indent(expected, 2)
48
- lines.join("\n")
49
- end
50
-
51
- def failure_message_for_should_not
52
- failure_message_when_negated
53
- end
54
-
55
- private
56
-
57
- def differ
58
- @_differ ||= RSpec::Support::Differ.new
59
- end
60
- end
61
- end
62
- end
@@ -1,59 +0,0 @@
1
- module UnitTests
2
- module Matchers
3
- def print_warning_including(expected_warning)
4
- PrintWarningIncludingMatcher.new(expected_warning)
5
- end
6
-
7
- class PrintWarningIncludingMatcher
8
- def initialize(expected_warning)
9
- @expected_warning = collapse_whitespace(expected_warning)
10
- end
11
-
12
- def matches?(block)
13
- @captured_stderr = collapse_whitespace(capture(:stderr, &block))
14
- captured_stderr.include?(expected_warning)
15
- end
16
-
17
- def failure_message
18
- "Expected block to #{expectation}\nbut actually printed#{actual_warning}"
19
- end
20
- alias_method :failure_message_for_should, :failure_message
21
-
22
- def failure_message_when_negated
23
- "Expected block not to #{expectation}, but it did."
24
- end
25
- alias_method :failure_message_for_should_not,
26
- :failure_message_when_negated
27
-
28
- def description
29
- "should #{expectation}"
30
- end
31
-
32
- def supports_block_expectations?
33
- true
34
- end
35
-
36
- protected
37
-
38
- attr_reader :expected_warning, :captured_stderr
39
-
40
- private
41
-
42
- def expectation
43
- "print a warning including:\n #{expected_warning}"
44
- end
45
-
46
- def actual_warning
47
- if captured_stderr.empty?
48
- " nothing."
49
- else
50
- ":\n #{captured_stderr}"
51
- end
52
- end
53
-
54
- def collapse_whitespace(string)
55
- string.gsub(/\n+/, ' ').squeeze(' ')
56
- end
57
- end
58
- end
59
- end
@@ -1,111 +0,0 @@
1
- module UnitTests
2
- module ModelCreationStrategies
3
- class ActiveModel
4
- def self.call(name, columns = {}, options = {}, &block)
5
- new(name, columns, options, &block).call
6
- end
7
-
8
- def initialize(name, columns = {}, options = {}, &block)
9
- @name = name
10
- @columns = columns
11
- @options = options
12
- @model_customizers = []
13
-
14
- if block
15
- customize_model(&block)
16
- end
17
- end
18
-
19
- def customize_model(&block)
20
- model_customizers << block
21
- end
22
-
23
- def call
24
- ClassBuilder.define_class(name, Model).tap do |model|
25
- model.columns = columns.keys
26
-
27
- model_customizers.each do |block|
28
- run_block(model, block)
29
- end
30
- end
31
- end
32
-
33
- protected
34
-
35
- attr_reader :name, :columns, :model_customizers, :options
36
-
37
- private
38
-
39
- def run_block(model, block)
40
- if block
41
- if block.arity == 0
42
- model.class_eval(&block)
43
- else
44
- block.call(model)
45
- end
46
- end
47
- end
48
-
49
- class Model
50
- class << self
51
- def columns
52
- @_columns ||= []
53
- end
54
-
55
- def columns=(columns)
56
- existing_columns = self.columns
57
- new_columns = columns - existing_columns
58
-
59
- @_columns += new_columns
60
-
61
- include attributes_module
62
-
63
- attributes_module.module_eval do
64
- new_columns.each do |column|
65
- define_method(column) do
66
- attributes[column]
67
- end
68
-
69
- define_method("#{column}=") do |value|
70
- attributes[column] = value
71
- end
72
- end
73
- end
74
- end
75
-
76
- private
77
-
78
- def attributes_module
79
- @_attributes_module ||= Module.new
80
- end
81
- end
82
-
83
- include ::ActiveModel::Model
84
-
85
- attr_reader :attributes
86
-
87
- def initialize(attributes = {})
88
- @attributes = attributes.symbolize_keys
89
- end
90
-
91
- def inspect
92
- middle = '%s:0x%014x%s' % [
93
- self.class,
94
- object_id * 2,
95
- ' ' + inspected_attributes.join(' ')
96
- ]
97
-
98
- "#<#{middle.strip}>"
99
- end
100
-
101
- private
102
-
103
- def inspected_attributes
104
- self.class.columns.map do |key, value|
105
- "#{key}: #{attributes[key].inspect}"
106
- end
107
- end
108
- end
109
- end
110
- end
111
- end
@@ -1,77 +0,0 @@
1
- module UnitTests
2
- module ModelCreationStrategies
3
- class ActiveRecord
4
- def self.call(name, columns = {}, options = {}, &block)
5
- new(name, columns, options, &block).call
6
- end
7
-
8
- def initialize(name, columns = {}, options = {}, &block)
9
- @name = name
10
- @columns = columns
11
- @options = options
12
- @model_customizers = []
13
-
14
- if block
15
- customize_model(&block)
16
- end
17
- end
18
-
19
- def customize_model(&block)
20
- model_customizers << block
21
- end
22
-
23
- def call
24
- create_table_for_model
25
- define_class_for_model
26
- end
27
-
28
- protected
29
-
30
- attr_reader :columns, :model_customizers, :name, :options
31
-
32
- private
33
-
34
- def create_table_for_model
35
- UnitTests::ActiveRecord::CreateTable.call(table_name, columns)
36
- end
37
-
38
- def define_class_for_model
39
- model = UnitTests::ModelBuilder.define_model_class(class_name)
40
-
41
- model_customizers.each do |block|
42
- run_block(model, block)
43
- end
44
-
45
- if whitelist_attributes?
46
- model.attr_accessible(*columns.keys)
47
- end
48
-
49
- model.table_name = table_name
50
-
51
- model
52
- end
53
-
54
- def run_block(model, block)
55
- if block
56
- if block.arity == 0
57
- model.class_eval(&block)
58
- else
59
- block.call(model)
60
- end
61
- end
62
- end
63
-
64
- def class_name
65
- name.to_s.pluralize.classify
66
- end
67
-
68
- def table_name
69
- class_name.tableize.gsub('/', '_')
70
- end
71
-
72
- def whitelist_attributes?
73
- options.fetch(:whitelist_attributes, true)
74
- end
75
- end
76
- end
77
- end