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,39 +0,0 @@
1
- require_relative '../model_creators'
2
- require 'forwardable'
3
-
4
- module UnitTests
5
- module ModelCreators
6
- class ActiveModel
7
- def self.call(args)
8
- new(args).call
9
- end
10
-
11
- extend Forwardable
12
-
13
- def_delegators(
14
- :arguments,
15
- :attribute_name,
16
- :attribute_default_values_by_name,
17
- )
18
-
19
- def initialize(args)
20
- @arguments = CreateModelArguments::Basic.wrap(
21
- args.merge(
22
- model_creation_strategy: UnitTests::ModelCreationStrategies::ActiveModel
23
- )
24
- )
25
- @model_creator = Basic.new(arguments)
26
- end
27
-
28
- def call
29
- model_creator.call
30
- end
31
-
32
- protected
33
-
34
- attr_reader :arguments, :model_creator
35
- end
36
-
37
- register(:active_model, ActiveModel)
38
- end
39
- end
@@ -1,95 +0,0 @@
1
- require_relative '../../model_creators'
2
- require 'forwardable'
3
-
4
- module UnitTests
5
- module ModelCreators
6
- class ActiveRecord
7
- class HasAndBelongsToMany
8
- def self.call(args)
9
- new(args).call
10
- end
11
-
12
- extend Forwardable
13
-
14
- def_delegators(
15
- :arguments,
16
- :attribute_name,
17
- :attribute_default_values_by_name,
18
- )
19
-
20
- def initialize(args)
21
- @arguments = CreateModelArguments::HasMany.wrap(args)
22
- end
23
-
24
- def call
25
- parent_child_table_creator.call
26
- child_model_creator.call
27
- parent_model_creator.call
28
- end
29
-
30
- protected
31
-
32
- attr_reader :arguments
33
-
34
- private
35
-
36
- alias_method :association_name, :attribute_name
37
- alias_method :parent_model_creator_arguments, :arguments
38
-
39
- def parent_child_table_creator
40
- @_parent_child_table_creator ||=
41
- UnitTests::ActiveRecord::CreateTable.new(
42
- parent_child_table_name,
43
- foreign_key_for_child_model => :integer,
44
- foreign_key_for_parent_model => :integer,
45
- :id => false
46
- )
47
- end
48
-
49
- def child_model_creator
50
- @_child_model_creator ||=
51
- UnitTests::ModelCreationStrategies::ActiveRecord.new(
52
- child_model_name
53
- )
54
- end
55
-
56
- def parent_model_creator
57
- @_parent_model_creator ||= begin
58
- model_creator = UnitTests::ModelCreators::ActiveRecord.new(
59
- parent_model_creator_arguments
60
- )
61
-
62
- # TODO: doesn't this need to be a has_many :through?
63
- model_creator.customize_model do |model|
64
- model.has_many(association_name)
65
- end
66
-
67
- model_creator
68
- end
69
- end
70
-
71
- def foreign_key_for_child_model
72
- child_model_name.foreign_key
73
- end
74
-
75
- def foreign_key_for_parent_model
76
- parent_model_name.foreign_key
77
- end
78
-
79
- def parent_child_table_name
80
- "#{child_model_name.pluralize}#{parent_model_name}".tableize
81
- end
82
-
83
- def parent_model_name
84
- parent_model_creator.model_name
85
- end
86
-
87
- def child_model_name
88
- association_name.to_s.classify
89
- end
90
- end
91
- end
92
-
93
- register(:"active_record/habtm", ActiveRecord::HasAndBelongsToMany)
94
- end
95
- end
@@ -1,67 +0,0 @@
1
- require_relative '../../model_creators'
2
- require 'forwardable'
3
-
4
- module UnitTests
5
- module ModelCreators
6
- class ActiveRecord
7
- class HasMany
8
- def self.call(args)
9
- new(args).call
10
- end
11
-
12
- extend Forwardable
13
-
14
- def_delegators(
15
- :arguments,
16
- :attribute_name,
17
- :attribute_default_values_by_name,
18
- )
19
-
20
- def initialize(args)
21
- @arguments = CreateModelArguments::HasMany.wrap(args)
22
- end
23
-
24
- def call
25
- child_model_creator.call
26
- parent_model_creator.call
27
- end
28
-
29
- protected
30
-
31
- attr_reader :arguments
32
-
33
- private
34
-
35
- alias_method :association_name, :attribute_name
36
- alias_method :parent_model_creator_arguments, :arguments
37
-
38
- def child_model_creator
39
- @_child_model_creator ||=
40
- UnitTests::ModelCreationStrategies::ActiveRecord.new(
41
- child_model_name
42
- )
43
- end
44
-
45
- def parent_model_creator
46
- @_parent_model_creator ||= begin
47
- model_creator = UnitTests::ModelCreators::ActiveRecord.new(
48
- parent_model_creator_arguments
49
- )
50
-
51
- model_creator.customize_model do |model|
52
- model.has_many(association_name)
53
- end
54
-
55
- model_creator
56
- end
57
- end
58
-
59
- def child_model_name
60
- association_name.to_s.classify
61
- end
62
- end
63
- end
64
-
65
- register(:"active_record/has_many", ActiveRecord::HasMany)
66
- end
67
- end
@@ -1,42 +0,0 @@
1
- require_relative '../../model_creators'
2
- require 'forwardable'
3
-
4
- module UnitTests
5
- module ModelCreators
6
- class ActiveRecord
7
- class UniquenessMatcher
8
- def self.call(args)
9
- new(args).call
10
- end
11
-
12
- extend Forwardable
13
-
14
- def_delegators(
15
- :arguments,
16
- :attribute_name,
17
- :attribute_default_values_by_name,
18
- )
19
-
20
- def initialize(args)
21
- @arguments = CreateModelArguments::UniquenessMatcher.wrap(args)
22
- @model_creator = UnitTests::ModelCreators::ActiveRecord.new(
23
- arguments
24
- )
25
- end
26
-
27
- def call
28
- model_creator.call
29
- end
30
-
31
- protected
32
-
33
- attr_reader :arguments, :model_creator
34
- end
35
- end
36
-
37
- register(
38
- :"active_record/uniqueness_matcher",
39
- ActiveRecord::UniquenessMatcher
40
- )
41
- end
42
- end
@@ -1,43 +0,0 @@
1
- require_relative '../model_creators'
2
- require 'forwardable'
3
-
4
- module UnitTests
5
- module ModelCreators
6
- class ActiveRecord
7
- def self.call(args)
8
- new(args).call
9
- end
10
-
11
- extend Forwardable
12
-
13
- def_delegators(
14
- :arguments,
15
- :attribute_default_values_by_name,
16
- :attribute_name,
17
- :customize_model,
18
- :model_name,
19
- )
20
-
21
- def_delegators :model_creator, :customize_model
22
-
23
- def initialize(args)
24
- @arguments = CreateModelArguments::Basic.wrap(
25
- args.merge(
26
- model_creation_strategy: UnitTests::ModelCreationStrategies::ActiveRecord
27
- )
28
- )
29
- @model_creator = Basic.new(arguments)
30
- end
31
-
32
- def call
33
- model_creator.call
34
- end
35
-
36
- protected
37
-
38
- attr_reader :arguments, :model_creator
39
- end
40
-
41
- register(:active_record, ActiveRecord)
42
- end
43
- end
@@ -1,97 +0,0 @@
1
- require 'forwardable'
2
-
3
- module UnitTests
4
- module ModelCreators
5
- class Basic
6
- def self.call(args)
7
- new(args).call
8
- end
9
-
10
- extend Forwardable
11
-
12
- def_delegators :arguments, :attribute_name, :model_name
13
- def_delegators :model_creator, :customize_model
14
-
15
- def initialize(arguments)
16
- @arguments = arguments
17
- @model_creator = build_model_creator
18
- end
19
-
20
- def call
21
- model_creator.call
22
- end
23
-
24
- protected
25
-
26
- attr_reader :arguments, :model_creator
27
-
28
- private
29
-
30
- def_delegators(
31
- :arguments,
32
- :additional_model_creation_strategy_args,
33
- :all_attribute_overrides,
34
- :columns,
35
- :custom_validation?,
36
- :model_creation_strategy,
37
- :validation_name,
38
- :validation_options,
39
- :column_type,
40
- )
41
-
42
- def build_model_creator
43
- model_creator = model_creation_strategy.new(
44
- model_name,
45
- columns,
46
- arguments
47
- )
48
-
49
- model_creator.customize_model do |model|
50
- add_validation_to(model)
51
- possibly_override_attribute_writer_method_for(model)
52
- end
53
-
54
- model_creator
55
- end
56
-
57
- def add_validation_to(model)
58
- if custom_validation?
59
- _attribute_name = attribute_name
60
-
61
- model.send(:define_method, :custom_validation) do
62
- custom_validation.call(self, _attribute_name)
63
- end
64
-
65
- model.validate(:custom_validation)
66
- else
67
- model.public_send(validation_name, attribute_name, validation_options)
68
- end
69
- end
70
-
71
- def possibly_override_attribute_writer_method_for(model)
72
- all_attribute_overrides.each do |attribute_name, overrides|
73
- if overrides.key?(:changing_values_with)
74
- _change_value = method(:change_value)
75
-
76
- model.send(:define_method, "#{attribute_name}=") do |value|
77
- new_value = _change_value.call(
78
- value,
79
- overrides[:changing_values_with]
80
- )
81
-
82
- if respond_to?(:write_attribute)
83
- write_attribute(new_value)
84
- else
85
- super(new_value)
86
- end
87
- end
88
- end
89
- end
90
- end
91
-
92
- def change_value(value, value_changer)
93
- UnitTests::ChangeValue.call(column_type, value, value_changer)
94
- end
95
- end
96
- end
97
- end
@@ -1,19 +0,0 @@
1
- module UnitTests
2
- module ModelCreators
3
- class << self
4
- def register(name, klass)
5
- registrations[name] = klass
6
- end
7
-
8
- def retrieve(name)
9
- registrations[name]
10
- end
11
-
12
- private
13
-
14
- def registrations
15
- @_registrations ||= {}
16
- end
17
- end
18
- end
19
- end
@@ -1,126 +0,0 @@
1
- require_relative '../tests/bundle'
2
- require_relative '../tests/command_runner'
3
- require_relative '../tests/database'
4
- require_relative '../tests/filesystem'
5
-
6
- require 'yaml'
7
-
8
- module UnitTests
9
- class RailsApplication
10
- def initialize
11
- @fs = Tests::Filesystem.new
12
- @bundle = Tests::Bundle.new
13
- @database = Tests::Database.instance
14
- end
15
-
16
- def create
17
- fs.clean
18
- generate
19
-
20
- fs.within_project do
21
- install_gems
22
- remove_unwanted_gems
23
- end
24
- end
25
-
26
- def load
27
- load_environment
28
- run_migrations
29
- end
30
-
31
- def gemfile_path
32
- fs.find('Gemfile')
33
- end
34
-
35
- def environment_file_path
36
- fs.find_in_project('config/environment')
37
- end
38
-
39
- def temp_views_directory
40
- fs.find_in_project('tmp/views')
41
- end
42
-
43
- def create_temp_view(path, contents)
44
- full_path = temp_view_path_for(path)
45
- full_path.dirname.mkpath
46
- full_path.open('w') { |f| f.write(contents) }
47
- end
48
-
49
- def delete_temp_views
50
- if temp_views_directory.exist?
51
- temp_views_directory.rmtree
52
- end
53
- end
54
-
55
- def draw_routes(&block)
56
- Rails.application.routes.draw(&block)
57
- Rails.application.routes
58
- end
59
-
60
- protected
61
-
62
- attr_reader :fs, :shell, :bundle, :database
63
-
64
- private
65
-
66
- def migrations_directory
67
- fs.find_in_project('db/migrate')
68
- end
69
-
70
- def temp_view_path_for(path)
71
- temp_views_directory.join(path)
72
- end
73
-
74
- def generate
75
- rails_new
76
- fix_available_locales_warning
77
- write_database_configuration
78
- end
79
-
80
- def rails_new
81
- run_command! %W(rails new #{fs.project_directory} --skip-bundle --no-rc)
82
- end
83
-
84
- def fix_available_locales_warning
85
- # See here for more on this:
86
- # http://stackoverflow.com/questions/20361428/rails-i18n-validation-deprecation-warning
87
- fs.transform('config/application.rb') do |lines|
88
- lines.insert(-3, <<-EOT)
89
- if I18n.respond_to?(:enforce_available_locales=)
90
- I18n.enforce_available_locales = false
91
- end
92
- EOT
93
- end
94
- end
95
-
96
- def write_database_configuration
97
- YAML.dump(database.config.to_hash, fs.open('config/database.yml', 'w'))
98
- end
99
-
100
- def load_environment
101
- require environment_file_path
102
- end
103
-
104
- def run_migrations
105
- fs.within_project do
106
- run_command! 'bundle exec rake db:drop db:create db:migrate'
107
- end
108
- end
109
-
110
- def install_gems
111
- bundle.install_gems
112
- end
113
-
114
- def remove_unwanted_gems
115
- bundle.updating do
116
- bundle.remove_gem 'debugger'
117
- bundle.remove_gem 'byebug'
118
- bundle.remove_gem 'web-console'
119
- end
120
- end
121
-
122
- def run_command!(*args)
123
- Tests::CommandRunner.run!(*args)
124
- end
125
- end
126
- end
@@ -1,69 +0,0 @@
1
- require 'delegate'
2
-
3
- module UnitTests
4
- class RecordBuilderWithI18nValidationMessage < SimpleDelegator
5
- def initialize(builder, options = {})
6
- super(builder)
7
- @options = default_options.merge(options)
8
- builder.message = validation_message_key
9
- end
10
-
11
- def validation_message_key
12
- options[:validation_message_key]
13
- end
14
-
15
- protected
16
-
17
- attr_reader :builder, :options
18
-
19
- private
20
-
21
- def model
22
- @_model ||= super.tap do |model|
23
- stub_validation_messages
24
- end
25
- end
26
-
27
- def stub_validation_messages
28
- stub_default_validation_message
29
- stub_attribute_specific_validation_message
30
- end
31
-
32
- def stub_default_validation_message
33
- keys = [
34
- 'activerecord.errors.messages',
35
- validation_message_key
36
- ]
37
-
38
- I18nFaker.stub_translation(keys, default_message)
39
- end
40
-
41
- def stub_attribute_specific_validation_message
42
- keys = [
43
- 'activerecord.errors',
44
- "models.#{builder.model_name.to_s.underscore}",
45
- "attributes.#{builder.attribute_that_receives_error}",
46
- validation_message_key
47
- ]
48
-
49
- I18nFaker.stub_translation(
50
- keys,
51
- message_for_attribute_that_receives_error
52
- )
53
- end
54
-
55
- def default_message
56
- 'the wrong message'
57
- end
58
-
59
- def message_for_attribute_that_receives_error
60
- 'the right message'
61
- end
62
-
63
- def default_options
64
- {
65
- validation_message_key: :validation_message_key
66
- }
67
- end
68
- end
69
- end
@@ -1,51 +0,0 @@
1
- require_relative 'helpers/model_builder'
2
-
3
- module UnitTests
4
- class RecordValidatingConfirmationBuilder
5
- include ModelBuilder
6
-
7
- def initialize(options)
8
- @options = options
9
- end
10
-
11
- def model
12
- @_model ||= create_model
13
- end
14
-
15
- def model_name
16
- 'Example'
17
- end
18
-
19
- def record
20
- model.new
21
- end
22
-
23
- def message=(message)
24
- options[:message] = message
25
- end
26
-
27
- def attribute_to_confirm
28
- options.fetch(:attribute, :attribute_to_confirm)
29
- end
30
-
31
- def confirmation_attribute
32
- :"#{attribute_to_confirm}_confirmation"
33
- end
34
-
35
- def attribute_that_receives_error
36
- confirmation_attribute
37
- end
38
-
39
- protected
40
-
41
- attr_reader :options
42
-
43
- private
44
-
45
- def create_model
46
- define_model(model_name, attribute_to_confirm => :string) do |model|
47
- model.validates_confirmation_of(attribute_to_confirm, options)
48
- end
49
- end
50
- end
51
- end