active_model-better_errors 1.6.3 → 1.6.5

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 (71) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +37 -0
  3. data/.rspec +4 -1
  4. data/.ruby-gemset +1 -0
  5. data/.travis.yml +5 -1
  6. data/Gemfile +9 -13
  7. data/Gemfile.devtools +66 -0
  8. data/Guardfile +32 -0
  9. data/LICENSE.txt +2 -0
  10. data/README.md +12 -10
  11. data/Rakefile +20 -49
  12. data/active_model-better_errors.gemspec +27 -107
  13. data/config/devtools.yml +4 -0
  14. data/config/flay.yml +3 -0
  15. data/config/flog.yml +2 -0
  16. data/config/mutant.yml +3 -0
  17. data/config/reek.yml +103 -0
  18. data/config/rubocop.yml +62 -0
  19. data/config/yardstick.yml +2 -0
  20. data/lib/active_model/better_errors.rb +64 -4
  21. data/lib/active_model/better_errors/array_reporter.rb +14 -0
  22. data/lib/active_model/{error_collecting → better_errors}/emulation.rb +15 -8
  23. data/lib/active_model/{error_collecting → better_errors}/error_collection.rb +14 -6
  24. data/lib/active_model/{error_collecting → better_errors}/error_message.rb +16 -5
  25. data/lib/active_model/{error_collecting → better_errors}/error_message_set.rb +7 -2
  26. data/lib/active_model/{error_collecting → better_errors}/errors.rb +10 -3
  27. data/lib/active_model/better_errors/formatter.rb +26 -0
  28. data/lib/active_model/better_errors/hash_reporter.rb +14 -0
  29. data/lib/active_model/{error_collecting → better_errors}/human_array_reporter.rb +6 -1
  30. data/lib/active_model/{error_collecting → better_errors}/human_hash_reporter.rb +8 -3
  31. data/lib/active_model/better_errors/human_message_formatter.rb +66 -0
  32. data/lib/active_model/{error_collecting → better_errors}/human_message_reporter.rb +19 -12
  33. data/lib/active_model/{error_collecting → better_errors}/machine_array_reporter.rb +10 -2
  34. data/lib/active_model/{error_collecting → better_errors}/machine_hash_reporter.rb +10 -3
  35. data/lib/active_model/{error_collecting → better_errors}/message_reporter.rb +10 -5
  36. data/lib/active_model/{error_collecting → better_errors}/reporter.rb +7 -2
  37. data/lib/active_model/better_errors/version.rb +10 -0
  38. data/spec/spec_helper.rb +19 -10
  39. data/spec/support/i18n_deprecation_silence.rb +4 -0
  40. data/spec/support/models.rb +11 -4
  41. data/spec/support/string_ext.rb +14 -0
  42. data/spec/{lib/active_model/error_collecting → unit/lib/active_model/better_errors}/emulation_spec.rb +8 -6
  43. data/spec/{lib/active_model/error_collecting → unit/lib/active_model/better_errors}/error_collection_spec.rb +66 -62
  44. data/spec/{lib/active_model/error_collecting → unit/lib/active_model/better_errors}/error_message_set_spec.rb +27 -25
  45. data/spec/unit/lib/active_model/better_errors/error_message_spec.rb +315 -0
  46. data/spec/unit/lib/active_model/better_errors/errors_spec.rb +98 -0
  47. data/spec/unit/lib/active_model/better_errors/human_array_reporter_spec.rb +39 -0
  48. data/spec/unit/lib/active_model/better_errors/human_hash_reporter_spec.rb +37 -0
  49. data/spec/{lib/active_model/error_collecting → unit/lib/active_model/better_errors}/human_message_formatter_spec.rb +13 -7
  50. data/spec/unit/lib/active_model/better_errors/human_message_reporter_spec.rb +65 -0
  51. data/spec/unit/lib/active_model/better_errors/machine_array_reporter_spec.rb +45 -0
  52. data/spec/unit/lib/active_model/better_errors/machine_hash_reporter_spec.rb +45 -0
  53. data/spec/unit/lib/active_model/better_errors_spec.rb +37 -0
  54. metadata +98 -143
  55. data/.document +0 -5
  56. data/VERSION +0 -1
  57. data/lib/active_model/error_collecting.rb +0 -49
  58. data/lib/active_model/error_collecting/array_reporter.rb +0 -9
  59. data/lib/active_model/error_collecting/core_ext.rb +0 -6
  60. data/lib/active_model/error_collecting/hash_reporter.rb +0 -9
  61. data/lib/active_model/error_collecting/human_message_formatter.rb +0 -58
  62. data/spec/lib/active_model/better_errors_spec.rb +0 -7
  63. data/spec/lib/active_model/error_collecting/error_message_spec.rb +0 -293
  64. data/spec/lib/active_model/error_collecting/errors_spec.rb +0 -95
  65. data/spec/lib/active_model/error_collecting/human_array_reporter_spec.rb +0 -33
  66. data/spec/lib/active_model/error_collecting/human_hash_reporter_spec.rb +0 -32
  67. data/spec/lib/active_model/error_collecting/human_message_reporter_spec.rb +0 -61
  68. data/spec/lib/active_model/error_collecting/machine_array_reporter_spec.rb +0 -40
  69. data/spec/lib/active_model/error_collecting/machine_hash_reporter_spec.rb +0 -40
  70. data/spec/lib/active_model/error_collecting_spec.rb +0 -22
  71. data/test/integration.rb +0 -10
data/.document DELETED
@@ -1,5 +0,0 @@
1
- lib/**/*.rb
2
- bin/*
3
- -
4
- features/**/*.feature
5
- LICENSE.txt
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 1.6.3
@@ -1,49 +0,0 @@
1
- require 'active_model/error_collecting/error_message'
2
- require 'active_model/error_collecting/error_message_set'
3
- require 'active_model/error_collecting/error_collection'
4
-
5
- require 'active_model/error_collecting/reporter'
6
- require 'active_model/error_collecting/message_reporter'
7
- require 'active_model/error_collecting/hash_reporter'
8
- require 'active_model/error_collecting/array_reporter'
9
-
10
- require 'active_model/error_collecting/human_message_formatter'
11
- require 'active_model/error_collecting/human_message_reporter'
12
- require 'active_model/error_collecting/human_hash_reporter'
13
- require 'active_model/error_collecting/human_array_reporter'
14
-
15
- require 'active_model/error_collecting/machine_hash_reporter'
16
- require 'active_model/error_collecting/machine_array_reporter'
17
-
18
- require 'active_model/error_collecting/emulation'
19
- require 'active_model/error_collecting/errors'
20
-
21
- require 'active_model/error_collecting/core_ext'
22
-
23
- module ActiveModel
24
- module ErrorCollecting
25
- class << self
26
- def set_reporter(name, reporter)
27
- name = name.to_s
28
- @reporter_maps ||= {}
29
- return @reporter_maps.delete(name) unless reporter
30
- @reporter_maps[name] = get_reporter_class(name, reporter)
31
- end
32
-
33
- def reporters
34
- @reporter_maps ||= {}
35
- @reporter_maps.clone
36
- end
37
-
38
- def get_reporter_class(name, reporter)
39
- return reporter if reporter.is_a? Class
40
- class_name = "active_model/error_collecting/#{reporter}_#{name}_reporter"
41
- class_name.classify.constantize
42
- end
43
- end
44
-
45
- set_reporter :message, :human
46
- set_reporter :array, :human
47
- set_reporter :hash, :human
48
- end
49
- end
@@ -1,9 +0,0 @@
1
- module ActiveModel
2
- module ErrorCollecting
3
- class ArrayReporter < Reporter
4
- def to_a
5
- raise "abstract method"
6
- end
7
- end
8
- end
9
- end
@@ -1,6 +0,0 @@
1
- class String
2
- def ==(other)
3
- return super other.to_s if other.is_a? ActiveModel::ErrorCollecting::ErrorMessage
4
- super
5
- end
6
- end
@@ -1,9 +0,0 @@
1
- module ActiveModel
2
- module ErrorCollecting
3
- class HashReporter < Reporter
4
- def to_hash
5
- raise "abstract method"
6
- end
7
- end
8
- end
9
- end
@@ -1,58 +0,0 @@
1
- module ActiveModel
2
- module ErrorCollecting
3
- class HumanMessageFormatter
4
- extend Forwardable
5
-
6
- def_delegators :@error_message, :attribute, :message, :options
7
-
8
- attr_reader :base, :error_message
9
-
10
- def initialize(base, error_message)
11
- @base, @error_message = base, error_message
12
- end
13
-
14
- def type
15
- @error_message.type || :invalid
16
- end
17
-
18
- def format_message
19
- return message if message && error_message.type.nil?
20
-
21
- keys = i18n_keys
22
- key = keys.shift
23
-
24
- value = (attribute != :base ? base.send(:read_attribute_for_validation, attribute) : nil)
25
-
26
- options = {
27
- :default => keys,
28
- :model => base.class.model_name.human,
29
- :attribute => base.class.human_attribute_name(attribute),
30
- :value => value
31
- }.merge(self.options)
32
-
33
- I18n.translate key, options
34
- end
35
-
36
- private
37
-
38
- def i18n_keys
39
- if base.class.respond_to?(:i18n_scope)
40
- keys = base.class.lookup_ancestors.map do |klass|
41
- [ :"#{base.class.i18n_scope}.errors.models.#{klass.model_name.i18n_key}.attributes.#{attribute}.#{type}",
42
- :"#{base.class.i18n_scope}.errors.models.#{klass.model_name.i18n_key}.#{type}" ]
43
- end
44
- else
45
- keys = []
46
- end
47
- keys << message
48
- keys << :"#{base.class.i18n_scope}.errors.messages.#{type}" if base.class.respond_to?(:i18n_scope)
49
- keys << :"errors.attributes.#{attribute}.#{type}"
50
- keys << :"errors.messages.#{type}"
51
-
52
- keys.compact!
53
- keys.flatten!
54
- keys
55
- end
56
- end
57
- end
58
- end
@@ -1,7 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "ActiveModel Better Errors" do
4
- it "overrides ActiveModel Validations" do
5
- User.new.errors.should be_a ActiveModel::ErrorCollecting::Errors
6
- end
7
- end
@@ -1,293 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ActiveModel::ErrorCollecting::ErrorMessage do
4
- let(:klass) { ActiveModel::ErrorCollecting::ErrorMessage }
5
- let(:attribute) { :name }
6
- let(:base) { User.new }
7
- subject(:error_message) { klass.build(base, attribute, message, options) }
8
-
9
- describe ".normalize" do
10
- subject { klass.normalize message }
11
- context "when message is a symbol" do
12
- let(:message) { :invalid }
13
- it { should == message }
14
- end
15
-
16
- context "when message is nil" do
17
- let(:message) { nil }
18
- it { should be nil }
19
- end
20
-
21
- context "when message is a string" do
22
- let(:message) { 'bad' }
23
- it { should == message }
24
- end
25
-
26
- context "when message is a proc" do
27
- let(:message) { proc { 'bad' } }
28
- it { should == 'bad' }
29
- end
30
- end
31
-
32
- describe ".identify" do
33
- subject { klass.identify message, override }
34
- context "when message is a symbol and" do
35
- let(:message) { :invalid }
36
-
37
- context "when override is a symbol" do
38
- let(:override) { :not_good }
39
- it { should == [:not_good, nil] }
40
- end
41
-
42
- context "when override is nil" do
43
- let(:override) { nil }
44
- it { should == [:invalid, nil] }
45
- end
46
-
47
- context "when override is a string" do
48
- let(:override) { "invalid" }
49
- it { should == [:invalid, "invalid"] }
50
- end
51
-
52
- context "when override is a proc" do
53
- let(:override) { proc { "Not good" } }
54
- it { should == [:invalid, "Not good"] }
55
- end
56
- end
57
-
58
- context "when message is a string and" do
59
- let(:message) { "Invalid" }
60
-
61
- context "when override is a symbol" do
62
- let(:override) { :not_good }
63
- it { should == [:not_good, "Invalid"] }
64
- end
65
-
66
- context "when override is nil" do
67
- let(:override) { nil }
68
- it { should == [nil, "Invalid"] }
69
- end
70
-
71
- context "when override is a string" do
72
- let(:override) { "not good" }
73
- it { should == [nil, "not good"] }
74
- end
75
-
76
- context "when override is a proc" do
77
- let(:override) { proc { "Not Good" } }
78
- it { should == [nil, "Not Good"] }
79
- end
80
- end
81
-
82
- context "when message is nil and" do
83
- let(:message) { nil }
84
-
85
- context "when override is a symbol" do
86
- let(:override) { :not_good }
87
- it { should == [:not_good, nil] }
88
- end
89
-
90
- context "when override is nil" do
91
- let(:override) { nil }
92
- it { should == [nil, nil] }
93
- end
94
-
95
- context "when override is a string" do
96
- let(:override) { "not good" }
97
- it { should == [nil, "not good"] }
98
- end
99
-
100
- context "when override is a proc" do
101
- let(:override) { proc { "Not Good" } }
102
- it { should == [nil, "Not Good"] }
103
- end
104
- end
105
-
106
- context "when message is a proc and" do
107
- let(:message) { proc {"invalid"} }
108
-
109
- context "when override is a symbol" do
110
- let(:override) { :not_good }
111
- it { should == [:not_good, "invalid"] }
112
- end
113
-
114
- context "when override is nil" do
115
- let(:override) { nil }
116
- it { should == [nil, "invalid"] }
117
- end
118
-
119
- context "when override is a string" do
120
- let(:override) { "not good" }
121
- it { should == [nil, "not good"] }
122
- end
123
-
124
- context "when override is a proc" do
125
- let(:override) { proc { "Not Good" } }
126
- it { should == [nil, "Not Good"] }
127
- end
128
- end
129
- end
130
-
131
-
132
- describe ".build" do
133
- context "when message is a symbol and" do
134
- let(:message) { :invalid }
135
-
136
- context "when options[:message] is a string" do
137
- let(:options) { { message: "Not Really Valid!" } }
138
- its(:type) { should == message }
139
- its(:message) { should == options[:message] }
140
- end
141
-
142
- context "when options[:message] is a symbol" do
143
- let(:options) { { message: :not_really_valid } }
144
- its(:type) { should == options[:message] }
145
- its(:message) { should == nil }
146
- end
147
-
148
- context "when options[:message] is nil" do
149
- let(:options) { { message: nil } }
150
- its(:type) { should == message }
151
- its(:message) { should == nil }
152
- end
153
-
154
- context "when options[:message] is proc" do
155
- let(:options) { { message: proc { "Not Really Valid!" } } }
156
- its(:type) { should == message }
157
- its(:message) { should == options[:message].call }
158
- end
159
- end
160
-
161
- context "when message is a string and" do
162
- let(:message) { 'Invalid!' }
163
-
164
- context "when options[:message] is a string" do
165
- let(:options) { { message: "Not Really Valid!" } }
166
- its(:type) { should == nil }
167
- its(:message) { should == options[:message] }
168
- end
169
-
170
- context "when options[:message] is a symbol" do
171
- let(:options) { { message: :not_really_valid } }
172
- its(:type) { should == options[:message] }
173
- its(:message) { should == message }
174
- end
175
-
176
- context "when options[:message] is nil" do
177
- let(:options) { { } }
178
- its(:type) { should == nil }
179
- its(:message) { should == message }
180
- end
181
-
182
- context "when options[:message] is proc" do
183
- let(:options) { { message: proc { "Not Really Valid!" } } }
184
- its(:type) { should == nil }
185
- its(:message) { should == options[:message].call }
186
- end
187
- end
188
-
189
- context "when message is a proc and" do
190
- let(:message) { proc{ 'Invalid!' } }
191
-
192
- context "when options[:message] is a string" do
193
- let(:options) { { message: "Not Really Valid!" } }
194
- its(:type) { should == nil }
195
- its(:message) { should == options[:message] }
196
- end
197
-
198
- context "when options[:message] is a symbol" do
199
- let(:options) { { message: :not_really_valid } }
200
- its(:type) { should == options[:message] }
201
- its(:message) { should == message.call }
202
- end
203
-
204
- context "when options[:message] is nil" do
205
- let(:options) { { } }
206
- its(:type) { should == nil }
207
- its(:message) { should == message.call }
208
- end
209
-
210
- context "when options[:message] is proc" do
211
- let(:options) { { message: proc { "Not Really Valid!" } } }
212
- its(:type) { should == nil }
213
- its(:message) { should == options[:message].call }
214
- end
215
- end
216
-
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 == 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 == nil }
231
- end
232
-
233
- context "when options[:message] is nil" do
234
- let(:options) { { } }
235
- its(:type) { should == nil }
236
- its(:message) { should == nil }
237
- end
238
-
239
- context "when options[:message] is proc" do
240
- let(:options) { { message: proc { "Not Really Valid!" } } }
241
- its(:type) { should == 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 '#<=>' do
267
- subject { e1 <=> e2 }
268
-
269
- context "when attribute is different" do
270
- let(:e1) { klass.build base, :name, :invalid }
271
- let(:e2) { klass.build base, :name1, :invalid }
272
- it {should == nil }
273
- end
274
-
275
- context "when type is different" do
276
- let(:e1) { klass.build base, :name, :invalid }
277
- let(:e2) { klass.build base, :name, :invalid1 }
278
- it {should == nil }
279
- end
280
-
281
- context "when message is different" do
282
- let(:e1) { klass.build base, :name, :invalid, :message => "a" }
283
- let(:e2) { klass.build base, :name, :invalid, :message => "b" }
284
- it {should == nil }
285
- end
286
-
287
- context "when it is the same" do
288
- let(:e1) { klass.build base, :name, :invalid }
289
- let(:e2) { klass.build base, :name, :invalid }
290
- it { should == 0 }
291
- end
292
- end
293
- end