shoulda-matchers 3.0.1 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +3 -3
  4. data/CONTRIBUTING.md +60 -28
  5. data/Gemfile +1 -0
  6. data/Gemfile.lock +15 -12
  7. data/NEWS.md +111 -0
  8. data/README.md +94 -6
  9. data/Rakefile +10 -8
  10. data/custom_plan.rb +88 -0
  11. data/gemfiles/4.0.0.gemfile +1 -0
  12. data/gemfiles/4.0.0.gemfile.lock +21 -18
  13. data/gemfiles/4.0.1.gemfile +1 -0
  14. data/gemfiles/4.0.1.gemfile.lock +21 -18
  15. data/gemfiles/4.1.gemfile +1 -0
  16. data/gemfiles/4.1.gemfile.lock +21 -18
  17. data/gemfiles/4.2.gemfile +1 -0
  18. data/gemfiles/4.2.gemfile.lock +24 -21
  19. data/lib/shoulda/matchers/action_controller/permit_matcher.rb +6 -11
  20. data/lib/shoulda/matchers/active_model.rb +10 -1
  21. data/lib/shoulda/matchers/active_model/allow_value_matcher.rb +258 -180
  22. data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_changed_value_error.rb +45 -0
  23. data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_does_not_exist_error.rb +23 -0
  24. data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setter.rb +236 -0
  25. data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setter_and_validator.rb +62 -0
  26. data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setters.rb +40 -0
  27. data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setters_and_validators.rb +48 -0
  28. data/lib/shoulda/matchers/active_model/allow_value_matcher/successful_check.rb +14 -0
  29. data/lib/shoulda/matchers/active_model/allow_value_matcher/successful_setting.rb +14 -0
  30. data/lib/shoulda/matchers/active_model/disallow_value_matcher.rb +34 -14
  31. data/lib/shoulda/matchers/active_model/helpers.rb +9 -17
  32. data/lib/shoulda/matchers/active_model/numericality_matchers/comparison_matcher.rb +13 -6
  33. data/lib/shoulda/matchers/active_model/numericality_matchers/even_number_matcher.rb +13 -2
  34. data/lib/shoulda/matchers/active_model/numericality_matchers/numeric_type_matcher.rb +19 -35
  35. data/lib/shoulda/matchers/active_model/numericality_matchers/odd_number_matcher.rb +13 -2
  36. data/lib/shoulda/matchers/active_model/numericality_matchers/only_integer_matcher.rb +12 -2
  37. data/lib/shoulda/matchers/active_model/qualifiers.rb +12 -0
  38. data/lib/shoulda/matchers/active_model/qualifiers/ignore_interference_by_writer.rb +101 -0
  39. data/lib/shoulda/matchers/active_model/qualifiers/ignoring_interference_by_writer.rb +21 -0
  40. data/lib/shoulda/matchers/active_model/validate_absence_of_matcher.rb +30 -32
  41. data/lib/shoulda/matchers/active_model/validate_acceptance_of_matcher.rb +5 -8
  42. data/lib/shoulda/matchers/active_model/validate_confirmation_of_matcher.rb +22 -22
  43. data/lib/shoulda/matchers/active_model/validate_exclusion_of_matcher.rb +27 -16
  44. data/lib/shoulda/matchers/active_model/validate_inclusion_of_matcher.rb +58 -15
  45. data/lib/shoulda/matchers/active_model/validate_length_of_matcher.rb +22 -12
  46. data/lib/shoulda/matchers/active_model/validate_numericality_of_matcher.rb +165 -87
  47. data/lib/shoulda/matchers/active_model/validate_presence_of_matcher.rb +7 -9
  48. data/lib/shoulda/matchers/active_model/validation_matcher.rb +111 -49
  49. data/lib/shoulda/matchers/active_model/validation_matcher/build_description.rb +60 -0
  50. data/lib/shoulda/matchers/active_model/validator.rb +71 -52
  51. data/lib/shoulda/matchers/active_record/define_enum_for_matcher.rb +19 -5
  52. data/lib/shoulda/matchers/active_record/validate_uniqueness_of_matcher.rb +450 -124
  53. data/lib/shoulda/matchers/util.rb +43 -0
  54. data/lib/shoulda/matchers/util/word_wrap.rb +59 -31
  55. data/lib/shoulda/matchers/version.rb +1 -1
  56. data/script/update_gem_in_all_appraisals +1 -1
  57. data/script/update_gems_in_all_appraisals +1 -1
  58. data/spec/acceptance/multiple_libraries_integration_spec.rb +5 -2
  59. data/spec/acceptance/rails_integration_spec.rb +6 -2
  60. data/spec/spec_helper.rb +1 -3
  61. data/spec/support/acceptance/helpers/step_helpers.rb +4 -1
  62. data/spec/support/tests/current_bundle.rb +21 -7
  63. data/spec/support/unit/active_record/create_table.rb +54 -0
  64. data/spec/support/unit/attribute.rb +47 -0
  65. data/spec/support/unit/capture.rb +6 -0
  66. data/spec/support/unit/change_value.rb +111 -0
  67. data/spec/support/unit/create_model_arguments/basic.rb +135 -0
  68. data/spec/support/unit/create_model_arguments/has_many.rb +15 -0
  69. data/spec/support/unit/create_model_arguments/uniqueness_matcher.rb +74 -0
  70. data/spec/support/unit/helpers/active_record_versions.rb +1 -1
  71. data/spec/support/unit/helpers/class_builder.rb +61 -47
  72. data/spec/support/unit/helpers/database_helpers.rb +5 -3
  73. data/spec/support/unit/helpers/model_builder.rb +77 -97
  74. data/spec/support/unit/helpers/validation_matcher_scenario_helpers.rb +44 -0
  75. data/spec/support/unit/load_environment.rb +12 -0
  76. data/spec/support/unit/matchers/fail_with_message_including_matcher.rb +2 -2
  77. data/spec/support/unit/matchers/fail_with_message_matcher.rb +12 -1
  78. data/spec/support/unit/model_creation_strategies/active_model.rb +111 -0
  79. data/spec/support/unit/model_creation_strategies/active_record.rb +77 -0
  80. data/spec/support/unit/model_creators.rb +19 -0
  81. data/spec/support/unit/model_creators/active_model.rb +39 -0
  82. data/spec/support/unit/model_creators/active_record.rb +43 -0
  83. data/spec/support/unit/model_creators/active_record/has_and_belongs_to_many.rb +95 -0
  84. data/spec/support/unit/model_creators/active_record/has_many.rb +67 -0
  85. data/spec/support/unit/model_creators/active_record/uniqueness_matcher.rb +42 -0
  86. data/spec/support/unit/model_creators/basic.rb +97 -0
  87. data/spec/support/unit/rails_application.rb +1 -1
  88. data/spec/support/unit/record_validating_confirmation_builder.rb +3 -7
  89. data/spec/support/unit/shared_examples/ignoring_interference_by_writer.rb +79 -0
  90. data/spec/support/unit/validation_matcher_scenario.rb +62 -0
  91. data/spec/unit/shoulda/matchers/active_model/allow_mass_assignment_of_matcher_spec.rb +4 -0
  92. data/spec/unit/shoulda/matchers/active_model/allow_value_matcher_spec.rb +575 -140
  93. data/spec/unit/shoulda/matchers/active_model/validate_absence_of_matcher_spec.rb +115 -15
  94. data/spec/unit/shoulda/matchers/active_model/validate_acceptance_of_matcher_spec.rb +42 -4
  95. data/spec/unit/shoulda/matchers/active_model/validate_confirmation_of_matcher_spec.rb +92 -6
  96. data/spec/unit/shoulda/matchers/active_model/validate_exclusion_of_matcher_spec.rb +122 -10
  97. data/spec/unit/shoulda/matchers/active_model/validate_inclusion_of_matcher_spec.rb +306 -58
  98. data/spec/unit/shoulda/matchers/active_model/validate_length_of_matcher_spec.rb +122 -3
  99. data/spec/unit/shoulda/matchers/active_model/validate_numericality_of_matcher_spec.rb +805 -131
  100. data/spec/unit/shoulda/matchers/active_model/validate_presence_of_matcher_spec.rb +196 -29
  101. data/spec/unit/shoulda/matchers/active_record/define_enum_for_matcher_spec.rb +82 -40
  102. data/spec/unit/shoulda/matchers/active_record/validate_uniqueness_of_matcher_spec.rb +600 -101
  103. data/spec/unit/shoulda/matchers/util/word_wrap_spec.rb +88 -33
  104. data/spec/unit_spec_helper.rb +10 -22
  105. data/zeus.json +11 -0
  106. metadata +64 -23
  107. data/lib/shoulda/matchers/active_model/strict_validator.rb +0 -51
  108. data/spec/support/unit/shared_examples/numerical_type_submatcher.rb +0 -15
  109. data/spec/unit/shoulda/matchers/active_model/numericality_matchers/comparison_matcher_spec.rb +0 -288
  110. data/spec/unit/shoulda/matchers/active_model/numericality_matchers/even_number_matcher_spec.rb +0 -100
  111. data/spec/unit/shoulda/matchers/active_model/numericality_matchers/odd_number_matcher_spec.rb +0 -100
  112. data/spec/unit/shoulda/matchers/active_model/numericality_matchers/only_integer_matcher_spec.rb +0 -100
@@ -3,40 +3,51 @@ require 'shoulda/matchers/util/word_wrap'
3
3
 
4
4
  describe Shoulda::Matchers, ".word_wrap" do
5
5
  it "can wrap a simple paragraph" do
6
- wrapped_message = described_class.word_wrap(<<-MESSAGE.strip)
6
+ wrapped_message = described_class.word_wrap(<<-MESSAGE.rstrip)
7
7
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean luctus, ipsum sit amet efficitur feugiat
8
8
  MESSAGE
9
9
 
10
- expect(wrapped_message).to eq(<<-MESSAGE.strip)
10
+ expect(wrapped_message).to eq(<<-MESSAGE.rstrip)
11
11
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean luctus,
12
12
  ipsum sit amet efficitur feugiat
13
13
  MESSAGE
14
14
  end
15
15
 
16
16
  it "does not split words up when wrapping" do
17
- wrapped_message = described_class.word_wrap(<<-MESSAGE.strip)
17
+ wrapped_message = described_class.word_wrap(<<-MESSAGE.rstrip)
18
18
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean lusciousness, ipsum sit amet efficitur feugiat
19
19
  MESSAGE
20
20
 
21
- expect(wrapped_message).to eq(<<-MESSAGE.strip)
21
+ expect(wrapped_message).to eq(<<-MESSAGE.rstrip)
22
22
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean
23
23
  lusciousness, ipsum sit amet efficitur feugiat
24
24
  MESSAGE
25
25
  end
26
26
 
27
27
  it "considers punctuation as part of a word" do
28
- wrapped_message = described_class.word_wrap(<<-MESSAGE.strip)
28
+ wrapped_message = described_class.word_wrap(<<-MESSAGE.rstrip)
29
29
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean luscious, ipsum sit amet efficitur feugiat
30
30
  MESSAGE
31
31
 
32
- expect(wrapped_message).to eq(<<-MESSAGE.strip)
32
+ expect(wrapped_message).to eq(<<-MESSAGE.rstrip)
33
33
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean
34
34
  luscious, ipsum sit amet efficitur feugiat
35
35
  MESSAGE
36
36
  end
37
37
 
38
+ it "does not break at the maximum line length, but afterward" do
39
+ wrapped_message = described_class.word_wrap(<<-MESSAGE.rstrip)
40
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean luscius, ipsum sit amet efficitur feugiat
41
+ MESSAGE
42
+
43
+ expect(wrapped_message).to eq(<<-MESSAGE.rstrip)
44
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean luscius,
45
+ ipsum sit amet efficitur feugiat
46
+ MESSAGE
47
+ end
48
+
38
49
  it "re-wraps entire paragraphs" do
39
- wrapped_message = described_class.word_wrap(<<-MESSAGE)
50
+ wrapped_message = described_class.word_wrap(<<-MESSAGE.rstrip)
40
51
  Lorem ipsum dolor sit amet,
41
52
  consectetur adipiscing elit.
42
53
  Aenean luctus,
@@ -44,7 +55,7 @@ ipsum sit amet efficitur feugiat,
44
55
  dolor mauris fringilla erat, sed posuere diam ex ut velit.
45
56
  MESSAGE
46
57
 
47
- expect(wrapped_message).to eq(<<-MESSAGE.strip)
58
+ expect(wrapped_message).to eq(<<-MESSAGE.rstrip)
48
59
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean luctus,
49
60
  ipsum sit amet efficitur feugiat, dolor mauris fringilla erat, sed
50
61
  posuere diam ex ut velit.
@@ -52,13 +63,13 @@ posuere diam ex ut velit.
52
63
  end
53
64
 
54
65
  it "can wrap multiple paragraphs" do
55
- wrapped_message = described_class.word_wrap(<<-MESSAGE.strip)
66
+ wrapped_message = described_class.word_wrap(<<-MESSAGE.rstrip)
56
67
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean luctus, ipsum sit amet efficitur feugiat, dolor mauris fringilla erat, sed posuere diam ex ut velit.
57
68
 
58
69
  Etiam ultrices cursus ligula eget feugiat. Vestibulum eget tincidunt risus, non faucibus sem.
59
70
  MESSAGE
60
71
 
61
- expect(wrapped_message).to eq(<<-MESSAGE.strip)
72
+ expect(wrapped_message).to eq(<<-MESSAGE.rstrip)
62
73
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean luctus,
63
74
  ipsum sit amet efficitur feugiat, dolor mauris fringilla erat, sed
64
75
  posuere diam ex ut velit.
@@ -69,21 +80,21 @@ risus, non faucibus sem.
69
80
  end
70
81
 
71
82
  it "can wrap a bulleted list" do
72
- wrapped_message = described_class.word_wrap(<<-MESSAGE)
83
+ wrapped_message = described_class.word_wrap(<<-MESSAGE.rstrip)
73
84
  * Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean luctus, ipsum sit amet efficitur feugiat, dolor mauris fringilla erat, sed posuere diam ex ut velit.
74
85
  * And the beat goes on.
75
86
  MESSAGE
76
87
 
77
- expect(wrapped_message).to eq(<<-MESSAGE.strip)
88
+ expect(wrapped_message).to eq(<<-MESSAGE.rstrip)
78
89
  * Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean
79
- luctus, ipsum sit amet efficitur feugiat, dolor mauris fringilla
80
- erat, sed posuere diam ex ut velit.
90
+ luctus, ipsum sit amet efficitur feugiat, dolor mauris fringilla erat,
91
+ sed posuere diam ex ut velit.
81
92
  * And the beat goes on.
82
93
  MESSAGE
83
94
  end
84
95
 
85
96
  it "re-wraps bulleted lists" do
86
- wrapped_message = described_class.word_wrap(<<-MESSAGE)
97
+ wrapped_message = described_class.word_wrap(<<-MESSAGE.rstrip)
87
98
  * Lorem ipsum dolor sit amet,
88
99
  consectetur adipiscing elit.
89
100
  Aenean luctus,
@@ -93,21 +104,21 @@ risus, non faucibus sem.
93
104
  * And the beat goes on.
94
105
  MESSAGE
95
106
 
96
- expect(wrapped_message).to eq(<<-MESSAGE.strip)
107
+ expect(wrapped_message).to eq(<<-MESSAGE.rstrip)
97
108
  * Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean
98
- luctus, ipsum sit amet efficitur feugiat, dolor mauris fringilla
99
- erat, sed posuere diam ex ut velit.
109
+ luctus, ipsum sit amet efficitur feugiat, dolor mauris fringilla erat,
110
+ sed posuere diam ex ut velit.
100
111
  * And the beat goes on.
101
112
  MESSAGE
102
113
  end
103
114
 
104
115
  it "can wrap a numbered list" do
105
- wrapped_message = described_class.word_wrap(<<-MESSAGE)
116
+ wrapped_message = described_class.word_wrap(<<-MESSAGE.rstrip)
106
117
  1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean luctus, ipsum sit amet efficitur feugiat, dolor mauris fringilla erat, sed posuere diam ex ut velit.
107
118
  2. And the beat goes on.
108
119
  MESSAGE
109
120
 
110
- expect(wrapped_message).to eq(<<-MESSAGE.strip)
121
+ expect(wrapped_message).to eq(<<-MESSAGE.rstrip)
111
122
  1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean
112
123
  luctus, ipsum sit amet efficitur feugiat, dolor mauris fringilla
113
124
  erat, sed posuere diam ex ut velit.
@@ -116,7 +127,7 @@ risus, non faucibus sem.
116
127
  end
117
128
 
118
129
  it "re-wraps numbered lists" do
119
- wrapped_message = described_class.word_wrap(<<-MESSAGE)
130
+ wrapped_message = described_class.word_wrap(<<-MESSAGE.rstrip)
120
131
  1. Lorem ipsum dolor sit amet,
121
132
  consectetur adipiscing elit.
122
133
  Aenean luctus,
@@ -126,7 +137,7 @@ risus, non faucibus sem.
126
137
  2. And the beat goes on.
127
138
  MESSAGE
128
139
 
129
- expect(wrapped_message).to eq(<<-MESSAGE.strip)
140
+ expect(wrapped_message).to eq(<<-MESSAGE.rstrip)
130
141
  1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean
131
142
  luctus, ipsum sit amet efficitur feugiat, dolor mauris fringilla
132
143
  erat, sed posuere diam ex ut velit.
@@ -135,12 +146,12 @@ risus, non faucibus sem.
135
146
  end
136
147
 
137
148
  it "can wrap a numbered list, using x) instead of x. as the leader" do
138
- wrapped_message = described_class.word_wrap(<<-MESSAGE)
149
+ wrapped_message = described_class.word_wrap(<<-MESSAGE.rstrip)
139
150
  1) Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean luctus, ipsum sit amet efficitur feugiat, dolor mauris fringilla erat, sed posuere diam ex ut velit.
140
151
  2) And the beat goes on.
141
152
  MESSAGE
142
153
 
143
- expect(wrapped_message).to eq(<<-MESSAGE.strip)
154
+ expect(wrapped_message).to eq(<<-MESSAGE.rstrip)
144
155
  1) Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean
145
156
  luctus, ipsum sit amet efficitur feugiat, dolor mauris fringilla
146
157
  erat, sed posuere diam ex ut velit.
@@ -149,7 +160,7 @@ risus, non faucibus sem.
149
160
  end
150
161
 
151
162
  it "re-wraps numbered lists using x) instead of x. as the leader" do
152
- wrapped_message = described_class.word_wrap(<<-MESSAGE)
163
+ wrapped_message = described_class.word_wrap(<<-MESSAGE.rstrip)
153
164
  1) Lorem ipsum dolor sit amet,
154
165
  consectetur adipiscing elit.
155
166
  Aenean luctus,
@@ -159,7 +170,7 @@ risus, non faucibus sem.
159
170
  2) And the beat goes on.
160
171
  MESSAGE
161
172
 
162
- expect(wrapped_message).to eq(<<-MESSAGE.strip)
173
+ expect(wrapped_message).to eq(<<-MESSAGE.rstrip)
163
174
  1) Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean
164
175
  luctus, ipsum sit amet efficitur feugiat, dolor mauris fringilla
165
176
  erat, sed posuere diam ex ut velit.
@@ -168,7 +179,7 @@ risus, non faucibus sem.
168
179
  end
169
180
 
170
181
  it "doesn't mess with indented blocks" do
171
- wrapped_message = described_class.word_wrap(<<-MESSAGE)
182
+ wrapped_message = described_class.word_wrap(<<-MESSAGE.rstrip)
172
183
  Some text is gonna go here.
173
184
 
174
185
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean luctus, ipsum sit amet efficitur feugiat, dolor mauris fringilla erat, sed posuere diam ex ut velit.
@@ -176,7 +187,7 @@ Some text is gonna go here.
176
187
  And now we return.
177
188
  MESSAGE
178
189
 
179
- expect(wrapped_message).to eq(<<-MESSAGE.strip)
190
+ expect(wrapped_message).to eq(<<-MESSAGE.rstrip)
180
191
  Some text is gonna go here.
181
192
 
182
193
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean luctus, ipsum sit amet efficitur feugiat, dolor mauris fringilla erat, sed posuere diam ex ut velit.
@@ -185,13 +196,57 @@ And now we return.
185
196
  MESSAGE
186
197
  end
187
198
 
188
- it "doesn't get stuck trying to wrap a line that can't be wrapped" do
189
- wrapped_message = described_class.word_wrap(<<-MESSAGE)
199
+ context "given a string with a word longer than the max character limit" do
200
+ context "which stands on its own" do
201
+ it "simply returns the string" do
202
+ wrapped_message = described_class.word_wrap(<<-MESSAGE.rstrip)
203
+ Foo bar baz and stuff and things Loremipsumdolorsitamet,consecteturadipiscingelit.Aeneanluctus,ipsumsitametefficiturfeugiat,
204
+ MESSAGE
205
+
206
+ expect(wrapped_message).to eq(<<-MESSAGE.rstrip)
207
+ Foo bar baz and stuff and things
190
208
  Loremipsumdolorsitamet,consecteturadipiscingelit.Aeneanluctus,ipsumsitametefficiturfeugiat,
191
- MESSAGE
209
+ MESSAGE
210
+ end
211
+ end
212
+
213
+ context "which is preceded by some text" do
214
+ it "leaves the word on its own line" do
215
+ wrapped_message = described_class.word_wrap(<<-MESSAGE.rstrip)
216
+ Foo bar baz and stuff and things Loremipsumdolorsitamet,consecteturadipiscingelit.Aeneanluctus,ipsumsitametefficiturfeugiat,
217
+ MESSAGE
218
+
219
+ expect(wrapped_message).to eq(<<-MESSAGE.rstrip)
220
+ Foo bar baz and stuff and things
221
+ Loremipsumdolorsitamet,consecteturadipiscingelit.Aeneanluctus,ipsumsitametefficiturfeugiat,
222
+ MESSAGE
223
+ end
224
+ end
192
225
 
193
- expect(wrapped_message).to eq(<<-MESSAGE.strip)
226
+ context "which is followed by some text" do
227
+ it "leaves the word on its own line" do
228
+ wrapped_message = described_class.word_wrap(<<-MESSAGE.rstrip)
229
+ Loremipsumdolorsitamet,consecteturadipiscingelit.Aeneanluctus,ipsumsitametefficiturfeugiat, and something goes after this
230
+ MESSAGE
231
+
232
+ expect(wrapped_message).to eq(<<-MESSAGE.rstrip)
194
233
  Loremipsumdolorsitamet,consecteturadipiscingelit.Aeneanluctus,ipsumsitametefficiturfeugiat,
195
- MESSAGE
234
+ and something goes after this
235
+ MESSAGE
236
+ end
237
+ end
238
+ end
239
+
240
+ context "when :indent is given" do
241
+ it "uses the given indentation level when determining where to wrap lines" do
242
+ wrapped_message = described_class.word_wrap(<<-MESSAGE.strip, indent: 2)
243
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean luctus, ipsum sit amet efficitur feugiat
244
+ MESSAGE
245
+
246
+ expect(wrapped_message).to eq(<<-MESSAGE.rstrip)
247
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean
248
+ luctus, ipsum sit amet efficitur feugiat
249
+ MESSAGE
250
+ end
196
251
  end
197
252
  end
@@ -1,17 +1,4 @@
1
- require_relative 'support/tests/current_bundle'
2
-
3
- Tests::CurrentBundle.instance.assert_appraisal!
4
-
5
- #---
6
-
7
- require File.expand_path('../support/unit/rails_application', __FILE__)
8
-
9
- $test_app = UnitTests::RailsApplication.new
10
- $test_app.create
11
- $test_app.load
12
-
13
- ENV['BUNDLE_GEMFILE'] ||= app.gemfile_path
14
- ENV['RAILS_ENV'] = 'test'
1
+ require_relative 'support/unit/load_environment'
15
2
 
16
3
  require 'rspec/rails'
17
4
  require 'shoulda-matchers'
@@ -23,14 +10,6 @@ Dir[ File.join(File.expand_path('../support/unit/**/*.rb', __FILE__)) ].sort.eac
23
10
  end
24
11
 
25
12
  RSpec.configure do |config|
26
- if config.respond_to?(:infer_spec_type_from_file_location!)
27
- config.infer_spec_type_from_file_location!
28
- end
29
-
30
- config.before(:all, type: :controller) do
31
- self.class.controller(ApplicationController) { }
32
- end
33
-
34
13
  UnitTests::ActiveModelHelpers.configure_example_group(config)
35
14
  UnitTests::ActiveModelVersions.configure_example_group(config)
36
15
  UnitTests::ActiveResourceBuilder.configure_example_group(config)
@@ -44,8 +23,17 @@ RSpec.configure do |config|
44
23
  UnitTests::ActiveModelVersions.configure_example_group(config)
45
24
  UnitTests::DatabaseHelpers.configure_example_group(config)
46
25
  UnitTests::ColumnTypeHelpers.configure_example_group(config)
26
+ UnitTests::ValidationMatcherScenarioHelpers.configure_example_group(config)
47
27
 
48
28
  config.include UnitTests::Matchers
29
+
30
+ config.infer_spec_type_from_file_location!
31
+ config.example_status_persistence_file_path = "spec/examples.txt"
32
+ config.alias_it_behaves_like_to(:it_supports, "it supports")
33
+
34
+ config.before(:all, type: :controller) do
35
+ self.class.controller(ApplicationController) { }
36
+ end
49
37
  end
50
38
 
51
39
  ActiveSupport::Deprecation.behavior = :stderr
@@ -0,0 +1,11 @@
1
+ {
2
+ "command": "ruby -rubygems -r./custom_plan -eZeus.go",
3
+
4
+ "plan": {
5
+ "boot": {
6
+ "test_environment": {
7
+ "rspec": []
8
+ }
9
+ }
10
+ }
11
+ }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shoulda-matchers
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.1
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tammer Saleh
@@ -14,20 +14,20 @@ authors:
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
- date: 2015-10-23 00:00:00.000000000 Z
17
+ date: 2016-01-10 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: activesupport
21
21
  requirement: !ruby/object:Gem::Requirement
22
22
  requirements:
23
- - - ">="
23
+ - - '>='
24
24
  - !ruby/object:Gem::Version
25
25
  version: 4.0.0
26
26
  type: :runtime
27
27
  prerelease: false
28
28
  version_requirements: !ruby/object:Gem::Requirement
29
29
  requirements:
30
- - - ">="
30
+ - - '>='
31
31
  - !ruby/object:Gem::Version
32
32
  version: 4.0.0
33
33
  description: Making tests easy on the fingers and eyes
@@ -36,11 +36,11 @@ executables: []
36
36
  extensions: []
37
37
  extra_rdoc_files: []
38
38
  files:
39
- - ".gitignore"
40
- - ".hound.yml"
41
- - ".hound_config/ruby.yml"
42
- - ".travis.yml"
43
- - ".yardopts"
39
+ - .gitignore
40
+ - .hound.yml
41
+ - .hound_config/ruby.yml
42
+ - .travis.yml
43
+ - .yardopts
44
44
  - Appraisals
45
45
  - CONTRIBUTING.md
46
46
  - Gemfile
@@ -49,6 +49,7 @@ files:
49
49
  - NEWS.md
50
50
  - README.md
51
51
  - Rakefile
52
+ - custom_plan.rb
52
53
  - doc_config/gh-pages/index.html.erb
53
54
  - doc_config/yard/setup.rb
54
55
  - doc_config/yard/templates/default/fulldoc/html/css/bootstrap.css
@@ -102,6 +103,14 @@ files:
102
103
  - lib/shoulda/matchers/active_model.rb
103
104
  - lib/shoulda/matchers/active_model/allow_mass_assignment_of_matcher.rb
104
105
  - lib/shoulda/matchers/active_model/allow_value_matcher.rb
106
+ - lib/shoulda/matchers/active_model/allow_value_matcher/attribute_changed_value_error.rb
107
+ - lib/shoulda/matchers/active_model/allow_value_matcher/attribute_does_not_exist_error.rb
108
+ - lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setter.rb
109
+ - lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setter_and_validator.rb
110
+ - lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setters.rb
111
+ - lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setters_and_validators.rb
112
+ - lib/shoulda/matchers/active_model/allow_value_matcher/successful_check.rb
113
+ - lib/shoulda/matchers/active_model/allow_value_matcher/successful_setting.rb
105
114
  - lib/shoulda/matchers/active_model/disallow_value_matcher.rb
106
115
  - lib/shoulda/matchers/active_model/errors.rb
107
116
  - lib/shoulda/matchers/active_model/have_secure_password_matcher.rb
@@ -112,7 +121,9 @@ files:
112
121
  - lib/shoulda/matchers/active_model/numericality_matchers/numeric_type_matcher.rb
113
122
  - lib/shoulda/matchers/active_model/numericality_matchers/odd_number_matcher.rb
114
123
  - lib/shoulda/matchers/active_model/numericality_matchers/only_integer_matcher.rb
115
- - lib/shoulda/matchers/active_model/strict_validator.rb
124
+ - lib/shoulda/matchers/active_model/qualifiers.rb
125
+ - lib/shoulda/matchers/active_model/qualifiers/ignore_interference_by_writer.rb
126
+ - lib/shoulda/matchers/active_model/qualifiers/ignoring_interference_by_writer.rb
116
127
  - lib/shoulda/matchers/active_model/validate_absence_of_matcher.rb
117
128
  - lib/shoulda/matchers/active_model/validate_acceptance_of_matcher.rb
118
129
  - lib/shoulda/matchers/active_model/validate_confirmation_of_matcher.rb
@@ -122,6 +133,7 @@ files:
122
133
  - lib/shoulda/matchers/active_model/validate_numericality_of_matcher.rb
123
134
  - lib/shoulda/matchers/active_model/validate_presence_of_matcher.rb
124
135
  - lib/shoulda/matchers/active_model/validation_matcher.rb
136
+ - lib/shoulda/matchers/active_model/validation_matcher/build_description.rb
125
137
  - lib/shoulda/matchers/active_model/validation_message_finder.rb
126
138
  - lib/shoulda/matchers/active_model/validator.rb
127
139
  - lib/shoulda/matchers/active_record.rb
@@ -233,7 +245,13 @@ files:
233
245
  - spec/support/tests/database_configuration_registry.rb
234
246
  - spec/support/tests/filesystem.rb
235
247
  - spec/support/tests/version.rb
248
+ - spec/support/unit/active_record/create_table.rb
249
+ - spec/support/unit/attribute.rb
236
250
  - spec/support/unit/capture.rb
251
+ - spec/support/unit/change_value.rb
252
+ - spec/support/unit/create_model_arguments/basic.rb
253
+ - spec/support/unit/create_model_arguments/has_many.rb
254
+ - spec/support/unit/create_model_arguments/uniqueness_matcher.rb
237
255
  - spec/support/unit/helpers/active_model_helpers.rb
238
256
  - spec/support/unit/helpers/active_model_versions.rb
239
257
  - spec/support/unit/helpers/active_record_versions.rb
@@ -248,18 +266,30 @@ files:
248
266
  - spec/support/unit/helpers/mailer_builder.rb
249
267
  - spec/support/unit/helpers/model_builder.rb
250
268
  - spec/support/unit/helpers/rails_versions.rb
269
+ - spec/support/unit/helpers/validation_matcher_scenario_helpers.rb
251
270
  - spec/support/unit/i18n.rb
271
+ - spec/support/unit/load_environment.rb
252
272
  - spec/support/unit/matchers/deprecate.rb
253
273
  - spec/support/unit/matchers/fail_with_message_including_matcher.rb
254
274
  - spec/support/unit/matchers/fail_with_message_matcher.rb
255
275
  - spec/support/unit/matchers/print_warning_including.rb
276
+ - spec/support/unit/model_creation_strategies/active_model.rb
277
+ - spec/support/unit/model_creation_strategies/active_record.rb
278
+ - spec/support/unit/model_creators.rb
279
+ - spec/support/unit/model_creators/active_model.rb
280
+ - spec/support/unit/model_creators/active_record.rb
281
+ - spec/support/unit/model_creators/active_record/has_and_belongs_to_many.rb
282
+ - spec/support/unit/model_creators/active_record/has_many.rb
283
+ - spec/support/unit/model_creators/active_record/uniqueness_matcher.rb
284
+ - spec/support/unit/model_creators/basic.rb
256
285
  - spec/support/unit/rails_application.rb
257
286
  - spec/support/unit/record_builder_with_i18n_validation_message.rb
258
287
  - spec/support/unit/record_validating_confirmation_builder.rb
259
288
  - spec/support/unit/record_with_different_error_attribute_builder.rb
289
+ - spec/support/unit/shared_examples/ignoring_interference_by_writer.rb
260
290
  - spec/support/unit/shared_examples/numerical_submatcher.rb
261
- - spec/support/unit/shared_examples/numerical_type_submatcher.rb
262
291
  - spec/support/unit/shared_examples/set_session_or_flash.rb
292
+ - spec/support/unit/validation_matcher_scenario.rb
263
293
  - spec/unit/shoulda/matchers/action_controller/callback_matcher_spec.rb
264
294
  - spec/unit/shoulda/matchers/action_controller/filter_param_matcher_spec.rb
265
295
  - spec/unit/shoulda/matchers/action_controller/permit_matcher_spec.rb
@@ -278,10 +308,6 @@ files:
278
308
  - spec/unit/shoulda/matchers/active_model/disallow_value_matcher_spec.rb
279
309
  - spec/unit/shoulda/matchers/active_model/have_secure_password_matcher_spec.rb
280
310
  - spec/unit/shoulda/matchers/active_model/helpers_spec.rb
281
- - spec/unit/shoulda/matchers/active_model/numericality_matchers/comparison_matcher_spec.rb
282
- - spec/unit/shoulda/matchers/active_model/numericality_matchers/even_number_matcher_spec.rb
283
- - spec/unit/shoulda/matchers/active_model/numericality_matchers/odd_number_matcher_spec.rb
284
- - spec/unit/shoulda/matchers/active_model/numericality_matchers/only_integer_matcher_spec.rb
285
311
  - spec/unit/shoulda/matchers/active_model/validate_absence_of_matcher_spec.rb
286
312
  - spec/unit/shoulda/matchers/active_model/validate_acceptance_of_matcher_spec.rb
287
313
  - spec/unit/shoulda/matchers/active_model/validate_confirmation_of_matcher_spec.rb
@@ -318,6 +344,7 @@ files:
318
344
  - spec/warnings_spy/reader.rb
319
345
  - spec/warnings_spy/reporter.rb
320
346
  - tasks/documentation.rb
347
+ - zeus.json
321
348
  homepage: http://thoughtbot.com/community/
322
349
  licenses:
323
350
  - MIT
@@ -328,17 +355,17 @@ require_paths:
328
355
  - lib
329
356
  required_ruby_version: !ruby/object:Gem::Requirement
330
357
  requirements:
331
- - - ">="
358
+ - - '>='
332
359
  - !ruby/object:Gem::Version
333
360
  version: 2.0.0
334
361
  required_rubygems_version: !ruby/object:Gem::Requirement
335
362
  requirements:
336
- - - ">="
363
+ - - '>='
337
364
  - !ruby/object:Gem::Version
338
365
  version: '0'
339
366
  requirements: []
340
367
  rubyforge_project:
341
- rubygems_version: 2.4.5.1
368
+ rubygems_version: 2.2.2
342
369
  signing_key:
343
370
  specification_version: 4
344
371
  summary: Making tests easy on the fingers and eyes
@@ -379,7 +406,13 @@ test_files:
379
406
  - spec/support/tests/database_configuration_registry.rb
380
407
  - spec/support/tests/filesystem.rb
381
408
  - spec/support/tests/version.rb
409
+ - spec/support/unit/active_record/create_table.rb
410
+ - spec/support/unit/attribute.rb
382
411
  - spec/support/unit/capture.rb
412
+ - spec/support/unit/change_value.rb
413
+ - spec/support/unit/create_model_arguments/basic.rb
414
+ - spec/support/unit/create_model_arguments/has_many.rb
415
+ - spec/support/unit/create_model_arguments/uniqueness_matcher.rb
383
416
  - spec/support/unit/helpers/active_model_helpers.rb
384
417
  - spec/support/unit/helpers/active_model_versions.rb
385
418
  - spec/support/unit/helpers/active_record_versions.rb
@@ -394,18 +427,30 @@ test_files:
394
427
  - spec/support/unit/helpers/mailer_builder.rb
395
428
  - spec/support/unit/helpers/model_builder.rb
396
429
  - spec/support/unit/helpers/rails_versions.rb
430
+ - spec/support/unit/helpers/validation_matcher_scenario_helpers.rb
397
431
  - spec/support/unit/i18n.rb
432
+ - spec/support/unit/load_environment.rb
398
433
  - spec/support/unit/matchers/deprecate.rb
399
434
  - spec/support/unit/matchers/fail_with_message_including_matcher.rb
400
435
  - spec/support/unit/matchers/fail_with_message_matcher.rb
401
436
  - spec/support/unit/matchers/print_warning_including.rb
437
+ - spec/support/unit/model_creation_strategies/active_model.rb
438
+ - spec/support/unit/model_creation_strategies/active_record.rb
439
+ - spec/support/unit/model_creators.rb
440
+ - spec/support/unit/model_creators/active_model.rb
441
+ - spec/support/unit/model_creators/active_record.rb
442
+ - spec/support/unit/model_creators/active_record/has_and_belongs_to_many.rb
443
+ - spec/support/unit/model_creators/active_record/has_many.rb
444
+ - spec/support/unit/model_creators/active_record/uniqueness_matcher.rb
445
+ - spec/support/unit/model_creators/basic.rb
402
446
  - spec/support/unit/rails_application.rb
403
447
  - spec/support/unit/record_builder_with_i18n_validation_message.rb
404
448
  - spec/support/unit/record_validating_confirmation_builder.rb
405
449
  - spec/support/unit/record_with_different_error_attribute_builder.rb
450
+ - spec/support/unit/shared_examples/ignoring_interference_by_writer.rb
406
451
  - spec/support/unit/shared_examples/numerical_submatcher.rb
407
- - spec/support/unit/shared_examples/numerical_type_submatcher.rb
408
452
  - spec/support/unit/shared_examples/set_session_or_flash.rb
453
+ - spec/support/unit/validation_matcher_scenario.rb
409
454
  - spec/unit/shoulda/matchers/action_controller/callback_matcher_spec.rb
410
455
  - spec/unit/shoulda/matchers/action_controller/filter_param_matcher_spec.rb
411
456
  - spec/unit/shoulda/matchers/action_controller/permit_matcher_spec.rb
@@ -424,10 +469,6 @@ test_files:
424
469
  - spec/unit/shoulda/matchers/active_model/disallow_value_matcher_spec.rb
425
470
  - spec/unit/shoulda/matchers/active_model/have_secure_password_matcher_spec.rb
426
471
  - spec/unit/shoulda/matchers/active_model/helpers_spec.rb
427
- - spec/unit/shoulda/matchers/active_model/numericality_matchers/comparison_matcher_spec.rb
428
- - spec/unit/shoulda/matchers/active_model/numericality_matchers/even_number_matcher_spec.rb
429
- - spec/unit/shoulda/matchers/active_model/numericality_matchers/odd_number_matcher_spec.rb
430
- - spec/unit/shoulda/matchers/active_model/numericality_matchers/only_integer_matcher_spec.rb
431
472
  - spec/unit/shoulda/matchers/active_model/validate_absence_of_matcher_spec.rb
432
473
  - spec/unit/shoulda/matchers/active_model/validate_acceptance_of_matcher_spec.rb
433
474
  - spec/unit/shoulda/matchers/active_model/validate_confirmation_of_matcher_spec.rb