shoulda-matchers 3.0.0.rc1 → 3.0.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 (106) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -3
  3. data/Gemfile.lock +12 -41
  4. data/NEWS.md +118 -26
  5. data/README.md +34 -11
  6. data/doc_config/yard/templates/default/fulldoc/html/css/bootstrap.css +0 -0
  7. data/doc_config/yard/templates/default/fulldoc/html/css/style.css +4 -0
  8. data/gemfiles/4.0.0.gemfile +2 -3
  9. data/gemfiles/4.0.0.gemfile.lock +47 -77
  10. data/gemfiles/4.0.1.gemfile +2 -3
  11. data/gemfiles/4.0.1.gemfile.lock +51 -79
  12. data/gemfiles/4.1.gemfile +2 -3
  13. data/gemfiles/4.1.gemfile.lock +73 -103
  14. data/gemfiles/4.2.gemfile +2 -3
  15. data/gemfiles/4.2.gemfile.lock +90 -124
  16. data/lib/shoulda/matchers.rb +1 -0
  17. data/lib/shoulda/matchers/action_controller/callback_matcher.rb +6 -8
  18. data/lib/shoulda/matchers/action_controller/filter_param_matcher.rb +1 -3
  19. data/lib/shoulda/matchers/action_controller/flash_store.rb +1 -8
  20. data/lib/shoulda/matchers/action_controller/permit_matcher.rb +140 -88
  21. data/lib/shoulda/matchers/action_controller/redirect_to_matcher.rb +2 -5
  22. data/lib/shoulda/matchers/action_controller/render_template_matcher.rb +5 -10
  23. data/lib/shoulda/matchers/action_controller/render_with_layout_matcher.rb +2 -4
  24. data/lib/shoulda/matchers/action_controller/rescue_from_matcher.rb +1 -3
  25. data/lib/shoulda/matchers/action_controller/respond_with_matcher.rb +3 -5
  26. data/lib/shoulda/matchers/action_controller/route_matcher.rb +5 -7
  27. data/lib/shoulda/matchers/action_controller/set_flash_matcher.rb +35 -9
  28. data/lib/shoulda/matchers/action_controller/set_session_matcher.rb +3 -3
  29. data/lib/shoulda/matchers/active_model.rb +57 -1
  30. data/lib/shoulda/matchers/active_model/allow_mass_assignment_of_matcher.rb +2 -5
  31. data/lib/shoulda/matchers/active_model/allow_value_matcher.rb +162 -54
  32. data/lib/shoulda/matchers/active_model/disallow_value_matcher.rb +5 -2
  33. data/lib/shoulda/matchers/active_model/have_secure_password_matcher.rb +1 -3
  34. data/lib/shoulda/matchers/active_model/numericality_matchers/comparison_matcher.rb +24 -11
  35. data/lib/shoulda/matchers/active_model/numericality_matchers/even_number_matcher.rb +4 -3
  36. data/lib/shoulda/matchers/active_model/numericality_matchers/numeric_type_matcher.rb +0 -2
  37. data/lib/shoulda/matchers/active_model/numericality_matchers/odd_number_matcher.rb +4 -3
  38. data/lib/shoulda/matchers/active_model/numericality_matchers/only_integer_matcher.rb +2 -1
  39. data/lib/shoulda/matchers/active_model/validate_absence_of_matcher.rb +15 -13
  40. data/lib/shoulda/matchers/active_model/validate_acceptance_of_matcher.rb +3 -3
  41. data/lib/shoulda/matchers/active_model/validate_confirmation_of_matcher.rb +3 -3
  42. data/lib/shoulda/matchers/active_model/validate_exclusion_of_matcher.rb +4 -4
  43. data/lib/shoulda/matchers/active_model/validate_inclusion_of_matcher.rb +8 -8
  44. data/lib/shoulda/matchers/active_model/validate_length_of_matcher.rb +8 -8
  45. data/lib/shoulda/matchers/active_model/validate_numericality_of_matcher.rb +12 -14
  46. data/lib/shoulda/matchers/active_model/validate_presence_of_matcher.rb +10 -4
  47. data/lib/shoulda/matchers/active_model/validation_matcher.rb +0 -3
  48. data/lib/shoulda/matchers/active_model/validator.rb +0 -8
  49. data/lib/shoulda/matchers/active_record/accept_nested_attributes_for_matcher.rb +4 -6
  50. data/lib/shoulda/matchers/active_record/association_matcher.rb +58 -43
  51. data/lib/shoulda/matchers/active_record/define_enum_for_matcher.rb +2 -2
  52. data/lib/shoulda/matchers/active_record/have_db_column_matcher.rb +3 -5
  53. data/lib/shoulda/matchers/active_record/have_db_index_matcher.rb +3 -5
  54. data/lib/shoulda/matchers/active_record/have_readonly_attribute_matcher.rb +1 -4
  55. data/lib/shoulda/matchers/active_record/serialize_matcher.rb +3 -5
  56. data/lib/shoulda/matchers/active_record/validate_uniqueness_of_matcher.rb +7 -7
  57. data/lib/shoulda/matchers/doublespeak/double.rb +10 -1
  58. data/lib/shoulda/matchers/doublespeak/double_collection.rb +13 -5
  59. data/lib/shoulda/matchers/doublespeak/method_call.rb +10 -1
  60. data/lib/shoulda/matchers/doublespeak/object_double.rb +2 -1
  61. data/lib/shoulda/matchers/doublespeak/world.rb +10 -0
  62. data/lib/shoulda/matchers/error.rb +4 -0
  63. data/lib/shoulda/matchers/independent/delegate_method_matcher.rb +11 -10
  64. data/lib/shoulda/matchers/integrations/libraries.rb +1 -0
  65. data/lib/shoulda/matchers/integrations/libraries/action_controller.rb +1 -1
  66. data/lib/shoulda/matchers/integrations/libraries/active_model.rb +1 -1
  67. data/lib/shoulda/matchers/integrations/libraries/active_record.rb +1 -1
  68. data/lib/shoulda/matchers/integrations/libraries/rails.rb +2 -1
  69. data/lib/shoulda/matchers/integrations/libraries/routing.rb +27 -0
  70. data/lib/shoulda/matchers/integrations/test_frameworks/active_support_test_case.rb +1 -1
  71. data/lib/shoulda/matchers/integrations/test_frameworks/minitest_4.rb +1 -1
  72. data/lib/shoulda/matchers/integrations/test_frameworks/minitest_5.rb +1 -1
  73. data/lib/shoulda/matchers/integrations/test_frameworks/missing_test_framework.rb +1 -1
  74. data/lib/shoulda/matchers/integrations/test_frameworks/rspec.rb +2 -2
  75. data/lib/shoulda/matchers/integrations/test_frameworks/test_unit.rb +1 -1
  76. data/lib/shoulda/matchers/routing.rb +10 -0
  77. data/lib/shoulda/matchers/version.rb +1 -1
  78. data/script/SUPPORTED_VERSIONS +1 -1
  79. data/spec/acceptance/independent_matchers_spec.rb +103 -42
  80. data/spec/doublespeak_spec_helper.rb +5 -1
  81. data/spec/support/acceptance/adds_shoulda_matchers_to_project.rb +34 -11
  82. data/spec/support/acceptance/helpers/rspec_helpers.rb +9 -13
  83. data/spec/support/acceptance/helpers/step_helpers.rb +13 -0
  84. data/spec/support/acceptance/matchers/have_output.rb +1 -1
  85. data/spec/support/acceptance/matchers/indicate_number_of_tests_was_run_matcher.rb +1 -1
  86. data/spec/support/tests/command_runner.rb +5 -1
  87. data/spec/support/unit/helpers/active_record_versions.rb +0 -4
  88. data/spec/support/unit/shared_examples/set_session_or_flash.rb +8 -3
  89. data/spec/unit/shoulda/matchers/action_controller/permit_matcher_spec.rb +198 -39
  90. data/spec/unit/shoulda/matchers/action_controller/route_matcher_spec.rb +269 -102
  91. data/spec/unit/shoulda/matchers/action_controller/set_flash_matcher_spec.rb +24 -0
  92. data/spec/unit/shoulda/matchers/active_model/allow_value_matcher_spec.rb +118 -101
  93. data/spec/unit/shoulda/matchers/active_model/disallow_value_matcher_spec.rb +0 -82
  94. data/spec/unit/shoulda/matchers/active_model/numericality_matchers/comparison_matcher_spec.rb +148 -121
  95. data/spec/unit/shoulda/matchers/active_model/validate_acceptance_of_matcher_spec.rb +20 -8
  96. data/spec/unit/shoulda/matchers/active_model/validate_numericality_of_matcher_spec.rb +64 -183
  97. data/spec/unit/shoulda/matchers/active_model/validate_presence_of_matcher_spec.rb +14 -0
  98. data/spec/unit/shoulda/matchers/doublespeak/double_collection_spec.rb +60 -0
  99. data/spec/unit/shoulda/matchers/doublespeak/double_spec.rb +23 -7
  100. data/spec/unit/shoulda/matchers/routing/route_matcher_spec.rb +242 -0
  101. data/spec/unit_spec_helper.rb +4 -0
  102. data/tasks/documentation.rb +35 -0
  103. metadata +9 -8
  104. data/Guardfile +0 -5
  105. data/cucumber.yml +0 -1
  106. data/lib/shoulda/matchers/active_model/validator_with_captured_range_error.rb +0 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b8fecf73ca944b0663a84b697138602dee5030c7
4
- data.tar.gz: 6daabcb4fb64b55438d4db5d6058cf2911f6cbda
3
+ metadata.gz: 4d2511e64aa43fb787466f5a74f3988cbd42b3ff
4
+ data.tar.gz: d8ca90b46025cb37d4acd8111b1686902837257e
5
5
  SHA512:
6
- metadata.gz: c5d7162d77f4c392caf7c797c1cdbe543fd83a358fea4a63a3a376d1801b8cfb7ea7e20b0576a557bac6e1e6d62b4acfc18f273741ac11fbdf71a0a3429aff5b
7
- data.tar.gz: f7fe158ff1ea7bfb57f2914a149d0db943f21f0f1704adb2e17777a3ce9aba62cbbf9c463d763c27d7891c12c8f1e50a176b35ebee7b98c5f27b4a8a5ff49001
6
+ metadata.gz: 57e1a16493c88afaedc21664cd8725e140b4c5528941de796543a53086644d60c43aa980229bdbed70bd4340e415bf9e66c9825ac3bffdd74d2d8c281933363e
7
+ data.tar.gz: 7e8e7a91c8073833e9f1ee756201eebea1e67037c141d2d4602be1656407e192fea3c254177f8c05072625235c24d8d9f171d14bd1d4a5b9e7b6d086634e023e
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'appraisal', '~> 1.0'
3
+ gem 'appraisal', '~> 2.0'
4
4
  gem 'bundler', '~> 1.1'
5
5
  gem 'pry', github: 'pry/pry'
6
6
  gem 'pry-byebug'
@@ -12,5 +12,4 @@ gem 'rspec-expectations', '>= 3.2.0', '< 4'
12
12
  gem 'yard'
13
13
  gem 'redcarpet'
14
14
  gem 'pygments.rb'
15
- gem 'guard'
16
- gem 'guard-yard'
15
+ gem 'fssm'
data/Gemfile.lock CHANGED
@@ -10,42 +10,17 @@ GIT
10
10
  GEM
11
11
  remote: https://rubygems.org/
12
12
  specs:
13
- appraisal (1.0.2)
13
+ appraisal (2.1.0)
14
14
  bundler
15
15
  rake
16
16
  thor (>= 0.14.0)
17
17
  byebug (4.0.4)
18
18
  columnize (= 0.9.0)
19
- celluloid (0.16.0)
20
- timers (~> 4.0.0)
21
19
  coderay (1.1.0)
22
20
  columnize (0.9.0)
23
21
  diff-lcs (1.2.5)
24
- ffi (1.9.8)
25
- formatador (0.2.5)
26
- guard (2.12.5)
27
- formatador (>= 0.2.4)
28
- listen (~> 2.7)
29
- lumberjack (~> 1.0)
30
- nenv (~> 0.1)
31
- notiffany (~> 0.0)
32
- pry (>= 0.9.12)
33
- shellany (~> 0.0)
34
- thor (>= 0.18.1)
35
- guard-yard (2.1.4)
36
- guard (>= 1.1.0)
37
- yard (>= 0.7.0)
38
- hitimes (1.2.2)
39
- listen (2.10.0)
40
- celluloid (~> 0.16.0)
41
- rb-fsevent (>= 0.9.3)
42
- rb-inotify (>= 0.9)
43
- lumberjack (1.0.9)
22
+ fssm (0.2.10)
44
23
  method_source (0.8.2)
45
- nenv (0.2.0)
46
- notiffany (0.0.6)
47
- nenv (~> 0.1)
48
- shellany (~> 0.0)
49
24
  posix-spawn (0.3.8)
50
25
  pry-byebug (3.1.0)
51
26
  byebug (~> 4.0)
@@ -54,21 +29,15 @@ GEM
54
29
  posix-spawn (~> 0.3.6)
55
30
  yajl-ruby (~> 1.1.0)
56
31
  rake (10.4.2)
57
- rb-fsevent (0.9.4)
58
- rb-inotify (0.9.5)
59
- ffi (>= 0.5.0)
60
32
  redcarpet (3.0.0)
61
- rspec-core (3.2.0)
62
- rspec-support (~> 3.2.0)
63
- rspec-expectations (3.2.0)
33
+ rspec-core (3.3.2)
34
+ rspec-support (~> 3.3.0)
35
+ rspec-expectations (3.3.1)
64
36
  diff-lcs (>= 1.2.0, < 2.0)
65
- rspec-support (~> 3.2.0)
66
- rspec-support (3.2.1)
67
- shellany (0.0.1)
37
+ rspec-support (~> 3.3.0)
38
+ rspec-support (3.3.0)
68
39
  slop (3.6.0)
69
40
  thor (0.19.1)
70
- timers (4.0.1)
71
- hitimes
72
41
  yajl-ruby (1.1.0)
73
42
  yard (0.8.7.3)
74
43
 
@@ -76,10 +45,9 @@ PLATFORMS
76
45
  ruby
77
46
 
78
47
  DEPENDENCIES
79
- appraisal (~> 1.0)
48
+ appraisal (~> 2.0)
80
49
  bundler (~> 1.1)
81
- guard
82
- guard-yard
50
+ fssm
83
51
  pry!
84
52
  pry-byebug
85
53
  pygments.rb
@@ -88,3 +56,6 @@ DEPENDENCIES
88
56
  rspec-core (>= 3.2.0, < 4)
89
57
  rspec-expectations (>= 3.2.0, < 4)
90
58
  yard
59
+
60
+ BUNDLED WITH
61
+ 1.10.6
data/NEWS.md CHANGED
@@ -1,12 +1,9 @@
1
- # HEAD
1
+ # 3.0.0
2
2
 
3
3
  ### Backward-incompatible changes
4
4
 
5
5
  * We've dropped support for Rails 3.x, Ruby 1.9.2, and Ruby 1.9.3, and RSpec 2.
6
- All of these things have been end-of-lifed. This doesn't mean that the gem
7
- will stop working immediately, but we won't accept any pull requests to fix
8
- any compatibility issues, so you're encouraged to upgrade.
9
- ([a4045a1], [b7fe87a])
6
+ All of these have been end-of-lifed. ([a4045a1], [b7fe87a], [32c0e62])
10
7
 
11
8
  * The gem no longer detects the test framework you're using or mixes itself into
12
9
  that framework automatically. [History][no-auto-integration-1] has
@@ -41,26 +38,117 @@
41
38
 
42
39
  ([1900071])
43
40
 
41
+ * Previously, under RSpec, all of the matchers were mixed into all of the
42
+ example groups. This created a problem because some gems, such as
43
+ [active_model_serializers-matchers], provide matchers that share the same
44
+ name as some of our own matchers. Now, matchers are only mixed into whichever
45
+ example group they belong to:
46
+
47
+ * ActiveModel and ActiveRecord matchers are available only in model example
48
+ groups.
49
+ * ActionController matchers are available only in controller example groups.
50
+ * The `route` matcher is available only in routing example groups.
51
+
52
+ ([af98a23], [8cf449b])
53
+
44
54
  * There are two changes to `allow_value`:
45
55
 
46
- * The negative form of the matcher has been changed so that instead of
56
+ * The negative form of `allow_value` has been changed so that instead of
47
57
  asserting that any of the given values is an invalid value (allowing good
48
58
  values to pass through), assert that *all* values are invalid values
49
59
  (allowing good values not to pass through). This means that this test which
50
60
  formerly passed will now fail:
51
61
 
52
- expect(record).not_to allow_value('good value', *bad_values)
62
+ ``` ruby
63
+ expect(record).not_to allow_value('good value', *bad_values)
64
+ ```
53
65
 
54
66
  ([19ce8a6])
55
67
 
56
- * The matcher may raise an error if the attribute in question contains
57
- custom logic to ignore certain values, resulting in a discrepancy between
58
- the value you provide and the value that the attribute is actually set to.
59
- Specifically, if the attribute cannot be changed from a non-nil value to a
60
- nil value, or vice versa, then you'll get a CouldNotSetAttributeError. The
61
- current behavior (which is to permit this) is misleading, as the test that
62
- you're writing under the hood by using `allow_value` could be different from
63
- the test that actually ends up getting run. ([eaaa2d8])
68
+ * `allow_value` now raises a CouldNotSetAttributeError if in setting the
69
+ attribute, the value of the attribute from reading the attribute back is
70
+ different from the one used to set it.
71
+
72
+ This would happen if the writer method for that attribute has custom logic
73
+ to ignore certain incoming values or change them in any way. Here are three
74
+ examples we've seen:
75
+
76
+ * You're attempting to assert that an attribute should not allow nil, yet
77
+ the attribute's writer method contains a conditional to do nothing if
78
+ the attribute is set to nil:
79
+
80
+ ``` ruby
81
+ class Foo
82
+ include ActiveModel::Model
83
+
84
+ attr_reader :bar
85
+
86
+ def bar=(value)
87
+ return if value.nil?
88
+ @bar = value
89
+ end
90
+ end
91
+
92
+ describe Foo do
93
+ it do
94
+ foo = Foo.new
95
+ foo.bar = "baz"
96
+ # This will raise a CouldNotSetAttributeError since `foo.bar` is now "123"
97
+ expect(foo).not_to allow_value(nil).for(:bar)
98
+ end
99
+ end
100
+ ```
101
+
102
+ * You're attempting to assert that an numeric attribute should not allow a
103
+ string that contains non-numeric characters, yet the writer method for
104
+ that attribute strips out non-numeric characters:
105
+
106
+ ``` ruby
107
+ class Foo
108
+ include ActiveModel::Model
109
+
110
+ attr_reader :bar
111
+
112
+ def bar=(value)
113
+ @bar = value.gsub(/\D+/, '')
114
+ end
115
+ end
116
+
117
+ describe Foo do
118
+ it do
119
+ foo = Foo.new
120
+ # This will raise a CouldNotSetAttributeError since `foo.bar` is now "123"
121
+ expect(foo).not_to allow_value("abc123").for(:bar)
122
+ end
123
+ end
124
+ ```
125
+
126
+ * You're passing a value to `allow_value` that the model typecasts into
127
+ another value:
128
+
129
+ ``` ruby
130
+ describe Foo do
131
+ # Assume that `attr` is a string
132
+ # This will raise a CouldNotSetAttributeError since `attr` typecasts `[]` to `"[]"`
133
+ it { should_not allow_value([]).for(:attr) }
134
+ end
135
+ ```
136
+
137
+ With all of these failing examples, why are we making this change? We want
138
+ to guard you (as the developer) from writing a test that you think acts one
139
+ way but actually acts a different way, as this could lead to a confusing
140
+ false positive or negative.
141
+
142
+ If you understand the problem and wish to override this behavior so that
143
+ you do not get a CouldNotSetAttributeError, you can add the
144
+ `ignoring_interference_by_writer` qualifier like so. Note that this will not
145
+ always cause the test to pass.
146
+
147
+ ``` ruby
148
+ it { should_not allow_value([]).for(:attr).ignoring_interference_by_writer }
149
+ ```
150
+
151
+ ([9d9dc4e])
64
152
 
65
153
  * `validate_uniqueness_of` is now properly case-insensitive by default, to match
66
154
  the default behavior of the validation itself. This is a backward-incompatible
@@ -89,6 +177,11 @@
89
177
  * `set_session['key'].to(nil)` will no longer pass when the key in question
90
178
  has not been set yet. ([535fe05])
91
179
 
180
+ * Change `set_flash` so that `set_flash[:foo].now` is no longer valid syntax.
181
+ You'll want to use `set_flash.now[:foo]` instead. This was changed in order to
182
+ more closely align with how `flash.now` works when used in a controller.
183
+ ([#755], [#752])
184
+
92
185
  * Change behavior of `validate_uniqueness_of` when the matcher is not
93
186
  qualified with any scopes, but your validation is. Previously the following
94
187
  test would pass when it now fails:
@@ -105,6 +198,7 @@
105
198
 
106
199
  ([6ac7b81])
107
200
 
201
+ [active_model_serializers-matchers]: https://github.com/adambarber/active_model_serializers-matchers
108
202
  [no-auto-integration-1]: https://github.com/freerange/mocha/commit/049080c673ee3f76e76adc1e1a6122c7869f1648
109
203
  [no-auto-integration-2]: https://github.com/rr/rr/issues/29
110
204
  [1900071]: https://github.com/thoughtbot/shoulda-matchers/commit/190007155e0676aae84d08d8ed8eed3beebc3a06
@@ -116,8 +210,11 @@
116
210
  [55c8d09]: https://github.com/thoughtbot/shoulda-matchers/commit/55c8d09bf2af886540924efa83c3b518d926a770
117
211
  [801f2c7]: https://github.com/thoughtbot/shoulda-matchers/commit/801f2c7c1eab3b2053244485c9800f850959cfef
118
212
  [535fe05]: https://github.com/thoughtbot/shoulda-matchers/commit/535fe05be8686fdafd8b22f2ed5c4192bd565d50
119
- [eaaa2d8]: https://github.com/thoughtbot/shoulda-matchers/commit/eaaa2d83e5cd31a3ca0a1aaa65441ea1a4fffa49
120
213
  [6ac7b81]: https://github.com/thoughtbot/shoulda-matchers/commit/6ac7b8158cfba3b518eb3da3c24345e4473b416f
214
+ [#755]: https://github.com/thoughtbot/shoulda-matchers/pull/755
215
+ [#752]: https://github.com/thoughtbot/shoulda-matchers/pull/752
216
+ [9d9dc4e]: https://github.com/thoughtbot/shoulda-matchers/commit/9d9dc4e6b9cf2c19df66a1b4ba432ad8d3e5dded
217
+ [32c0e62]: https://github.com/thoughtbot/shoulda-matchers/commit/32c0e62596b87e37a301f87bbe21cfcc77750552
121
218
 
122
219
  ### Bug fixes
123
220
 
@@ -157,6 +254,9 @@
157
254
  * Fix failure message for `validate_numericality_of` as it sometimes didn't
158
255
  provide the reason for failure. ([#699])
159
256
 
257
+ * Fix `shoulda/matchers/independent` so that it can be required
258
+ independently, without having to require all of the gem. ([#746], [e0a0200])
259
+
160
260
  ### Features
161
261
 
162
262
  * Add `on` qualifier to `permit`. This allows you to make an assertion that
@@ -200,6 +300,8 @@
200
300
  [#694]: https://github.com/thoughtbot/shoulda-matchers/pull/694
201
301
  [#692]: https://github.com/thoughtbot/shoulda-matchers/pull/692
202
302
  [#699]: https://github.com/thoughtbot/shoulda-matchers/pull/699
303
+ [#746]: https://github.com/thoughtbot/shoulda-matchers/pull/746
304
+ [e0a0200]: https://github.com/thoughtbot/shoulda-matchers/commit/e0a0200fe47157c161fb206043540804bdad664e
203
305
 
204
306
  # 2.8.0
205
307
 
@@ -252,13 +354,6 @@
252
354
  notation (e.g. `posts#show`), route parameters such as `id` do not need to be
253
355
  specified as a string but may be specified as a number as well. ([#602])
254
356
 
255
- * Fix `allow_value`, `validate_numericality_of` and `validate_inclusion_of` so
256
- that they handle RangeErrors emitted from ActiveRecord 4.2. These exceptions
257
- arise whenever we attempt to set an attribute using a value that lies outside
258
- the range of the column (assuming the column is an integer). RangeError is now
259
- treated specially, failing the test instead of bubbling up as an error.
260
- ([#634], [#637], [#642])
261
-
262
357
  ### Features
263
358
 
264
359
  * Add ability to test `:primary_key` option on associations. ([#597])
@@ -304,9 +399,6 @@
304
399
  [#622]: https://github.com/thoughtbot/shoulda-matchers/pull/622
305
400
  [#627]: https://github.com/thoughtbot/shoulda-matchers/pull/627
306
401
  [#631]: https://github.com/thoughtbot/shoulda-matchers/pull/631
307
- [#634]: https://github.com/thoughtbot/shoulda-matchers/pull/634
308
- [#637]: https://github.com/thoughtbot/shoulda-matchers/pull/637
309
- [#642]: https://github.com/thoughtbot/shoulda-matchers/pull/642
310
402
 
311
403
  # 2.7.0
312
404
 
data/README.md CHANGED
@@ -16,9 +16,14 @@ interested in the README for 2.8.0 instead.][2.8.0-README]**
16
16
  * **[allow_mass_assignment_of](lib/shoulda/matchers/active_model/allow_mass_assignment_of_matcher.rb)**
17
17
  tests usage of Rails 3's `attr_accessible` and `attr_protected` macros.
18
18
  * **[allow_value](lib/shoulda/matchers/active_model/allow_value_matcher.rb)**
19
- tests usage of the `validates_format_of` validation.
19
+ tests that an attribute is valid or invalid if set to one or more values.
20
+ *(Aliased as #allow_values.)*
20
21
  * **[have_secure_password](lib/shoulda/matchers/active_model/have_secure_password_matcher.rb)**
21
22
  tests usage of `has_secure_password`.
23
+ * **[validate_absence_of](lib/shoulda/matchers/active_model/validate_absence_of_matcher.rb)**
24
+ tests usage of `validates_absence_of`.
25
+ * **[validate_acceptance_of](lib/shoulda/matchers/active_model/validate_acceptance_of_matcher.rb)**
26
+ tests usage of `validates_acceptance_of`.
22
27
  * **[validate_confirmation_of](lib/shoulda/matchers/active_model/validate_confirmation_of_matcher.rb)**
23
28
  tests usage of `validates_confirmation_of`.
24
29
  * **[validate_exclusion_of](lib/shoulda/matchers/active_model/validate_exclusion_of_matcher.rb)**
@@ -80,14 +85,14 @@ interested in the README for 2.8.0 instead.][2.8.0-README]**
80
85
  * **[set_flash](lib/shoulda/matchers/action_controller/set_flash_matcher.rb)**
81
86
  makes assertions on the `flash` hash.
82
87
  * **[use_after_action](lib/shoulda/matchers/action_controller/callback_matcher.rb#L79)**
83
- tests that a `after_action` callback is defined in your controller. (Aliased
84
- as *use_after_filter*.)
88
+ tests that an `after_action` callback is defined in your controller. *(Aliased
89
+ as #use_after_filter.)*
85
90
  * **[use_around_action](lib/shoulda/matchers/action_controller/callback_matcher.rb#L129)**
86
- tests that a `around_action` callback is defined in your controller. (Aliased
87
- as *use_around_filter*.)
91
+ tests that an `around_action` callback is defined in your controller. *(Aliased
92
+ as #use_around_filter.)*
88
93
  * **[use_before_action](lib/shoulda/matchers/action_controller/callback_matcher.rb#L54)**
89
- tests that a `before_action` callback is defined in your controller. (Aliased
90
- as *use_before_filter*.)
94
+ tests that a `before_action` callback is defined in your controller. *(Aliased
95
+ as #use_before_filter.)*
91
96
 
92
97
  ### Independent matchers
93
98
 
@@ -118,7 +123,19 @@ describe Person do
118
123
  end
119
124
  ```
120
125
 
121
- ### Minitest / Test::Unit
126
+ Note that in this README and throughout the documentation we're using the
127
+ `should` form of RSpec's one-liner syntax over `is_expected.to`. The `should`
128
+ form works regardless of how you've configured RSpec -- meaning you can still
129
+ use it even when using the `expect` syntax. But if you prefer to use
130
+ `is_expected.to`, you can do that too:
131
+
132
+ ``` ruby
133
+ describe Person do
134
+ it { is_expected.to validate_presence_of(:name) }
135
+ end
136
+ ```
137
+
138
+ ### Minitest
122
139
 
123
140
  Shoulda Matchers was originally a component of [Shoulda][shoulda], a gem that
124
141
  also provides `should` and `context` syntax via
@@ -184,10 +201,11 @@ You can preview changes you make to the documentation locally by running
184
201
 
185
202
  from this directory. Then, open `doc/index.html` in your browser.
186
203
 
187
- If you want to see a live preview as you work without having to run `yard` over
188
- and over again, keep this command running in a separate terminal session:
204
+ If you want to be able to regenerate the docs as you work without having to run
205
+ `yard doc` over and over again, keep this command running in a separate terminal
206
+ session:
189
207
 
190
- bundle exec guard
208
+ rake docs:autogenerate
191
209
 
192
210
  ## Contributing
193
211
 
@@ -198,6 +216,11 @@ If you'd like to contribute, please take a look at the
198
216
  [instructions](CONTRIBUTING.md) for installing dependencies and crafting a good
199
217
  pull request.
200
218
 
219
+ ## Compatibility
220
+
221
+ Shoulda Matchers is tested and supported against Rails 4.x, RSpec 3.x, Minitest
222
+ 5, and Ruby 2.x.
223
+
201
224
  ## Versioning
202
225
 
203
226
  Shoulda Matchers follows Semantic Versioning 2.0 as defined at
@@ -214,6 +214,10 @@ h4 + h5 {
214
214
  }
215
215
 
216
216
  .method_details {}
217
+ .method_details .signature .aliases {
218
+ display: none;
219
+ }
220
+
217
221
  .method_details td {
218
222
  padding: 10px;
219
223
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "appraisal", "~> 1.0"
5
+ gem "appraisal", "~> 2.0"
6
6
  gem "bundler", "~> 1.1"
7
7
  gem "pry", :github => "pry/pry"
8
8
  gem "pry-byebug"
@@ -12,8 +12,7 @@ gem "rspec-expectations", ">= 3.2.0", "< 4"
12
12
  gem "yard"
13
13
  gem "redcarpet"
14
14
  gem "pygments.rb"
15
- gem "guard"
16
- gem "guard-yard"
15
+ gem "fssm"
17
16
  gem "rspec-rails", ">= 3.2.0", "< 4"
18
17
  gem "shoulda-context", "~> 1.2.0"
19
18
  gem "sqlite3", :platform => :ruby