shoulda-matchers 3.1.0 → 5.2.0

Sign up to get free protection for your applications and to get access to all the features.
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,17 +0,0 @@
1
- require 'unit_spec_helper'
2
-
3
- describe Shoulda::Matchers::ActionController::SetSessionMatcher, type: :controller do
4
- it_behaves_like 'set session or flash matcher' do
5
- def store_name
6
- 'session'
7
- end
8
-
9
- def set_store
10
- set_session
11
- end
12
-
13
- def store_within(controller)
14
- controller.session
15
- end
16
- end
17
- end
@@ -1,562 +0,0 @@
1
- require 'unit_spec_helper'
2
-
3
- describe Shoulda::Matchers::ActionController::SetSessionOrFlashMatcher do
4
- context 'without any qualifiers' do
5
- it 'produces the right description' do
6
- store = build_store(name: 'flash')
7
- matcher = described_class.new(store)
8
- expected_description = 'should set any key in flash'
9
-
10
- expect(matcher.description).to eq expected_description
11
- end
12
-
13
- context 'in the positive' do
14
- context 'if the store is not empty' do
15
- it 'accepts' do
16
- controller = define_class('MyController').new
17
- store = build_store(empty?: false)
18
- matcher = described_class.new(store)
19
-
20
- expect(controller).to matcher
21
- end
22
- end
23
-
24
- context 'if the store is empty' do
25
- it 'rejects' do
26
- controller = define_class('MyController').new
27
- store = build_store(empty?: true)
28
- matcher = described_class.new(store)
29
-
30
- expect(controller).not_to matcher
31
- end
32
-
33
- it 'produces the correct failure message' do
34
- controller = define_class('MyController').new
35
- store = build_store(name: 'flash', empty?: true)
36
- matcher = described_class.new(store)
37
- expected_message = 'Expected MyController to set any key in flash, but it did not'
38
-
39
- expect { expect(controller).to matcher }.
40
- to fail_with_message(expected_message)
41
- end
42
- end
43
- end
44
-
45
- context 'in the negative' do
46
- context 'if the given key is present in the store' do
47
- it 'produces the correct failure message' do
48
- controller = define_class('MyController').new
49
- store = build_store(name: 'flash', empty?: false)
50
- matcher = described_class.new(store)
51
- expected_message = 'Expected MyController not to set any key in flash, but it did'
52
-
53
- expect { expect(controller).not_to matcher }.
54
- to fail_with_message(expected_message)
55
- end
56
- end
57
- end
58
- end
59
-
60
- context 'with #[]' do
61
- it 'produces the right description' do
62
- store = build_store(name: 'flash')
63
- matcher = described_class.new(store)['the key']
64
- expected_description = 'should set flash["the key"]'
65
-
66
- expect(matcher.description).to eq expected_description
67
- end
68
-
69
- context 'in the positive' do
70
- context 'if the given key is present in the store' do
71
- it 'accepts' do
72
- controller = define_class('MyController').new
73
- store = build_store
74
- allow(store).to receive(:has_key?).
75
- with('the key').
76
- and_return(true)
77
- matcher = described_class.new(store)['the key']
78
-
79
- expect(controller).to matcher
80
- end
81
- end
82
-
83
- context 'if the given key is not present in the store' do
84
- it 'rejects' do
85
- controller = define_class('MyController').new
86
- store = build_store
87
- allow(store).to receive(:has_key?).
88
- with('the key').
89
- and_return(false)
90
- matcher = described_class.new(store)['the key']
91
-
92
- expect(controller).not_to matcher
93
- end
94
-
95
- it 'produces the correct failure message' do
96
- controller = define_class('MyController').new
97
- store = build_store(name: 'flash')
98
- allow(store).to receive(:has_key?).
99
- with('the key').
100
- and_return(false)
101
- matcher = described_class.new(store)['the key']
102
- expected_message = 'Expected MyController to set flash["the key"], but it did not'
103
-
104
- expect { expect(controller).to matcher }.
105
- to fail_with_message(expected_message)
106
- end
107
- end
108
- end
109
-
110
- context 'in the negative' do
111
- context 'if the given key is present in the store' do
112
- it 'produces the correct failure message' do
113
- controller = define_class('MyController').new
114
- store = build_store(name: 'flash')
115
- allow(store).to receive(:has_key?).
116
- with('the key').
117
- and_return(true)
118
- matcher = described_class.new(store)['the key']
119
- expected_message = 'Expected MyController not to set flash["the key"], but it did'
120
-
121
- expect { expect(controller).not_to matcher }.
122
- to fail_with_message(expected_message)
123
- end
124
- end
125
- end
126
- end
127
-
128
- context 'with #to' do
129
- context 'given a static value' do
130
- it 'produces the right description' do
131
- store = build_store(name: 'flash')
132
- matcher = described_class.new(store).to('the value')
133
- expected_description = 'should set any key in flash to "the value"'
134
-
135
- expect(matcher.description).to eq expected_description
136
- end
137
-
138
- context 'in the positive' do
139
- context 'if the given value is present in the store' do
140
- it 'accepts' do
141
- controller = define_class('MyController').new
142
- store = build_store
143
- allow(store).to receive(:has_value?).
144
- with('the value').
145
- and_return(true)
146
- matcher = described_class.new(store).to('the value')
147
-
148
- expect(controller).to matcher
149
- end
150
-
151
- it 'accepts given a value of nil' do
152
- controller = define_class('MyController').new
153
- store = build_store
154
- allow(store).to receive(:has_value?).
155
- with(nil).
156
- and_return(true)
157
- matcher = described_class.new(store).to(nil)
158
-
159
- expect(controller).to matcher
160
- end
161
-
162
- it 'accepts given a value of false' do
163
- controller = define_class('MyController').new
164
- store = build_store
165
- allow(store).to receive(:has_value?).
166
- with(false).
167
- and_return(true)
168
- matcher = described_class.new(store).to(false)
169
-
170
- expect(controller).to matcher
171
- end
172
- end
173
-
174
- context 'if the given value is not present in the store' do
175
- it 'rejects' do
176
- controller = define_class('MyController').new
177
- store = build_store
178
- allow(store).to receive(:has_value?).
179
- with('the value').
180
- and_return(false)
181
- matcher = described_class.new(store).to('the value')
182
-
183
- expect(controller).not_to matcher
184
- end
185
-
186
- it 'produces the correct failure message' do
187
- controller = define_class('MyController').new
188
- store = build_store(name: 'flash')
189
- allow(store).to receive(:has_value?).
190
- with('the value').
191
- and_return(false)
192
- matcher = described_class.new(store).to('the value')
193
- expected_message = 'Expected MyController to set any key in flash to "the value", but it did not'
194
-
195
- expect { expect(controller).to matcher }.
196
- to fail_with_message(expected_message)
197
- end
198
- end
199
- end
200
-
201
- context 'in the negative' do
202
- context 'if the given value is present in the store' do
203
- it 'produces the correct failure message' do
204
- controller = define_class('MyController').new
205
- store = build_store(name: 'flash')
206
- allow(store).to receive(:has_value?).
207
- with('the value').
208
- and_return(true)
209
- matcher = described_class.new(store).to('the value')
210
- expected_message = 'Expected MyController not to set any key in flash to "the value", but it did'
211
-
212
- expect { expect(controller).not_to matcher }.
213
- to fail_with_message(expected_message)
214
- end
215
- end
216
- end
217
- end
218
-
219
- context 'given a regexp' do
220
- it 'produces the right description' do
221
- store = build_store(name: 'flash')
222
- matcher = described_class.new(store).to(/the value/)
223
- expected_description = 'should set any key in flash to a value matching /the value/'
224
-
225
- expect(matcher.description).to eq expected_description
226
- end
227
-
228
- context 'in the positive' do
229
- context 'if the given value is present in the store' do
230
- it 'accepts' do
231
- controller = define_class('MyController').new
232
- store = build_store
233
- allow(store).to receive(:has_value?).
234
- with(/the value/).
235
- and_return(true)
236
- matcher = described_class.new(store).to(/the value/)
237
-
238
- expect(controller).to matcher
239
- end
240
- end
241
-
242
- context 'if the given value is not present in the store' do
243
- it 'rejects' do
244
- controller = define_class('MyController').new
245
- store = build_store
246
- allow(store).to receive(:has_value?).
247
- with(/the value/).
248
- and_return(false)
249
- matcher = described_class.new(store).to(/the value/)
250
-
251
- expect(controller).not_to matcher
252
- end
253
-
254
- it 'produces the correct failure message' do
255
- controller = define_class('MyController').new
256
- store = build_store(name: 'flash')
257
- allow(store).to receive(:has_value?).
258
- with(/the value/).
259
- and_return(false)
260
- matcher = described_class.new(store).to(/the value/)
261
- expected_message = 'Expected MyController to set any key in flash to a value matching /the value/, but it did not'
262
-
263
- expect { expect(controller).to matcher }.
264
- to fail_with_message(expected_message)
265
- end
266
- end
267
- end
268
-
269
- context 'in the negative' do
270
- context 'if the given value is present in the store' do
271
- it 'produces the correct failure message' do
272
- controller = define_class('MyController').new
273
- store = build_store(name: 'flash')
274
- allow(store).to receive(:has_value?).
275
- with(/the value/).
276
- and_return(true)
277
- matcher = described_class.new(store).to(/the value/)
278
- expected_message = 'Expected MyController not to set any key in flash to a value matching /the value/, but it did'
279
-
280
- expect { expect(controller).not_to matcher }.
281
- to fail_with_message(expected_message)
282
- end
283
- end
284
- end
285
- end
286
-
287
- context 'given a dynamic value' do
288
- it 'produces the right description' do
289
- store = build_store(name: 'flash')
290
- context = double('context', method_in_context: 'the value')
291
- matcher = described_class.new(store).
292
- in_context(context).
293
- to { method_in_context }
294
- expected_description = 'should set any key in flash to "the value"'
295
-
296
- expect(matcher.description).to eq expected_description
297
- end
298
-
299
- it 'requires in_context to be specified beforehand' do
300
- store = build_store(name: 'flash')
301
- matcher = described_class.new(store)
302
- expected_message = 'When specifying a value as a block, a context must be specified beforehand, e.g., flash.in_context(context).to { ... }'
303
-
304
- expect { matcher.to { whatever } }.
305
- to raise_error(ArgumentError, expected_message)
306
- end
307
-
308
- context 'in the positive' do
309
- context 'if the value evaluated in the context is present in the store' do
310
- it 'accepts' do
311
- controller = define_class('MyController').new
312
- store = build_store
313
- allow(store).to receive(:has_value?).
314
- with('the value').
315
- and_return(true)
316
- context = double('context', method_in_context: 'the value')
317
- matcher = described_class.new(store).
318
- in_context(context).
319
- to { method_in_context }
320
-
321
- expect(controller).to matcher
322
- end
323
- end
324
-
325
- context 'if the value evaluated in the context is not present in the store' do
326
- it 'rejects' do
327
- controller = define_class('MyController').new
328
- store = build_store
329
- allow(store).to receive(:has_value?).
330
- with('the value').
331
- and_return(false)
332
- context = double('context', method_in_context: 'the value')
333
- matcher = described_class.new(store).
334
- in_context(context).
335
- to { method_in_context }
336
-
337
- expect(controller).not_to matcher
338
- end
339
-
340
- it 'produces the correct failure message' do
341
- controller = define_class('MyController').new
342
- store = build_store(name: 'flash')
343
- allow(store).to receive(:has_value?).
344
- with('the value').
345
- and_return(false)
346
- context = double('context', method_in_context: 'the value')
347
- matcher = described_class.new(store).
348
- in_context(context).
349
- to { method_in_context }
350
- expected_message = 'Expected MyController to set any key in flash to "the value", but it did not'
351
-
352
- expect { expect(controller).to matcher }.
353
- to fail_with_message(expected_message)
354
- end
355
- end
356
- end
357
-
358
- context 'in the negative' do
359
- context 'if the value evaluated in the context is present in the store' do
360
- it 'produces the correct failure message' do
361
- controller = define_class('MyController').new
362
- store = build_store(name: 'flash')
363
- allow(store).to receive(:has_value?).
364
- with('the value').
365
- and_return(true)
366
- context = double('context', method_in_context: 'the value')
367
- matcher = described_class.new(store).
368
- in_context(context).
369
- to { method_in_context }
370
- expected_message = 'Expected MyController not to set any key in flash to "the value", but it did'
371
-
372
- expect { expect(controller).not_to matcher }.
373
- to fail_with_message(expected_message)
374
- end
375
- end
376
- end
377
- end
378
- end
379
-
380
- context 'with #[] + #to' do
381
- context 'given a static value' do
382
- it 'produces the right description' do
383
- store = build_store(name: 'flash')
384
- matcher = described_class.new(store)['the key'].to('the value')
385
- expected_description = 'should set flash["the key"] to "the value"'
386
-
387
- expect(matcher.description).to eq expected_description
388
- end
389
-
390
- context 'in the positive' do
391
- context 'if the given value is present in the store' do
392
- it 'accepts' do
393
- controller = define_class('MyController').new
394
- store = build_store
395
- allow(store).to receive(:has_key?).
396
- with('the key').
397
- and_return(true)
398
- allow(store).to receive(:has_value?).
399
- with('the value').
400
- and_return(true)
401
- matcher = described_class.new(store)['the key'].to('the value')
402
-
403
- expect(controller).to matcher
404
- end
405
- end
406
-
407
- context 'if the given value is not present in the store' do
408
- it 'rejects' do
409
- controller = define_class('MyController').new
410
- store = build_store
411
- allow(store).to receive(:has_key?).
412
- with('the key').
413
- and_return(true)
414
- allow(store).to receive(:has_value?).
415
- with('the value').
416
- and_return(false)
417
- matcher = described_class.new(store)['the key'].to('the value')
418
-
419
- expect(controller).not_to matcher
420
- end
421
-
422
- it 'produces the correct failure message' do
423
- controller = define_class('MyController').new
424
- store = build_store(name: 'flash')
425
- allow(store).to receive(:has_key?).
426
- with('the key').
427
- and_return(true)
428
- allow(store).to receive(:has_value?).
429
- with('the value').
430
- and_return(false)
431
- matcher = described_class.new(store)['the key'].to('the value')
432
- expected_message = 'Expected MyController to set flash["the key"] to "the value", but it did not'
433
-
434
- expect { expect(controller).to matcher }.
435
- to fail_with_message(expected_message)
436
- end
437
- end
438
- end
439
-
440
- context 'in the negative' do
441
- context 'if the given value is present in the store' do
442
- it 'produces the correct failure message' do
443
- controller = define_class('MyController').new
444
- store = build_store(name: 'flash')
445
- allow(store).to receive(:has_key?).
446
- with('the key').
447
- and_return(true)
448
- allow(store).to receive(:has_value?).
449
- with('the value').
450
- and_return(true)
451
- matcher = described_class.new(store)['the key'].to('the value')
452
- expected_message = 'Expected MyController not to set flash["the key"] to "the value", but it did'
453
-
454
- expect { expect(controller).not_to matcher }.
455
- to fail_with_message(expected_message)
456
- end
457
- end
458
- end
459
- end
460
-
461
- context 'given a dynamic value' do
462
- it 'produces the right description' do
463
- store = build_store(name: 'flash')
464
- context = double('context', method_in_context: 'the value')
465
- matcher = described_class.new(store)['the key'].
466
- in_context(context).
467
- to { method_in_context }
468
- expected_description = 'should set flash["the key"] to "the value"'
469
-
470
- expect(matcher.description).to eq expected_description
471
- end
472
-
473
- context 'in the positive' do
474
- context 'if the value evaluated in the context is present in the store' do
475
- it 'accepts' do
476
- controller = define_class('MyController').new
477
- store = build_store
478
- allow(store).to receive(:has_key?).
479
- with('the key').
480
- and_return(true)
481
- allow(store).to receive(:has_value?).
482
- with('the value').
483
- and_return(true)
484
- context = double('context', method_in_context: 'the value')
485
- matcher = described_class.new(store)['the key'].
486
- in_context(context).
487
- to { method_in_context }
488
-
489
- expect(controller).to matcher
490
- end
491
- end
492
-
493
- context 'if the value evaluated in the context is not present in the store' do
494
- it 'rejects' do
495
- controller = define_class('MyController').new
496
- store = build_store
497
- allow(store).to receive(:has_key?).
498
- with('the key').
499
- and_return(false)
500
- context = double('context', method_in_context: 'the value')
501
- matcher = described_class.new(store)['the key'].
502
- in_context(context).
503
- to { method_in_context }
504
-
505
- expect(controller).not_to matcher
506
- end
507
-
508
- it 'produces the correct failure message' do
509
- controller = define_class('MyController').new
510
- store = build_store(name: 'flash')
511
- allow(store).to receive(:has_key?).
512
- with('the key').
513
- and_return(false)
514
- context = double('context', method_in_context: 'the value')
515
- matcher = described_class.new(store)['the key'].
516
- in_context(context).
517
- to { method_in_context }
518
- expected_message = 'Expected MyController to set flash["the key"] to "the value", but it did not'
519
-
520
- expect { expect(controller).to matcher }.
521
- to fail_with_message(expected_message)
522
- end
523
- end
524
- end
525
-
526
- context 'in the negative' do
527
- context 'if the value evaluated in the context is present in the store' do
528
- it 'produces the correct failure message' do
529
- controller = define_class('MyController').new
530
- store = build_store(name: 'flash')
531
- allow(store).to receive(:has_key?).
532
- with('the key').
533
- and_return(true)
534
- allow(store).to receive(:has_value?).
535
- with('the value').
536
- and_return(true)
537
- context = double('context', method_in_context: 'the value')
538
- matcher = described_class.new(store)['the key'].
539
- in_context(context).
540
- to { method_in_context }
541
- expected_message = 'Expected MyController not to set flash["the key"] to "the value", but it did'
542
-
543
- expect { expect(controller).not_to matcher }.
544
- to fail_with_message(expected_message)
545
- end
546
- end
547
- end
548
- end
549
- end
550
-
551
- def build_store(overrides = {})
552
- defaults = {
553
- :name => 'store',
554
- :controller= => nil,
555
- :has_key? => nil,
556
- :has_value? => nil,
557
- :empty? => nil,
558
- }
559
- methods = defaults.merge(overrides)
560
- double('store', methods)
561
- end
562
- end
@@ -1,115 +0,0 @@
1
- require 'unit_spec_helper'
2
-
3
- describe Shoulda::Matchers::ActiveModel::AllowMassAssignmentOfMatcher, type: :model do
4
- context '#description' do
5
- context 'without a role' do
6
- it 'includes the attribute name' do
7
- expect(described_class.new(:attr).description).
8
- to eq 'allow mass assignment of attr'
9
- end
10
- end
11
-
12
- if active_model_3_1?
13
- context 'with a role' do
14
- it 'includes the attribute name and the role' do
15
- expect(described_class.new(:attr).as(:admin).description).
16
- to eq 'allow mass assignment of attr as admin'
17
- end
18
- end
19
- end
20
- end
21
-
22
- context 'an attribute that is blacklisted from mass-assignment' do
23
- it 'rejects being mass-assignable' do
24
- model = define_model(:example, blacklisted: :string) do
25
- attr_protected :blacklisted
26
- end.new
27
-
28
- expect(model).not_to allow_mass_assignment_of(:blacklisted)
29
- end
30
- end
31
-
32
- context 'an attribute that is not whitelisted for mass-assignment' do
33
- it 'rejects being mass-assignable' do
34
- model = define_model(:example, not_whitelisted: :string,
35
- whitelisted: :string) do
36
- attr_accessible :whitelisted
37
- end.new
38
-
39
- expect(model).not_to allow_mass_assignment_of(:not_whitelisted)
40
- end
41
- end
42
-
43
- context 'an attribute that is whitelisted for mass-assignment' do
44
- it 'accepts being mass-assignable' do
45
- expect(define_model(:example, whitelisted: :string) do
46
- attr_accessible :whitelisted
47
- end.new).to allow_mass_assignment_of(:whitelisted)
48
- end
49
- end
50
-
51
- context 'an attribute not included in the mass-assignment blacklist' do
52
- it 'accepts being mass-assignable' do
53
- model = define_model(:example, not_blacklisted: :string,
54
- blacklisted: :string) do
55
- attr_protected :blacklisted
56
- end.new
57
-
58
- expect(model).to allow_mass_assignment_of(:not_blacklisted)
59
- end
60
- end
61
-
62
- unless active_model_3_2? || active_model_4_0?
63
- context 'an attribute on a class with no protected attributes' do
64
- it 'accepts being mass-assignable' do
65
- expect(no_protected_attributes).to allow_mass_assignment_of(:attr)
66
- end
67
-
68
- it 'assigns a negative failure message' do
69
- matcher = allow_mass_assignment_of(:attr)
70
-
71
- expect(matcher.matches?(no_protected_attributes)).to eq true
72
-
73
- expect(matcher.failure_message_when_negated).not_to be_nil
74
- end
75
- end
76
-
77
- def no_protected_attributes
78
- define_model(:example, attr: :string).new
79
- end
80
- end
81
-
82
- context 'an attribute on a class with all protected attributes' do
83
- it 'rejects being mass-assignable' do
84
- expect(all_protected_attributes).not_to allow_mass_assignment_of(:attr)
85
- end
86
-
87
- def all_protected_attributes
88
- define_model(:example, attr: :string) do
89
- attr_accessible nil
90
- end.new
91
- end
92
- end
93
-
94
- if active_model_3_1?
95
- context 'an attribute included in the mass-assignment whitelist for admin role only' do
96
- it 'rejects being mass-assignable' do
97
- expect(mass_assignable_as_admin).not_to allow_mass_assignment_of(:attr)
98
- end
99
-
100
- it 'accepts being mass-assignable for admin' do
101
- expect(mass_assignable_as_admin).to allow_mass_assignment_of(:attr).as(:admin)
102
- end
103
-
104
- def mass_assignable_as_admin
105
- define_model(:example, attr: :string) do
106
- attr_accessible :attr, as: :admin
107
- end.new
108
- end
109
- end
110
- end
111
-
112
- def define_model(name, columns, &block)
113
- super(name, columns, whitelist_attributes: false, &block)
114
- end
115
- end