instructure-active_model-better_errors 1.6.3.rails2.5 → 1.6.5.rails2.1
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.
- checksums.yaml +15 -0
- data/.gitignore +37 -0
- data/.rspec +4 -1
- data/.ruby-gemset +1 -0
- data/.travis.yml +5 -1
- data/Gemfile +9 -11
- data/Gemfile.devtools +66 -0
- data/Guardfile +32 -0
- data/LICENSE.txt +2 -0
- data/README.md +12 -10
- data/Rakefile +20 -49
- data/config/devtools.yml +4 -0
- data/config/flay.yml +3 -0
- data/config/flog.yml +2 -0
- data/config/mutant.yml +3 -0
- data/config/reek.yml +103 -0
- data/config/rubocop.yml +62 -0
- data/config/yardstick.yml +2 -0
- data/instructure-active_model-better_errors.gemspec +25 -112
- data/lib/active_model/better_errors/array_reporter.rb +14 -0
- data/lib/active_model/{error_collecting → better_errors}/emulation.rb +13 -6
- data/lib/active_model/{error_collecting → better_errors}/error_collection.rb +14 -6
- data/lib/active_model/{error_collecting → better_errors}/error_message.rb +12 -5
- data/lib/active_model/{error_collecting → better_errors}/error_message_set.rb +7 -2
- data/lib/active_model/{error_collecting → better_errors}/errors.rb +10 -3
- data/lib/active_model/better_errors/formatter.rb +26 -0
- data/lib/active_model/better_errors/hash_reporter.rb +14 -0
- data/lib/active_model/{error_collecting → better_errors}/human_array_reporter.rb +6 -1
- data/lib/active_model/{error_collecting → better_errors}/human_hash_reporter.rb +8 -3
- data/lib/active_model/{error_collecting → better_errors}/human_message_formatter.rb +16 -20
- data/lib/active_model/{error_collecting → better_errors}/human_message_reporter.rb +19 -12
- data/lib/active_model/{error_collecting → better_errors}/machine_array_reporter.rb +10 -2
- data/lib/active_model/{error_collecting → better_errors}/machine_hash_reporter.rb +10 -3
- data/lib/active_model/{error_collecting → better_errors}/message_reporter.rb +10 -5
- data/lib/active_model/{error_collecting → better_errors}/reporter.rb +7 -2
- data/lib/active_model/better_errors/version.rb +10 -0
- data/lib/active_model/better_errors.rb +67 -3
- data/spec/spec_helper.rb +21 -14
- data/spec/support/string_ext.rb +14 -0
- data/spec/{lib/active_model/error_collecting → unit/lib/active_model/better_errors}/emulation_spec.rb +8 -6
- data/spec/{lib/active_model/error_collecting → unit/lib/active_model/better_errors}/error_collection_spec.rb +66 -62
- data/spec/{lib/active_model/error_collecting → unit/lib/active_model/better_errors}/error_message_set_spec.rb +27 -25
- data/spec/unit/lib/active_model/better_errors/error_message_spec.rb +315 -0
- data/spec/unit/lib/active_model/better_errors/errors_spec.rb +98 -0
- data/spec/unit/lib/active_model/better_errors/human_array_reporter_spec.rb +39 -0
- data/spec/unit/lib/active_model/better_errors/human_hash_reporter_spec.rb +37 -0
- data/spec/{lib/active_model/error_collecting → unit/lib/active_model/better_errors}/human_message_formatter_spec.rb +13 -7
- data/spec/unit/lib/active_model/better_errors/human_message_reporter_spec.rb +58 -0
- data/spec/unit/lib/active_model/better_errors/machine_array_reporter_spec.rb +45 -0
- data/spec/unit/lib/active_model/better_errors/machine_hash_reporter_spec.rb +45 -0
- data/spec/unit/lib/active_model/better_errors_spec.rb +37 -0
- metadata +79 -171
- data/.document +0 -5
- data/VERSION +0 -1
- data/lib/active_model/error_collecting/array_reporter.rb +0 -9
- data/lib/active_model/error_collecting/hash_reporter.rb +0 -9
- data/lib/active_model/error_collecting.rb +0 -47
- data/spec/lib/active_model/better_errors_spec.rb +0 -7
- data/spec/lib/active_model/error_collecting/error_message_spec.rb +0 -309
- data/spec/lib/active_model/error_collecting/errors_spec.rb +0 -95
- data/spec/lib/active_model/error_collecting/human_array_reporter_spec.rb +0 -33
- data/spec/lib/active_model/error_collecting/human_hash_reporter_spec.rb +0 -32
- data/spec/lib/active_model/error_collecting/human_message_reporter_spec.rb +0 -61
- data/spec/lib/active_model/error_collecting/machine_array_reporter_spec.rb +0 -40
- data/spec/lib/active_model/error_collecting/machine_hash_reporter_spec.rb +0 -40
- data/spec/lib/active_model/error_collecting_spec.rb +0 -22
- data/test/integration.rb +0 -10
@@ -0,0 +1,315 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe ActiveModel::BetterErrors::ErrorMessage do
|
6
|
+
let(:klass) { ActiveModel::BetterErrors::ErrorMessage }
|
7
|
+
let(:attribute) { :name }
|
8
|
+
let(:base) { User.new }
|
9
|
+
subject(:error_message) { klass.build(base, attribute, message, options) }
|
10
|
+
|
11
|
+
describe '.normalize' do
|
12
|
+
subject { klass.normalize message }
|
13
|
+
context 'when message is a symbol' do
|
14
|
+
let(:message) { :invalid }
|
15
|
+
it { should == message }
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'when message is nil' do
|
19
|
+
let(:message) { nil }
|
20
|
+
it { should be nil }
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'when message is a string' do
|
24
|
+
let(:message) { 'bad' }
|
25
|
+
it { should == message }
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'when message is a proc' do
|
29
|
+
let(:message) { proc { 'bad' } }
|
30
|
+
it { should == 'bad' }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe '.identify' do
|
35
|
+
subject { klass.identify message, override }
|
36
|
+
context 'when message is a symbol and' do
|
37
|
+
let(:message) { :invalid }
|
38
|
+
|
39
|
+
context 'when override is a symbol' do
|
40
|
+
let(:override) { :not_good }
|
41
|
+
it { should == [:not_good, nil] }
|
42
|
+
end
|
43
|
+
|
44
|
+
context 'when override is nil' do
|
45
|
+
let(:override) { nil }
|
46
|
+
it { should == [:invalid, nil] }
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'when override is a string' do
|
50
|
+
let(:override) { 'invalid' }
|
51
|
+
it { should == [:invalid, 'invalid'] }
|
52
|
+
end
|
53
|
+
|
54
|
+
context 'when override is a proc' do
|
55
|
+
let(:override) { proc { 'Not good' } }
|
56
|
+
it { should == [:invalid, 'Not good'] }
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context 'when message is a string and' do
|
61
|
+
let(:message) { 'Invalid' }
|
62
|
+
|
63
|
+
context 'when override is a symbol' do
|
64
|
+
let(:override) { :not_good }
|
65
|
+
it { should == [:not_good, 'Invalid'] }
|
66
|
+
end
|
67
|
+
|
68
|
+
context 'when override is nil' do
|
69
|
+
let(:override) { nil }
|
70
|
+
it { should == [nil, 'Invalid'] }
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'when override is a string' do
|
74
|
+
let(:override) { 'not good' }
|
75
|
+
it { should == [nil, 'not good'] }
|
76
|
+
end
|
77
|
+
|
78
|
+
context 'when override is a proc' do
|
79
|
+
let(:override) { proc { 'Not Good' } }
|
80
|
+
it { should == [nil, 'Not Good'] }
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context 'when message is nil and' do
|
85
|
+
let(:message) { nil }
|
86
|
+
|
87
|
+
context 'when override is a symbol' do
|
88
|
+
let(:override) { :not_good }
|
89
|
+
it { should == [:not_good, nil] }
|
90
|
+
end
|
91
|
+
|
92
|
+
context 'when override is nil' do
|
93
|
+
let(:override) { nil }
|
94
|
+
it { should == [nil, nil] }
|
95
|
+
end
|
96
|
+
|
97
|
+
context 'when override is a string' do
|
98
|
+
let(:override) { 'not good' }
|
99
|
+
it { should == [nil, 'not good'] }
|
100
|
+
end
|
101
|
+
|
102
|
+
context 'when override is a proc' do
|
103
|
+
let(:override) { proc { 'Not Good' } }
|
104
|
+
it { should == [nil, 'Not Good'] }
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
context 'when message is a proc and' do
|
109
|
+
let(:message) { proc { 'invalid' } }
|
110
|
+
|
111
|
+
context 'when override is a symbol' do
|
112
|
+
let(:override) { :not_good }
|
113
|
+
it { should == [:not_good, 'invalid'] }
|
114
|
+
end
|
115
|
+
|
116
|
+
context 'when override is nil' do
|
117
|
+
let(:override) { nil }
|
118
|
+
it { should == [nil, 'invalid'] }
|
119
|
+
end
|
120
|
+
|
121
|
+
context 'when override is a string' do
|
122
|
+
let(:override) { 'not good' }
|
123
|
+
it { should == [nil, 'not good'] }
|
124
|
+
end
|
125
|
+
|
126
|
+
context 'when override is a proc' do
|
127
|
+
let(:override) { proc { 'Not Good' } }
|
128
|
+
it { should == [nil, 'Not Good'] }
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
describe '.build' do
|
134
|
+
context 'when message is a symbol and' do
|
135
|
+
let(:message) { :invalid }
|
136
|
+
|
137
|
+
context 'when options[:message] is a string' do
|
138
|
+
let(:options) { { message: 'Not Really Valid!' } }
|
139
|
+
its(:type) { should == message }
|
140
|
+
its(:message) { should == options[:message] }
|
141
|
+
end
|
142
|
+
|
143
|
+
context 'when options[:message] is a symbol' do
|
144
|
+
let(:options) { { message: :not_really_valid } }
|
145
|
+
its(:type) { should == options[:message] }
|
146
|
+
its(:message) { should be_nil }
|
147
|
+
end
|
148
|
+
|
149
|
+
context 'when options[:message] is nil' do
|
150
|
+
let(:options) { { message: nil } }
|
151
|
+
its(:type) { should == message }
|
152
|
+
its(:message) { should be_nil }
|
153
|
+
end
|
154
|
+
|
155
|
+
context 'when options[:message] is proc' do
|
156
|
+
let(:options) { { message: proc { 'Not Really Valid!' } } }
|
157
|
+
its(:type) { should == message }
|
158
|
+
its(:message) { should == options[:message].call }
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
context 'when message is a string and' do
|
163
|
+
let(:message) { 'Invalid!' }
|
164
|
+
|
165
|
+
context 'when options[:message] is a string' do
|
166
|
+
let(:options) { { message: 'Not Really Valid!' } }
|
167
|
+
its(:type) { should be_nil }
|
168
|
+
its(:message) { should == options[:message] }
|
169
|
+
end
|
170
|
+
|
171
|
+
context 'when options[:message] is a symbol' do
|
172
|
+
let(:options) { { message: :not_really_valid } }
|
173
|
+
its(:type) { should == options[:message] }
|
174
|
+
its(:message) { should == message }
|
175
|
+
end
|
176
|
+
|
177
|
+
context 'when options[:message] is nil' do
|
178
|
+
let(:options) { {} }
|
179
|
+
its(:type) { should be_nil }
|
180
|
+
its(:message) { should == message }
|
181
|
+
end
|
182
|
+
|
183
|
+
context 'when options[:message] is proc' do
|
184
|
+
let(:options) { { message: proc { 'Not Really Valid!' } } }
|
185
|
+
its(:type) { should be_nil }
|
186
|
+
its(:message) { should == options[:message].call }
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
context 'when message is a proc and' do
|
191
|
+
let(:message) { proc { 'Invalid!' } }
|
192
|
+
|
193
|
+
context 'when options[:message] is a string' do
|
194
|
+
let(:options) { { message: 'Not Really Valid!' } }
|
195
|
+
its(:type) { should be_nil }
|
196
|
+
its(:message) { should == options[:message] }
|
197
|
+
end
|
198
|
+
|
199
|
+
context 'when options[:message] is a symbol' do
|
200
|
+
let(:options) { { message: :not_really_valid } }
|
201
|
+
its(:type) { should == options[:message] }
|
202
|
+
its(:message) { should == message.call }
|
203
|
+
end
|
204
|
+
|
205
|
+
context 'when options[:message] is nil' do
|
206
|
+
let(:options) { {} }
|
207
|
+
its(:type) { should be_nil }
|
208
|
+
its(:message) { should == message.call }
|
209
|
+
end
|
210
|
+
|
211
|
+
context 'when options[:message] is proc' do
|
212
|
+
let(:options) { { message: proc { 'Not Really Valid!' } } }
|
213
|
+
its(:type) { should be_nil }
|
214
|
+
its(:message) { should == options[:message].call }
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
context 'when message is nil and' do
|
219
|
+
let(:message) { nil }
|
220
|
+
|
221
|
+
context 'when options[:message] is a string' do
|
222
|
+
let(:options) { { message: 'Not Really Valid!' } }
|
223
|
+
its(:type) { should be_nil }
|
224
|
+
its(:message) { should == options[:message] }
|
225
|
+
end
|
226
|
+
|
227
|
+
context 'when options[:message] is a symbol' do
|
228
|
+
let(:options) { { message: :not_really_valid } }
|
229
|
+
its(:type) { should == options[:message] }
|
230
|
+
its(:message) { should be_nil }
|
231
|
+
end
|
232
|
+
|
233
|
+
context 'when options[:message] is nil' do
|
234
|
+
let(:options) { {} }
|
235
|
+
its(:type) { should be_nil }
|
236
|
+
its(:message) { should be_nil }
|
237
|
+
end
|
238
|
+
|
239
|
+
context 'when options[:message] is proc' do
|
240
|
+
let(:options) { { message: proc { 'Not Really Valid!' } } }
|
241
|
+
its(:type) { should be_nil }
|
242
|
+
its(:message) { should == options[:message].call }
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
[
|
247
|
+
:if, :unless, :on, :allow_nil, :allow_blank, :strict, :message
|
248
|
+
].each do |field|
|
249
|
+
context "when options includes :#{field}" do
|
250
|
+
let(:message) { :invalid }
|
251
|
+
let(:options) { {} }
|
252
|
+
before { options[field] = proc {} }
|
253
|
+
its(:options) { should == {} }
|
254
|
+
end
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
describe '#initialize' do
|
259
|
+
let(:message) { :invalid }
|
260
|
+
let(:options) { { message: 'Invalid!', count: 12 } }
|
261
|
+
|
262
|
+
its(:options) { should == { count: 12 } }
|
263
|
+
its(:attribute) { should == attribute }
|
264
|
+
end
|
265
|
+
|
266
|
+
describe '#to_hash' do
|
267
|
+
let(:message) { :invalid }
|
268
|
+
let(:options) { {} }
|
269
|
+
let(:expected) do
|
270
|
+
{ attribute: attribute, type: :invalid, message: nil, options: {} }
|
271
|
+
end
|
272
|
+
|
273
|
+
its(:to_hash) { should == expected }
|
274
|
+
end
|
275
|
+
|
276
|
+
describe '#as_json' do
|
277
|
+
let(:message) { :invalid }
|
278
|
+
let(:options) { {} }
|
279
|
+
let(:expected) do
|
280
|
+
{ attribute: attribute, type: :invalid, message: nil, options: {} }
|
281
|
+
end
|
282
|
+
|
283
|
+
it 'should respond to as_json taking json arguments' do
|
284
|
+
subject.as_json(test: :arguments).should == expected
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
288
|
+
describe '#<=>' do
|
289
|
+
subject { e1 <=> e2 }
|
290
|
+
|
291
|
+
context 'when attribute is different' do
|
292
|
+
let(:e1) { klass.build base, :name, :invalid }
|
293
|
+
let(:e2) { klass.build base, :name1, :invalid }
|
294
|
+
it { should be_nil }
|
295
|
+
end
|
296
|
+
|
297
|
+
context 'when type is different' do
|
298
|
+
let(:e1) { klass.build base, :name, :invalid }
|
299
|
+
let(:e2) { klass.build base, :name, :invalid1 }
|
300
|
+
it { should be_nil }
|
301
|
+
end
|
302
|
+
|
303
|
+
context 'when message is different' do
|
304
|
+
let(:e1) { klass.build base, :name, :invalid, message: 'a' }
|
305
|
+
let(:e2) { klass.build base, :name, :invalid, message: 'b' }
|
306
|
+
it { should be_nil }
|
307
|
+
end
|
308
|
+
|
309
|
+
context 'when it is the same' do
|
310
|
+
let(:e1) { klass.build base, :name, :invalid }
|
311
|
+
let(:e2) { klass.build base, :name, :invalid }
|
312
|
+
it { should == 0 }
|
313
|
+
end
|
314
|
+
end
|
315
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe ActiveModel::BetterErrors::Errors do
|
6
|
+
subject(:instance) { klass.new base }
|
7
|
+
let(:klass) { ActiveModel::BetterErrors::Errors }
|
8
|
+
let(:base) { User.new }
|
9
|
+
let(:reporter_name) { :mock }
|
10
|
+
let(:mock_reporter) do
|
11
|
+
Class.new do
|
12
|
+
def initialize(collection)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
before { ActiveModel::BetterErrors.set_reporter(:mock, mock_reporter) }
|
18
|
+
after { ActiveModel::BetterErrors.set_reporter(:mock, nil) }
|
19
|
+
|
20
|
+
describe '#initialize' do
|
21
|
+
its(:base) { should be base }
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '#error_collection' do
|
25
|
+
subject { instance.error_collection }
|
26
|
+
it { should be_a ActiveModel::BetterErrors::ErrorCollection }
|
27
|
+
its(:base) { should be base }
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#message_reporter' do
|
31
|
+
subject { instance.message_reporter }
|
32
|
+
before do
|
33
|
+
instance
|
34
|
+
.should_receive(:get_reporter)
|
35
|
+
.with(:message)
|
36
|
+
.and_return(mock_reporter)
|
37
|
+
end
|
38
|
+
|
39
|
+
it { should be mock_reporter }
|
40
|
+
end
|
41
|
+
|
42
|
+
describe '#hash_reporter' do
|
43
|
+
subject { instance.hash_reporter }
|
44
|
+
before do
|
45
|
+
instance
|
46
|
+
.should_receive(:get_reporter)
|
47
|
+
.with(:hash)
|
48
|
+
.and_return(mock_reporter)
|
49
|
+
end
|
50
|
+
|
51
|
+
it { should be mock_reporter }
|
52
|
+
end
|
53
|
+
|
54
|
+
describe '#array_reporter' do
|
55
|
+
subject { instance.array_reporter }
|
56
|
+
before do
|
57
|
+
instance
|
58
|
+
.should_receive(:get_reporter)
|
59
|
+
.with(:array)
|
60
|
+
.and_return(mock_reporter)
|
61
|
+
end
|
62
|
+
|
63
|
+
it { should be mock_reporter }
|
64
|
+
end
|
65
|
+
|
66
|
+
describe '#set_reporter' do
|
67
|
+
before { instance.get_reporter(:mock) }
|
68
|
+
it 'should set the reporter class' do
|
69
|
+
instance.set_reporter reporter_name, mock_reporter
|
70
|
+
reporter_classes = instance.instance_variable_get(:@reporter_classes)
|
71
|
+
reporter_classes[reporter_name.to_s].should == mock_reporter
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'should delete old reporter instance' do
|
75
|
+
reporters = instance.instance_variable_get(:@reporters)
|
76
|
+
reporters[reporter_name] = double
|
77
|
+
instance.set_reporter reporter_name, mock_reporter
|
78
|
+
reporters.key?(reporter_name.to_s).should be false
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe '#get_reporter_class' do
|
83
|
+
subject { instance.get_reporter_class(reporter_name) }
|
84
|
+
before { instance.set_reporter reporter_name, mock_reporter }
|
85
|
+
it { should == mock_reporter }
|
86
|
+
end
|
87
|
+
|
88
|
+
describe '#get_reporter' do
|
89
|
+
subject { instance.get_reporter(reporter_name) }
|
90
|
+
before { instance.set_reporter reporter_name, mock_reporter }
|
91
|
+
it { should be_a mock_reporter }
|
92
|
+
end
|
93
|
+
|
94
|
+
describe '#reporter_classes' do
|
95
|
+
subject { instance.reporter_classes }
|
96
|
+
it { should == ::ActiveModel::BetterErrors.reporters }
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe ActiveModel::BetterErrors::HumanArrayReporter do
|
6
|
+
subject { reporter }
|
7
|
+
let(:reporter) { klass.new collection }
|
8
|
+
let(:klass) { ActiveModel::BetterErrors::HumanArrayReporter }
|
9
|
+
let(:collection) { ActiveModel::BetterErrors::ErrorCollection.new base }
|
10
|
+
let(:base) { User.new }
|
11
|
+
|
12
|
+
describe '#initialize' do
|
13
|
+
its(:collection) { should be collection }
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#base' do
|
17
|
+
its(:base) { should be base }
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#to_a' do
|
21
|
+
subject { reporter.to_a }
|
22
|
+
let(:expected) do
|
23
|
+
%w(foo bar)
|
24
|
+
end
|
25
|
+
|
26
|
+
before do
|
27
|
+
message_reporter = double
|
28
|
+
ActiveModel::BetterErrors::HumanMessageReporter
|
29
|
+
.should_receive(:new)
|
30
|
+
.and_return(message_reporter)
|
31
|
+
|
32
|
+
message_reporter
|
33
|
+
.should_receive(:full_messages)
|
34
|
+
.and_return(expected)
|
35
|
+
end
|
36
|
+
|
37
|
+
it { should == expected }
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe ActiveModel::BetterErrors::HumanHashReporter do
|
6
|
+
subject { reporter }
|
7
|
+
let(:reporter) { klass.new collection }
|
8
|
+
let(:klass) { ActiveModel::BetterErrors::HumanHashReporter }
|
9
|
+
let(:collection) { ActiveModel::BetterErrors::ErrorCollection.new base }
|
10
|
+
let(:base) { User.new }
|
11
|
+
|
12
|
+
describe '#initialize' do
|
13
|
+
its(:collection) { should be collection }
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#base' do
|
17
|
+
its(:base) { should be base }
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#to_hash' do
|
21
|
+
subject { reporter.to_hash }
|
22
|
+
let(:expected) do
|
23
|
+
{
|
24
|
+
first_name: ['is invalid', "can't be empty"],
|
25
|
+
last_name: ['is invalid']
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
before do
|
30
|
+
collection[:first_name] << :invalid
|
31
|
+
collection[:first_name] << :empty
|
32
|
+
collection[:last_name] << :invalid
|
33
|
+
end
|
34
|
+
|
35
|
+
it { should == expected }
|
36
|
+
end
|
37
|
+
end
|
@@ -1,12 +1,18 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
|
-
describe ActiveModel::
|
5
|
+
describe ActiveModel::BetterErrors::HumanMessageFormatter do
|
4
6
|
subject(:formatter) { klass.new base, error_message }
|
5
|
-
let(:klass) { ActiveModel::
|
7
|
+
let(:klass) { ActiveModel::BetterErrors::HumanMessageFormatter }
|
6
8
|
let(:base) { User.new }
|
7
|
-
let(:error_message)
|
9
|
+
let(:error_message) do
|
10
|
+
ActiveModel::BetterErrors::ErrorMessage.build(
|
11
|
+
base, :first_name, :invalid
|
12
|
+
)
|
13
|
+
end
|
8
14
|
|
9
|
-
describe
|
15
|
+
describe '#initialize' do
|
10
16
|
its(:base) { should be base }
|
11
17
|
its(:error_message) { should be error_message }
|
12
18
|
its(:attribute) { should be error_message.attribute }
|
@@ -15,8 +21,8 @@ describe ActiveModel::ErrorCollecting::HumanMessageFormatter do
|
|
15
21
|
its(:options) { should be error_message.options }
|
16
22
|
end
|
17
23
|
|
18
|
-
describe
|
24
|
+
describe '#format_message' do
|
19
25
|
subject { formatter.format_message }
|
20
|
-
it { should ==
|
26
|
+
it { should == 'is invalid' }
|
21
27
|
end
|
22
|
-
end
|
28
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe ActiveModel::BetterErrors::HumanMessageReporter do
|
6
|
+
subject { reporter }
|
7
|
+
let(:reporter) { klass.new collection }
|
8
|
+
let(:klass) { ActiveModel::BetterErrors::HumanMessageReporter }
|
9
|
+
let(:collection) { ActiveModel::BetterErrors::ErrorCollection.new base }
|
10
|
+
let(:base) { User.new }
|
11
|
+
|
12
|
+
describe '#initialize' do
|
13
|
+
its(:collection) { should be collection }
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#base' do
|
17
|
+
its(:base) { should be base }
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#full_message' do
|
21
|
+
subject { reporter.full_message attribute, message }
|
22
|
+
let(:attribute) { :first_name }
|
23
|
+
let(:message) { 'is invalid' }
|
24
|
+
|
25
|
+
it { should == 'First name is invalid' }
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '#full_messages' do
|
29
|
+
subject { reporter.full_messages }
|
30
|
+
let(:expected) do
|
31
|
+
[
|
32
|
+
'First name is invalid',
|
33
|
+
"First name can't be empty",
|
34
|
+
'Last name is invalid'
|
35
|
+
]
|
36
|
+
end
|
37
|
+
|
38
|
+
before do
|
39
|
+
collection[:first_name] << :invalid
|
40
|
+
collection[:first_name] << :empty
|
41
|
+
collection[:last_name] << :invalid
|
42
|
+
end
|
43
|
+
|
44
|
+
it { should == expected }
|
45
|
+
end
|
46
|
+
|
47
|
+
describe '#generate_message' do
|
48
|
+
subject { reporter.generate_message attribute, type, options }
|
49
|
+
let(:attribute) { :first_name }
|
50
|
+
|
51
|
+
context 'when passing symbols as message' do
|
52
|
+
let(:type) { :too_short }
|
53
|
+
let(:options) { { count: 3 } }
|
54
|
+
let(:expected) { 'is too short (minimum is 3 characters)' }
|
55
|
+
it { should == expected }
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe ActiveModel::BetterErrors::MachineArrayReporter do
|
6
|
+
subject { reporter }
|
7
|
+
let(:reporter) { klass.new collection }
|
8
|
+
let(:klass) { ActiveModel::BetterErrors::MachineArrayReporter }
|
9
|
+
let(:collection) { ActiveModel::BetterErrors::ErrorCollection.new base }
|
10
|
+
let(:base) { User.new }
|
11
|
+
|
12
|
+
describe '#initialize' do
|
13
|
+
its(:collection) { should be collection }
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#base' do
|
17
|
+
its(:base) { should be base }
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#to_a' do
|
21
|
+
subject { reporter.to_a }
|
22
|
+
|
23
|
+
before do
|
24
|
+
collection[:first_name] << :invalid
|
25
|
+
collection[:first_name] << [:too_short, { count: 3 }]
|
26
|
+
collection[:last_name] << :invalid
|
27
|
+
end
|
28
|
+
|
29
|
+
let(:expected) do
|
30
|
+
[{
|
31
|
+
attribute: 'first_name',
|
32
|
+
type: :invalid
|
33
|
+
}, {
|
34
|
+
attribute: 'first_name',
|
35
|
+
type: :too_short,
|
36
|
+
options: { count: 3 }
|
37
|
+
}, {
|
38
|
+
attribute: 'last_name',
|
39
|
+
type: :invalid
|
40
|
+
}]
|
41
|
+
end
|
42
|
+
|
43
|
+
it { should == expected }
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe ActiveModel::BetterErrors::MachineHashReporter do
|
6
|
+
subject { reporter }
|
7
|
+
let(:reporter) { klass.new collection }
|
8
|
+
let(:klass) { ActiveModel::BetterErrors::MachineHashReporter }
|
9
|
+
let(:collection) { ActiveModel::BetterErrors::ErrorCollection.new base }
|
10
|
+
let(:base) { User.new }
|
11
|
+
|
12
|
+
describe '#initialize' do
|
13
|
+
its(:collection) { should be collection }
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#base' do
|
17
|
+
its(:base) { should be base }
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#to_hash' do
|
21
|
+
subject { reporter.to_hash }
|
22
|
+
|
23
|
+
before do
|
24
|
+
collection[:first_name] << :invalid
|
25
|
+
collection[:first_name] << [:too_short, { count: 3 }]
|
26
|
+
collection[:last_name] << :invalid
|
27
|
+
end
|
28
|
+
|
29
|
+
let(:expected) do
|
30
|
+
{
|
31
|
+
first_name: [{
|
32
|
+
type: :invalid
|
33
|
+
}, {
|
34
|
+
type: :too_short,
|
35
|
+
options: { count: 3 }
|
36
|
+
}],
|
37
|
+
last_name: [{
|
38
|
+
type: :invalid
|
39
|
+
}]
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
43
|
+
it { should == expected }
|
44
|
+
end
|
45
|
+
end
|