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,517 +0,0 @@
1
- require 'unit_spec_helper'
2
-
3
- describe Shoulda::Matchers::Independent::DelegateMethodMatcher do
4
- describe '#description' do
5
- context 'when the subject is an instance' do
6
- subject { Object.new }
7
-
8
- context 'without any qualifiers' do
9
- it 'states that it should delegate method to the right object' do
10
- matcher = delegate_method(:method_name).to(:delegate)
11
- message = 'delegate #method_name to #delegate object'
12
-
13
- expect(matcher.description).to eq message
14
- end
15
- end
16
-
17
- context 'qualified with #as' do
18
- it 'states that it should delegate method to the right object and method' do
19
- matcher = delegate_method(:method_name).to(:delegate).as(:alternate)
20
- message = 'delegate #method_name to #delegate object as #alternate'
21
-
22
- expect(matcher.description).to eq message
23
- end
24
- end
25
-
26
- context 'qualified with #with_arguments' do
27
- it 'states that it should delegate method to the right object with right argument' do
28
- matcher = delegate_method(:method_name).to(:delegate).
29
- with_arguments(:foo, bar: [1, 2])
30
- message = 'delegate #method_name to #delegate object passing arguments [:foo, {:bar=>[1, 2]}]'
31
-
32
- expect(matcher.description).to eq message
33
- end
34
- end
35
-
36
- context 'qualified with #with_prefix' do
37
- context 'without arguments' do
38
- before do
39
- define_model('Country') do
40
- def hello; 'hello' end
41
- end
42
- end
43
-
44
- context "when the subject's delegating method also has a prefix" do
45
- it 'produces the correct description' do
46
- define_class('Person') do
47
- delegate :hello, to: :country, prefix: true
48
-
49
- def country
50
- Country.new
51
- end
52
- end
53
-
54
- matcher = delegate_method(:hello).to(:country).with_prefix
55
- expect(matcher.description).
56
- to eq('delegate #country_hello to #country object as #hello')
57
- end
58
- end
59
- end
60
-
61
- context 'as true' do
62
- before do
63
- define_model('Country') do
64
- def hello; 'hello' end
65
- end
66
- end
67
-
68
- context "when the subject's delegating method also has a prefix" do
69
- it 'produces the correct description' do
70
- define_class('Person') do
71
- delegate :hello, to: :country, prefix: true
72
-
73
- def country
74
- Country.new
75
- end
76
- end
77
-
78
- matcher = delegate_method(:hello).to(:country).with_prefix(true)
79
- expect(matcher.description).
80
- to eq('delegate #country_hello to #country object as #hello')
81
- end
82
- end
83
- end
84
-
85
- context 'as a symbol/string' do
86
- it 'should delegate as (prefix_supplied)_(method_on_target)' do
87
- define_model('Country') do
88
- def hello; 'hello' end
89
- end
90
-
91
- define_class('Person') do
92
- delegate :hello, to: :country, prefix: 'county'
93
-
94
- def country
95
- Country.new
96
- end
97
- end
98
-
99
- matcher = delegate_method(:hello).to(:country).with_prefix('county')
100
- expect(matcher.description).
101
- to eq('delegate #county_hello to #country object as #hello')
102
- end
103
- end
104
- end
105
- end
106
-
107
- context 'when the subject is a class' do
108
- subject { Object }
109
-
110
- context 'without any qualifiers' do
111
- it 'states that it should delegate method to the right object' do
112
- matcher = delegate_method(:method_name).to(:delegate)
113
-
114
- expect(matcher.description).
115
- to eq 'delegate .method_name to .delegate object'
116
- end
117
- end
118
-
119
- context 'qualified with #as' do
120
- it 'states that it should delegate method to the right object and method' do
121
- matcher = delegate_method(:method_name).to(:delegate).as(:alternate)
122
- message = 'delegate .method_name to .delegate object as .alternate'
123
-
124
- expect(matcher.description).to eq message
125
- end
126
- end
127
-
128
- context 'qualified with #with_arguments' do
129
- it 'states that it should delegate method to the right object with right argument' do
130
- matcher = delegate_method(:method_name).to(:delegate).
131
- with_arguments(:foo, bar: [1, 2])
132
- message = 'delegate .method_name to .delegate object passing arguments [:foo, {:bar=>[1, 2]}]'
133
-
134
- expect(matcher.description).to eq message
135
- end
136
- end
137
- end
138
- end
139
-
140
- it 'raises an error if the delegate object was never specified before matching' do
141
- expect {
142
- expect(Object.new).to delegate_method(:name)
143
- }.to raise_error described_class::DelegateObjectNotSpecified
144
- end
145
-
146
- context 'stubbing a delegating method on an instance' do
147
- it 'only happens temporarily and is removed after the match' do
148
- define_class('Company') do
149
- def name
150
- 'Acme Company'
151
- end
152
- end
153
-
154
- define_class('Person') do
155
- def company_name
156
- company.name
157
- end
158
-
159
- def company
160
- Company.new
161
- end
162
- end
163
-
164
- person = Person.new
165
- matcher = delegate_method(:company_name).to(:company).as(:name)
166
- matcher.matches?(person)
167
-
168
- expect(person.company.name).to eq 'Acme Company'
169
- end
170
- end
171
-
172
- context 'when the subject does not delegate anything' do
173
- before do
174
- define_class('PostOffice')
175
- end
176
-
177
- context 'when the subject is an instance' do
178
- it 'rejects with the correct failure message' do
179
- post_office = PostOffice.new
180
- message = [
181
- 'Expected PostOffice to delegate #deliver_mail to #mailman object',
182
- 'Method calls sent to PostOffice#mailman: (none)'
183
- ].join("\n")
184
-
185
- expect {
186
- expect(post_office).to delegate_method(:deliver_mail).to(:mailman)
187
- }.to fail_with_message(message)
188
- end
189
- end
190
-
191
- context 'when the subject is a class' do
192
- it 'uses the proper syntax for class methods in errors' do
193
- message = [
194
- 'Expected PostOffice to delegate .deliver_mail to .mailman object',
195
- 'Method calls sent to PostOffice.mailman: (none)'
196
- ].join("\n")
197
-
198
- expect {
199
- expect(PostOffice).to delegate_method(:deliver_mail).to(:mailman)
200
- }.to fail_with_message(message)
201
- end
202
- end
203
- end
204
-
205
- context 'when the subject delegates correctly' do
206
- before do
207
- define_class('Mailman')
208
-
209
- define_class('PostOffice') do
210
- def deliver_mail
211
- mailman.deliver_mail
212
- end
213
-
214
- def mailman
215
- Mailman.new
216
- end
217
- end
218
- end
219
-
220
- it 'accepts' do
221
- post_office = PostOffice.new
222
- expect(post_office).to delegate_method(:deliver_mail).to(:mailman)
223
- end
224
-
225
- context 'negating the matcher' do
226
- it 'rejects with the correct failure message' do
227
- post_office = PostOffice.new
228
- message = 'Expected PostOffice not to delegate #deliver_mail to #mailman object, but it did'
229
-
230
- expect {
231
- expect(post_office).not_to delegate_method(:deliver_mail).to(:mailman)
232
- }.to fail_with_message(message)
233
- end
234
- end
235
- end
236
-
237
- context 'when the delegating method is private' do
238
- before do
239
- define_class('Mailman')
240
-
241
- define_class('PostOffice') do
242
- def deliver_mail
243
- mailman.deliver_mail
244
- end
245
-
246
- def mailman
247
- Mailman.new
248
- end
249
-
250
- private :mailman
251
- end
252
- end
253
-
254
- it 'accepts' do
255
- post_office = PostOffice.new
256
- expect(post_office).to delegate_method(:deliver_mail).to(:mailman)
257
- end
258
- end
259
-
260
- context 'qualified with #with_arguments' do
261
- before do
262
- define_class('Mailman')
263
-
264
- define_class('PostOffice') do
265
- def deliver_mail(*args)
266
- mailman.deliver_mail('221B Baker St.', hastily: true)
267
- end
268
-
269
- def mailman
270
- Mailman.new
271
- end
272
- end
273
- end
274
-
275
- context 'qualified with #with_arguments' do
276
- context 'when the subject delegates with matching arguments' do
277
- it 'accepts' do
278
- post_office = PostOffice.new
279
- expect(post_office).to delegate_method(:deliver_mail).
280
- to(:mailman).with_arguments('221B Baker St.', hastily: true)
281
- end
282
-
283
- context 'negating the matcher' do
284
- it 'rejects with the correct failure message' do
285
- post_office = PostOffice.new
286
- message = 'Expected PostOffice not to delegate #deliver_mail to #mailman object passing arguments ["221B Baker St.", {:hastily=>true}], but it did'
287
-
288
- expect {
289
- expect(post_office).
290
- not_to delegate_method(:deliver_mail).
291
- to(:mailman).
292
- with_arguments('221B Baker St.', hastily: true)
293
- }.to fail_with_message(message)
294
- end
295
- end
296
- end
297
-
298
- context 'when not given the correct arguments' do
299
- it 'rejects with the correct failure message' do
300
- post_office = PostOffice.new
301
- message = [
302
- 'Expected PostOffice to delegate #deliver_mail to #mailman object passing arguments ["123 Nowhere Ln."]',
303
- 'Method calls sent to PostOffice#mailman:',
304
- '1) deliver_mail("221B Baker St.", {:hastily=>true})'
305
- ].join("\n")
306
-
307
- expect {
308
- expect(post_office).to delegate_method(:deliver_mail).
309
- to(:mailman).with_arguments('123 Nowhere Ln.')
310
- }.to fail_with_message(message)
311
- end
312
- end
313
- end
314
- end
315
-
316
- context 'qualified with #as' do
317
- before do
318
- define_class(:mailman)
319
-
320
- define_class(:post_office) do
321
- def deliver_mail
322
- mailman.deliver_mail_and_avoid_dogs
323
- end
324
-
325
- def mailman
326
- Mailman.new
327
- end
328
- end
329
- end
330
-
331
- context "when the given method is the same as the subject's delegating method" do
332
- it 'accepts' do
333
- post_office = PostOffice.new
334
- expect(post_office).to delegate_method(:deliver_mail).
335
- to(:mailman).as(:deliver_mail_and_avoid_dogs)
336
- end
337
-
338
- context 'negating the assertion' do
339
- it 'rejects with the correct failure message' do
340
- post_office = PostOffice.new
341
- message = 'Expected PostOffice not to delegate #deliver_mail to #mailman object as #deliver_mail_and_avoid_dogs, but it did'
342
-
343
- expect {
344
- expect(post_office).
345
- not_to delegate_method(:deliver_mail).
346
- to(:mailman).
347
- as(:deliver_mail_and_avoid_dogs)
348
- }.to fail_with_message(message)
349
- end
350
- end
351
- end
352
-
353
- context "when the given method is not the same as the subject's delegating method" do
354
- it 'rejects with the correct failure message' do
355
- post_office = PostOffice.new
356
- message = [
357
- 'Expected PostOffice to delegate #deliver_mail to #mailman object as #watch_tv',
358
- 'Method calls sent to PostOffice#mailman:',
359
- '1) deliver_mail_and_avoid_dogs()'
360
- ].join("\n")
361
-
362
- expect {
363
- expect(post_office).to delegate_method(:deliver_mail).
364
- to(:mailman).as(:watch_tv)
365
- }.to fail_with_message(message)
366
- end
367
- end
368
- end
369
-
370
- context 'qualified with #with_prefix' do
371
- context 'without arguments' do
372
- before do
373
- define_model('Country') do
374
- def hello; 'hello' end
375
- end
376
- end
377
-
378
- context "when the subject's delegating method also has a prefix" do
379
- it 'accepts' do
380
- define_class('Person') do
381
- delegate :hello, to: :country, prefix: true
382
-
383
- def country
384
- Country.new
385
- end
386
- end
387
-
388
- person = Person.new
389
- expect(person).to delegate_method(:hello). to(:country).with_prefix
390
- end
391
- end
392
-
393
- context "when the subject's delegating method does not have a prefix" do
394
- it 'rejects with the correct failure message' do
395
- define_class('Person') do
396
- delegate :hello, to: :country
397
-
398
- def country
399
- Country.new
400
- end
401
- end
402
-
403
- message = [
404
- 'Expected Person to delegate #country_hello to #country object as #hello',
405
- 'Method calls sent to Person#country: (none)'
406
- ].join("\n")
407
-
408
- person = Person.new
409
-
410
- expect {
411
- expect(person).to delegate_method(:hello). to(:country).with_prefix
412
- }.to fail_with_message(message)
413
- end
414
- end
415
- end
416
-
417
- context 'as true' do
418
- before do
419
- define_model('Country') do
420
- def hello; 'hello' end
421
- end
422
- end
423
-
424
- context "when the subject's delegating method also has a prefix" do
425
- it 'accepts' do
426
- define_class('Person') do
427
- delegate :hello, to: :country, prefix: true
428
-
429
- def country
430
- Country.new
431
- end
432
- end
433
-
434
- person = Person.new
435
- expect(person).
436
- to delegate_method(:hello).
437
- to(:country).with_prefix(true)
438
- end
439
- end
440
-
441
- context "when the subject's delegating method does not have a prefix" do
442
- it 'rejects with the correct failure message' do
443
- define_class('Person') do
444
- delegate :hello, to: :country
445
-
446
- def country
447
- Country.new
448
- end
449
- end
450
-
451
- message = [
452
- 'Expected Person to delegate #country_hello to #country object as #hello',
453
- 'Method calls sent to Person#country: (none)'
454
- ].join("\n")
455
-
456
- person = Person.new
457
-
458
- expect {
459
- expect(person).
460
- to delegate_method(:hello).
461
- to(:country).with_prefix(true)
462
- }.to fail_with_message(message)
463
- end
464
- end
465
- end
466
-
467
- context 'as a symbol/string' do
468
- before do
469
- define_model('Country') do
470
- def hello; 'hello' end
471
- end
472
- end
473
-
474
- context "when the subject's delegating method has the same prefix" do
475
- it 'accepts' do
476
- define_class('Person') do
477
- delegate :hello, to: :country, prefix: 'county'
478
-
479
- def country
480
- Country.new
481
- end
482
- end
483
-
484
- person = Person.new
485
- expect(person).
486
- to delegate_method(:hello).
487
- to(:country).with_prefix('county')
488
- end
489
- end
490
-
491
- context "when the subject's delegating method has a different prefix" do
492
- it 'rejects with the correct failure message' do
493
- define_class('Person') do
494
- delegate :hello, to: :country, prefix: 'something_else'
495
-
496
- def country
497
- Country.new
498
- end
499
- end
500
-
501
- message = [
502
- 'Expected Person to delegate #county_hello to #country object as #hello',
503
- 'Method calls sent to Person#country: (none)'
504
- ].join("\n")
505
-
506
- person = Person.new
507
-
508
- expect {
509
- expect(person).
510
- to delegate_method(:hello).
511
- to(:country).with_prefix('county')
512
- }.to fail_with_message(message)
513
- end
514
- end
515
- end
516
- end
517
- end