flash_validators 0.0.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 +7 -0
- data/.coveralls.yml +1 -0
- data/.gitignore +17 -0
- data/.rspec +4 -0
- data/.travis.yml +14 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +589 -0
- data/Rakefile +6 -0
- data/config/locales/en.yml +73 -0
- data/flash_validators.gemspec +28 -0
- data/lib/flash_validators/matchers/ensure_valid_boolean_format_of.rb +20 -0
- data/lib/flash_validators/matchers/ensure_valid_currency_format_of.rb +20 -0
- data/lib/flash_validators/matchers/ensure_valid_email_format_of.rb +20 -0
- data/lib/flash_validators/matchers/ensure_valid_equality_matcher_of.rb +32 -0
- data/lib/flash_validators/matchers/ensure_valid_hex_format_of.rb +20 -0
- data/lib/flash_validators/matchers/ensure_valid_imei_format_of.rb +20 -0
- data/lib/flash_validators/matchers/ensure_valid_ip_format_of.rb +20 -0
- data/lib/flash_validators/matchers/ensure_valid_latitude_format_of.rb +20 -0
- data/lib/flash_validators/matchers/ensure_valid_longitude_format_of.rb +20 -0
- data/lib/flash_validators/matchers/ensure_valid_mac_address_format_of.rb +20 -0
- data/lib/flash_validators/matchers/ensure_valid_name_format_of.rb +20 -0
- data/lib/flash_validators/matchers/ensure_valid_password_format_of.rb +20 -0
- data/lib/flash_validators/matchers/ensure_valid_phone_format_of.rb +20 -0
- data/lib/flash_validators/matchers/ensure_valid_slug_format_of.rb +20 -0
- data/lib/flash_validators/matchers/ensure_valid_ssn_format_of.rb +20 -0
- data/lib/flash_validators/matchers/ensure_valid_url_format_of.rb +20 -0
- data/lib/flash_validators/matchers/ensure_valid_username_format_of.rb +20 -0
- data/lib/flash_validators/validators/boolean_validator.rb +9 -0
- data/lib/flash_validators/validators/currency_validator.rb +17 -0
- data/lib/flash_validators/validators/email_validator.rb +25 -0
- data/lib/flash_validators/validators/equality_validator.rb +27 -0
- data/lib/flash_validators/validators/hex_validator.rb +9 -0
- data/lib/flash_validators/validators/imei_validator.rb +37 -0
- data/lib/flash_validators/validators/ip_validator.rb +9 -0
- data/lib/flash_validators/validators/latitude_validator.rb +9 -0
- data/lib/flash_validators/validators/longitude_validator.rb +9 -0
- data/lib/flash_validators/validators/mac_address_validator.rb +24 -0
- data/lib/flash_validators/validators/name_validator.rb +9 -0
- data/lib/flash_validators/validators/password_validator.rb +9 -0
- data/lib/flash_validators/validators/phone_validator.rb +9 -0
- data/lib/flash_validators/validators/slug_validator.rb +9 -0
- data/lib/flash_validators/validators/ssn_validator.rb +9 -0
- data/lib/flash_validators/validators/url_validator.rb +36 -0
- data/lib/flash_validators/validators/username_validator.rb +9 -0
- data/lib/flash_validators/version.rb +3 -0
- data/lib/flash_validators.rb +41 -0
- data/spec/lib/boolean_validator_spec.rb +35 -0
- data/spec/lib/currency_validator_spec.rb +63 -0
- data/spec/lib/email_validator_spec.rb +111 -0
- data/spec/lib/equality_validator_spec.rb +340 -0
- data/spec/lib/hex_validator_spec.rb +53 -0
- data/spec/lib/imei_validator_spec.rb +41 -0
- data/spec/lib/ip_validator_spec.rb +33 -0
- data/spec/lib/latitude_validator_spec.rb +31 -0
- data/spec/lib/longitude_validator_spec.rb +31 -0
- data/spec/lib/mac_address_validator_spec.rb +54 -0
- data/spec/lib/name_validator_spec.rb +39 -0
- data/spec/lib/password_validator_spec.rb +45 -0
- data/spec/lib/phone_validator_spec.rb +42 -0
- data/spec/lib/slug_validator_spec.rb +41 -0
- data/spec/lib/ssn_validator_spec.rb +36 -0
- data/spec/lib/url_validator_spec.rb +109 -0
- data/spec/lib/username_validator_spec.rb +37 -0
- data/spec/spec_helper.rb +11 -0
- metadata +224 -0
@@ -0,0 +1,340 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe EqualityValidator do
|
4
|
+
|
5
|
+
## Valid less than check
|
6
|
+
context "Value less than" do
|
7
|
+
let(:klass) do
|
8
|
+
Class.new do
|
9
|
+
include ActiveModel::Validations
|
10
|
+
attr_accessor :bid, :price, :name
|
11
|
+
validates :bid, equality: { operator: :less_than, to: :price }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
subject(:model){ klass.new }
|
16
|
+
|
17
|
+
specify "first field less than the second" do
|
18
|
+
model.bid = 1
|
19
|
+
model.price = 2
|
20
|
+
expect(model).to be_valid
|
21
|
+
end
|
22
|
+
|
23
|
+
specify "first field equal to the second" do
|
24
|
+
model.bid = 1
|
25
|
+
model.price = 1
|
26
|
+
expect(model).to be_invalid
|
27
|
+
end
|
28
|
+
|
29
|
+
specify "first field greater than the second" do
|
30
|
+
model.bid = 1
|
31
|
+
model.price = 0
|
32
|
+
expect(model).to be_invalid
|
33
|
+
end
|
34
|
+
|
35
|
+
specify "first field is empty, the second is blank" do
|
36
|
+
model.bid = ""
|
37
|
+
model.price = " "
|
38
|
+
expect(model).to be_valid
|
39
|
+
end
|
40
|
+
|
41
|
+
specify "first field is blank, the second is empty" do
|
42
|
+
model.bid = " "
|
43
|
+
model.price = ""
|
44
|
+
expect(model).to be_invalid
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
## Valid less than or equal to check
|
49
|
+
context "Value less than or equal to" do
|
50
|
+
let(:klass) do
|
51
|
+
Class.new do
|
52
|
+
include ActiveModel::Validations
|
53
|
+
attr_accessor :bid, :price, :name
|
54
|
+
validates :bid, equality: { operator: :less_than_or_equal_to, to: :price }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
subject(:model){ klass.new }
|
59
|
+
|
60
|
+
specify "first field equal to the second" do
|
61
|
+
model.bid = 1
|
62
|
+
model.price = 1
|
63
|
+
expect(model).to be_valid
|
64
|
+
end
|
65
|
+
|
66
|
+
specify "first field less than the second" do
|
67
|
+
model.bid = 1
|
68
|
+
model.price = 2
|
69
|
+
expect(model).to be_valid
|
70
|
+
end
|
71
|
+
|
72
|
+
specify "first field greater than the second" do
|
73
|
+
model.bid = 1
|
74
|
+
model.price = 0
|
75
|
+
expect(model).to be_invalid
|
76
|
+
end
|
77
|
+
|
78
|
+
specify "first field is empty, the second is blank" do
|
79
|
+
model.bid = ""
|
80
|
+
model.price = " "
|
81
|
+
expect(model).to be_valid
|
82
|
+
end
|
83
|
+
|
84
|
+
specify "first field is blank, the second is empty" do
|
85
|
+
model.bid = " "
|
86
|
+
model.price = ""
|
87
|
+
expect(model).to be_invalid
|
88
|
+
end
|
89
|
+
|
90
|
+
specify "both fields are blank" do
|
91
|
+
model.bid = model.price = ""
|
92
|
+
expect(model).to be_valid
|
93
|
+
end
|
94
|
+
|
95
|
+
specify "both fields are empty" do
|
96
|
+
model.bid = model.price = " "
|
97
|
+
expect(model).to be_valid
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
## Valid greater than check
|
102
|
+
context "Value greater than" do
|
103
|
+
let(:klass) do
|
104
|
+
Class.new do
|
105
|
+
include ActiveModel::Validations
|
106
|
+
attr_accessor :bid, :price, :name
|
107
|
+
validates :bid, equality: { operator: :greater_than, to: :price }
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
subject(:model){ klass.new }
|
112
|
+
|
113
|
+
specify "first field greater than the second" do
|
114
|
+
model.bid = 1
|
115
|
+
model.price = 0
|
116
|
+
expect(model).to be_valid
|
117
|
+
end
|
118
|
+
|
119
|
+
specify "first field less than the second" do
|
120
|
+
model.bid = 1
|
121
|
+
model.price = 2
|
122
|
+
expect(model).to be_invalid
|
123
|
+
end
|
124
|
+
|
125
|
+
specify "first field equal to the second" do
|
126
|
+
model.bid = 1
|
127
|
+
model.price = 1
|
128
|
+
expect(model).to be_invalid
|
129
|
+
end
|
130
|
+
|
131
|
+
specify "first field is empty, the second is blank" do
|
132
|
+
model.bid = ""
|
133
|
+
model.price = " "
|
134
|
+
expect(model).to be_invalid
|
135
|
+
end
|
136
|
+
|
137
|
+
specify "first field is blank, the second is empty" do
|
138
|
+
model.bid = " "
|
139
|
+
model.price = ""
|
140
|
+
expect(model).to be_valid
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
## Valid greater than or equal to check
|
145
|
+
context "Value greater than or equal to" do
|
146
|
+
let(:klass) do
|
147
|
+
Class.new do
|
148
|
+
include ActiveModel::Validations
|
149
|
+
attr_accessor :bid, :price, :name
|
150
|
+
validates :bid, equality: { operator: :greater_than_or_equal_to, to: :price }
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
subject(:model){ klass.new }
|
155
|
+
|
156
|
+
specify "first field equal to the second" do
|
157
|
+
model.bid = 1
|
158
|
+
model.price = 1
|
159
|
+
expect(model).to be_valid
|
160
|
+
end
|
161
|
+
|
162
|
+
specify "first field greater than the second" do
|
163
|
+
model.bid = 1
|
164
|
+
model.price = 0
|
165
|
+
expect(model).to be_valid
|
166
|
+
end
|
167
|
+
|
168
|
+
specify "first field less than the second" do
|
169
|
+
model.bid = 1
|
170
|
+
model.price = 2
|
171
|
+
expect(model).to be_invalid
|
172
|
+
end
|
173
|
+
|
174
|
+
specify "first field is empty, the second is blank" do
|
175
|
+
model.bid = ""
|
176
|
+
model.price = " "
|
177
|
+
expect(model).to be_invalid
|
178
|
+
end
|
179
|
+
|
180
|
+
specify "first field is blank, the second is empty" do
|
181
|
+
model.bid = " "
|
182
|
+
model.price = ""
|
183
|
+
expect(model).to be_valid
|
184
|
+
end
|
185
|
+
|
186
|
+
specify "both fields are blank" do
|
187
|
+
model.bid = model.price = ""
|
188
|
+
expect(model).to be_valid
|
189
|
+
end
|
190
|
+
|
191
|
+
specify "both fields are empty" do
|
192
|
+
model.bid = model.price = " "
|
193
|
+
expect(model).to be_valid
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
## Valid equal to check
|
198
|
+
context "Value equal to" do
|
199
|
+
let(:klass) do
|
200
|
+
Class.new do
|
201
|
+
include ActiveModel::Validations
|
202
|
+
attr_accessor :bid, :price, :name
|
203
|
+
validates :bid, equality: { operator: :equal_to, to: :price }
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
subject(:model){ klass.new }
|
208
|
+
|
209
|
+
specify "first field equal to the second" do
|
210
|
+
model.bid = 1
|
211
|
+
model.price = 1
|
212
|
+
expect(model).to be_valid
|
213
|
+
end
|
214
|
+
|
215
|
+
specify "first field less than the second" do
|
216
|
+
model.bid = 1
|
217
|
+
model.price = 2
|
218
|
+
expect(model).to be_invalid
|
219
|
+
end
|
220
|
+
|
221
|
+
specify "first field greater than the second" do
|
222
|
+
model.bid = 1
|
223
|
+
model.price = 0
|
224
|
+
expect(model).to be_invalid
|
225
|
+
end
|
226
|
+
|
227
|
+
specify "first field has value, the second is nil" do
|
228
|
+
model.bid = 1
|
229
|
+
model.price = nil
|
230
|
+
expect(model).to be_invalid
|
231
|
+
end
|
232
|
+
|
233
|
+
specify "first field is nil, the second has value" do
|
234
|
+
model.bid = nil
|
235
|
+
model.price = 1
|
236
|
+
expect(model).to be_invalid
|
237
|
+
end
|
238
|
+
|
239
|
+
specify "both fields are nil" do
|
240
|
+
model.bid = model.price = nil
|
241
|
+
expect(model).to be_valid
|
242
|
+
end
|
243
|
+
|
244
|
+
specify "first field is empty, the second is blank" do
|
245
|
+
model.bid = ""
|
246
|
+
model.price = " "
|
247
|
+
expect(model).to be_invalid
|
248
|
+
end
|
249
|
+
|
250
|
+
specify "first field is blank, the second is empty" do
|
251
|
+
model.bid = " "
|
252
|
+
model.price = ""
|
253
|
+
expect(model).to be_invalid
|
254
|
+
end
|
255
|
+
|
256
|
+
specify "both fields are blank" do
|
257
|
+
model.bid = model.price = ""
|
258
|
+
expect(model).to be_valid
|
259
|
+
end
|
260
|
+
|
261
|
+
specify "both fields are empty" do
|
262
|
+
model.bid = model.price = " "
|
263
|
+
expect(model).to be_valid
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
## Valid not equal to check
|
268
|
+
context "Value not equal to" do
|
269
|
+
let(:klass) do
|
270
|
+
Class.new do
|
271
|
+
include ActiveModel::Validations
|
272
|
+
attr_accessor :bid, :price, :name
|
273
|
+
validates :bid, equality: { operator: :not_equal_to, to: :price }
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
subject(:model){ klass.new }
|
278
|
+
|
279
|
+
specify "first field equal to the second" do
|
280
|
+
model.bid = 1
|
281
|
+
model.price = 1
|
282
|
+
expect(model).to be_invalid
|
283
|
+
end
|
284
|
+
|
285
|
+
specify "first field less than the second" do
|
286
|
+
model.bid = 1
|
287
|
+
model.price = 2
|
288
|
+
expect(model).to be_valid
|
289
|
+
end
|
290
|
+
|
291
|
+
specify "first field greater than the second" do
|
292
|
+
model.bid = 1
|
293
|
+
model.price = 0
|
294
|
+
expect(model).to be_valid
|
295
|
+
end
|
296
|
+
|
297
|
+
specify "first field has value, the second is nil" do
|
298
|
+
model.bid = 1
|
299
|
+
model.price = nil
|
300
|
+
expect(model).to be_valid
|
301
|
+
end
|
302
|
+
|
303
|
+
specify "first field is nil, the second has value" do
|
304
|
+
model.bid = nil
|
305
|
+
model.price = 1
|
306
|
+
expect(model).to be_valid
|
307
|
+
end
|
308
|
+
|
309
|
+
specify "both fields are nil" do
|
310
|
+
model.bid = model.price = nil
|
311
|
+
expect(model).to be_invalid
|
312
|
+
end
|
313
|
+
|
314
|
+
specify "first field is empty, the second is blank" do
|
315
|
+
model.bid = ""
|
316
|
+
model.price = " "
|
317
|
+
expect(model).to be_valid
|
318
|
+
end
|
319
|
+
|
320
|
+
specify "first field is blank, the second is empty" do
|
321
|
+
model.bid = " "
|
322
|
+
model.price = ""
|
323
|
+
expect(model).to be_valid
|
324
|
+
end
|
325
|
+
|
326
|
+
specify "both fields are blank" do
|
327
|
+
model.bid = model.price = ""
|
328
|
+
expect(model).to be_invalid
|
329
|
+
end
|
330
|
+
|
331
|
+
specify "both fields are empty" do
|
332
|
+
model.bid = model.price = " "
|
333
|
+
expect(model).to be_invalid
|
334
|
+
end
|
335
|
+
end
|
336
|
+
|
337
|
+
#it { should ensure_equality_of(:bid).to(:price).operator(:less_than) }
|
338
|
+
#it { should_not ensure_equality_of(:bid).to(:name).operator(:less_than) }
|
339
|
+
|
340
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe HexValidator do
|
4
|
+
|
5
|
+
context "HEX has a valid value" do
|
6
|
+
let(:klass) do
|
7
|
+
Class.new do
|
8
|
+
include ActiveModel::Validations
|
9
|
+
attr_accessor :color, :name
|
10
|
+
validates :color, hex: true
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
subject { klass.new }
|
15
|
+
|
16
|
+
it { should allow_value("#aaa").for(:color) }
|
17
|
+
it { should allow_value("#aaaaaa").for(:color) }
|
18
|
+
it { should allow_value("#999").for(:color) }
|
19
|
+
it { should allow_value("#999999").for(:color) }
|
20
|
+
it { should allow_value("#a9a").for(:color) }
|
21
|
+
it { should allow_value("#a9a9a9").for(:color) }
|
22
|
+
it { should allow_value("aaa").for(:color) }
|
23
|
+
it { should allow_value("aaaaaa").for(:color) }
|
24
|
+
it { should allow_value("999").for(:color) }
|
25
|
+
it { should allow_value("999999").for(:color) }
|
26
|
+
it { should allow_value("a9a").for(:color) }
|
27
|
+
it { should allow_value("a9a9a9").for(:color) }
|
28
|
+
|
29
|
+
it { should_not allow_value('').for(:color) }
|
30
|
+
it { should_not allow_value(' ').for(:color) }
|
31
|
+
it { should_not allow_value(nil).for(:color) }
|
32
|
+
it { should_not allow_value("#").for(:color) }
|
33
|
+
it { should_not allow_value("#9").for(:color) }
|
34
|
+
it { should_not allow_value("#9a").for(:color) }
|
35
|
+
it { should_not allow_value("#hhh").for(:color) }
|
36
|
+
it { should_not allow_value("#9h9").for(:color) }
|
37
|
+
it { should_not allow_value("#9a9a").for(:color) }
|
38
|
+
it { should_not allow_value("#9a9a9").for(:color) }
|
39
|
+
it { should_not allow_value("#9a9a9a9").for(:color) }
|
40
|
+
it { should_not allow_value(" #9a9").for(:color) }
|
41
|
+
it { should_not allow_value(" #9a9 ").for(:color) }
|
42
|
+
it { should_not allow_value("#9a9 ").for(:color) }
|
43
|
+
it { should_not allow_value(" 9a9").for(:color) }
|
44
|
+
it { should_not allow_value(" 9a9 ").for(:color) }
|
45
|
+
it { should_not allow_value("9a9 ").for(:color) }
|
46
|
+
it { should_not allow_value("! \#$%\`|").for(:color) }
|
47
|
+
it { should_not allow_value("<>@[]\`|").for(:color) }
|
48
|
+
|
49
|
+
it { should ensure_valid_hex_format_of(:color) }
|
50
|
+
it { should_not ensure_valid_hex_format_of(:name) }
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ImeiValidator do
|
4
|
+
|
5
|
+
context "IMEI has valid format" do
|
6
|
+
let(:klass) do
|
7
|
+
Class.new do
|
8
|
+
include ActiveModel::Validations
|
9
|
+
attr_accessor :imei, :name
|
10
|
+
validates :imei, imei: true
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
subject { klass.new }
|
15
|
+
|
16
|
+
it { should allow_value(356843052637512).for(:imei) }
|
17
|
+
it { should allow_value("356843052637512").for(:imei) }
|
18
|
+
it { should allow_value("35-684305-2637512").for(:imei) }
|
19
|
+
it { should allow_value("35-684305.263.7512").for(:imei) }
|
20
|
+
|
21
|
+
context "value too short" do
|
22
|
+
it { should_not allow_value("3568430537512").for(:imei) }
|
23
|
+
it { should_not allow_value("3").for(:imei) }
|
24
|
+
end
|
25
|
+
|
26
|
+
it "can't be too long" do
|
27
|
+
should_not allow_value("35684305263751233").for(:imei)
|
28
|
+
end
|
29
|
+
|
30
|
+
context "checksum doesn't match" do
|
31
|
+
it { should_not allow_value("356843052637513").for(:imei) }
|
32
|
+
it { should_not allow_value("156843052637512").for(:imei) }
|
33
|
+
end
|
34
|
+
|
35
|
+
it { should_not allow_value("invalid").for(:imei) }
|
36
|
+
|
37
|
+
it { should ensure_valid_imei_format_of(:imei) }
|
38
|
+
it { should_not ensure_valid_imei_format_of(:name) }
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe IpValidator do
|
4
|
+
|
5
|
+
context "IP has a valid value" do
|
6
|
+
let(:klass) do
|
7
|
+
Class.new do
|
8
|
+
include ActiveModel::Validations
|
9
|
+
attr_accessor :ip, :name
|
10
|
+
validates :ip, ip: true
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
subject { klass.new }
|
15
|
+
|
16
|
+
it { should allow_value("0.0.0.0").for(:ip) }
|
17
|
+
it { should allow_value("127.0.0.1").for(:ip) }
|
18
|
+
it { should allow_value("99.39.240.31").for(:ip) }
|
19
|
+
|
20
|
+
it { should_not allow_value('').for(:ip) }
|
21
|
+
it { should_not allow_value(' ').for(:ip) }
|
22
|
+
it { should_not allow_value(nil).for(:ip) }
|
23
|
+
it { should_not allow_value("0 0 0 0").for(:ip) }
|
24
|
+
it { should_not allow_value("0.0.0.0:3000").for(:ip) }
|
25
|
+
it { should_not allow_value("22.22.333.22").for(:ip) }
|
26
|
+
it { should_not allow_value("! \#$%\`|").for(:ip) }
|
27
|
+
it { should_not allow_value("<>@[]\`|").for(:ip) }
|
28
|
+
|
29
|
+
it { should ensure_valid_ip_format_of(:ip) }
|
30
|
+
it { should_not ensure_valid_ip_format_of(:name) }
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe LatitudeValidator do
|
4
|
+
|
5
|
+
context "Latitude has a valid value" do
|
6
|
+
let(:klass) do
|
7
|
+
Class.new do
|
8
|
+
include ActiveModel::Validations
|
9
|
+
attr_accessor :lat, :name
|
10
|
+
validates :lat, latitude: true
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
subject { klass.new }
|
15
|
+
|
16
|
+
it { should allow_value(-90).for(:lat) }
|
17
|
+
it { should allow_value(90).for(:lat) }
|
18
|
+
it { should allow_value(0).for(:lat) }
|
19
|
+
it { should allow_value(9.33).for(:lat) }
|
20
|
+
|
21
|
+
it { should_not allow_value('').for(:lat) }
|
22
|
+
it { should_not allow_value(' ').for(:lat) }
|
23
|
+
it { should_not allow_value(nil).for(:lat) }
|
24
|
+
it { should_not allow_value(-90.1).for(:lat) }
|
25
|
+
it { should_not allow_value(90.1).for(:lat) }
|
26
|
+
|
27
|
+
it { should ensure_valid_latitude_format_of(:lat) }
|
28
|
+
it { should_not ensure_valid_latitude_format_of(:name) }
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe LongitudeValidator do
|
4
|
+
|
5
|
+
context "Longitude has a valid value" do
|
6
|
+
let(:klass) do
|
7
|
+
Class.new do
|
8
|
+
include ActiveModel::Validations
|
9
|
+
attr_accessor :lon, :name
|
10
|
+
validates :lon, longitude: true
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
subject { klass.new }
|
15
|
+
|
16
|
+
it { should allow_value(-180).for(:lon) }
|
17
|
+
it { should allow_value(180).for(:lon) }
|
18
|
+
it { should allow_value(0).for(:lon) }
|
19
|
+
it { should allow_value(9.33).for(:lon) }
|
20
|
+
|
21
|
+
it { should_not allow_value('').for(:lon) }
|
22
|
+
it { should_not allow_value(' ').for(:lon) }
|
23
|
+
it { should_not allow_value(nil).for(:lon) }
|
24
|
+
it { should_not allow_value(-181.1).for(:lon) }
|
25
|
+
it { should_not allow_value(181.1).for(:lon) }
|
26
|
+
|
27
|
+
it { should ensure_valid_longitude_format_of(:lon) }
|
28
|
+
it { should_not ensure_valid_longitude_format_of(:name) }
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MacAddressValidator do
|
4
|
+
|
5
|
+
context "MAC address has valid format" do
|
6
|
+
let(:klass) do
|
7
|
+
Class.new do
|
8
|
+
include ActiveModel::Validations
|
9
|
+
attr_accessor :mac, :name
|
10
|
+
validates :mac, mac_address: true
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
subject { klass.new }
|
15
|
+
|
16
|
+
# Valid formats
|
17
|
+
it { should allow_value("08:00:2b:01:02:03").for(:mac) }
|
18
|
+
it { should allow_value("08-00-2b-01-02-03").for(:mac) }
|
19
|
+
it { should allow_value("08.00.2b.01.02.03").for(:mac) }
|
20
|
+
it { should allow_value("08 00 2b 01 02 03").for(:mac) }
|
21
|
+
it { should allow_value("08002b:010203").for(:mac) }
|
22
|
+
it { should allow_value("08002b.010203").for(:mac) }
|
23
|
+
it { should allow_value("08002b-010203").for(:mac) }
|
24
|
+
it { should allow_value("0800.2b01.0203").for(:mac) }
|
25
|
+
it { should allow_value("0800-2b01-0203").for(:mac) }
|
26
|
+
it { should allow_value("0800 2b01 0203").for(:mac) }
|
27
|
+
it { should allow_value("08002b010203").for(:mac) }
|
28
|
+
|
29
|
+
# Mixed Separators
|
30
|
+
it { should_not allow_value("08-00:2b:01:02:03").for(:mac) }
|
31
|
+
it { should_not allow_value("08.00:2b:01:02:03").for(:mac) }
|
32
|
+
it { should_not allow_value("08 00:2b:01:02:03").for(:mac) }
|
33
|
+
it { should_not allow_value("0800-2b01:0203").for(:mac) }
|
34
|
+
it { should_not allow_value("0800 2b01:0203").for(:mac) }
|
35
|
+
|
36
|
+
# Too Short
|
37
|
+
it { should_not allow_value("08:00:2b:01:02").for(:mac) }
|
38
|
+
it { should_not allow_value("08-00-2b-01-02").for(:mac) }
|
39
|
+
|
40
|
+
# Too Long
|
41
|
+
it { should_not allow_value("08:00:2b:01:02:03:04").for(:mac) }
|
42
|
+
|
43
|
+
# Non-Hex Characters
|
44
|
+
it { should_not allow_value("qq:00:00:00:00:00").for(:mac) }
|
45
|
+
|
46
|
+
it { should_not allow_value(' ').for(:mac) }
|
47
|
+
it { should_not allow_value(nil).for(:mac) }
|
48
|
+
it { should_not allow_value("invalid").for(:mac) }
|
49
|
+
|
50
|
+
it { should ensure_valid_mac_address_format_of(:mac) }
|
51
|
+
it { should_not ensure_valid_mac_address_format_of(:name) }
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe NameValidator do
|
4
|
+
|
5
|
+
context "Name has a valid value" do
|
6
|
+
let(:klass) do
|
7
|
+
Class.new do
|
8
|
+
include ActiveModel::Validations
|
9
|
+
attr_accessor :name, :email
|
10
|
+
validates :name, name: true
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
subject { klass.new }
|
15
|
+
|
16
|
+
it { should allow_value("First Last").for(:name) }
|
17
|
+
it { should allow_value("First Last-Name").for(:name) }
|
18
|
+
it { should allow_value("First Middle Last").for(:name) }
|
19
|
+
it { should allow_value("Sur First Middle Last").for(:name) }
|
20
|
+
it { should allow_value("Sur First Middle Last Family").for(:name) }
|
21
|
+
it { should allow_value("Sur First Middle Last-Family").for(:name) }
|
22
|
+
|
23
|
+
it { should_not allow_value('').for(:name) }
|
24
|
+
it { should_not allow_value(' ').for(:name) }
|
25
|
+
it { should_not allow_value(nil).for(:name) }
|
26
|
+
it { should_not allow_value("First").for(:name) }
|
27
|
+
it { should_not allow_value("First Last_Name").for(:name) }
|
28
|
+
it { should_not allow_value("First1 Last").for(:name) }
|
29
|
+
it { should_not allow_value("First 1 Last").for(:name) }
|
30
|
+
it { should_not allow_value("Sur. First Middle Last Jr.").for(:name) }
|
31
|
+
it { should_not allow_value("Sur First Middle Last Family III").for(:name) }
|
32
|
+
it { should_not allow_value("! \#$%\`|").for(:name) }
|
33
|
+
it { should_not allow_value("<>@[]\`|").for(:name) }
|
34
|
+
|
35
|
+
it { should ensure_valid_name_format_of(:name) }
|
36
|
+
it { should_not ensure_valid_name_format_of(:email) }
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe PasswordValidator do
|
4
|
+
|
5
|
+
context "Password has a valid value" do
|
6
|
+
let(:klass) do
|
7
|
+
Class.new do
|
8
|
+
include ActiveModel::Validations
|
9
|
+
attr_accessor :password, :name
|
10
|
+
validates :password, password: true
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
subject { klass.new }
|
15
|
+
|
16
|
+
it { should allow_value("password").for(:password) }
|
17
|
+
it { should allow_value("password1234").for(:password) }
|
18
|
+
it { should allow_value("pa$$word").for(:password) }
|
19
|
+
it { should allow_value("pass-word").for(:password) }
|
20
|
+
it { should allow_value("pass_word").for(:password) }
|
21
|
+
it { should allow_value("password!").for(:password) }
|
22
|
+
it { should allow_value("password@").for(:password) }
|
23
|
+
it { should allow_value("password#").for(:password) }
|
24
|
+
it { should allow_value("password%").for(:password) }
|
25
|
+
it { should allow_value("password^").for(:password) }
|
26
|
+
it { should allow_value("password&").for(:password) }
|
27
|
+
it { should allow_value("password*").for(:password) }
|
28
|
+
|
29
|
+
it { should_not allow_value('').for(:password) }
|
30
|
+
it { should_not allow_value(' ').for(:password) }
|
31
|
+
it { should_not allow_value(nil).for(:password) }
|
32
|
+
it { should_not allow_value("pass").for(:password) }
|
33
|
+
it { should_not allow_value(" password").for(:password) }
|
34
|
+
it { should_not allow_value(" password ").for(:password) }
|
35
|
+
it { should_not allow_value("password ").for(:password) }
|
36
|
+
it { should_not allow_value("pass word").for(:password) }
|
37
|
+
it { should_not allow_value("password-12345678910").for(:password) }
|
38
|
+
it { should_not allow_value("! \#$%\`|").for(:password) }
|
39
|
+
it { should_not allow_value("<>@[]\`|").for(:password) }
|
40
|
+
|
41
|
+
it { should ensure_valid_password_format_of(:password) }
|
42
|
+
it { should_not ensure_valid_password_format_of(:name) }
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|