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.
Files changed (66) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +17 -0
  4. data/.rspec +4 -0
  5. data/.travis.yml +14 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +22 -0
  8. data/README.md +589 -0
  9. data/Rakefile +6 -0
  10. data/config/locales/en.yml +73 -0
  11. data/flash_validators.gemspec +28 -0
  12. data/lib/flash_validators/matchers/ensure_valid_boolean_format_of.rb +20 -0
  13. data/lib/flash_validators/matchers/ensure_valid_currency_format_of.rb +20 -0
  14. data/lib/flash_validators/matchers/ensure_valid_email_format_of.rb +20 -0
  15. data/lib/flash_validators/matchers/ensure_valid_equality_matcher_of.rb +32 -0
  16. data/lib/flash_validators/matchers/ensure_valid_hex_format_of.rb +20 -0
  17. data/lib/flash_validators/matchers/ensure_valid_imei_format_of.rb +20 -0
  18. data/lib/flash_validators/matchers/ensure_valid_ip_format_of.rb +20 -0
  19. data/lib/flash_validators/matchers/ensure_valid_latitude_format_of.rb +20 -0
  20. data/lib/flash_validators/matchers/ensure_valid_longitude_format_of.rb +20 -0
  21. data/lib/flash_validators/matchers/ensure_valid_mac_address_format_of.rb +20 -0
  22. data/lib/flash_validators/matchers/ensure_valid_name_format_of.rb +20 -0
  23. data/lib/flash_validators/matchers/ensure_valid_password_format_of.rb +20 -0
  24. data/lib/flash_validators/matchers/ensure_valid_phone_format_of.rb +20 -0
  25. data/lib/flash_validators/matchers/ensure_valid_slug_format_of.rb +20 -0
  26. data/lib/flash_validators/matchers/ensure_valid_ssn_format_of.rb +20 -0
  27. data/lib/flash_validators/matchers/ensure_valid_url_format_of.rb +20 -0
  28. data/lib/flash_validators/matchers/ensure_valid_username_format_of.rb +20 -0
  29. data/lib/flash_validators/validators/boolean_validator.rb +9 -0
  30. data/lib/flash_validators/validators/currency_validator.rb +17 -0
  31. data/lib/flash_validators/validators/email_validator.rb +25 -0
  32. data/lib/flash_validators/validators/equality_validator.rb +27 -0
  33. data/lib/flash_validators/validators/hex_validator.rb +9 -0
  34. data/lib/flash_validators/validators/imei_validator.rb +37 -0
  35. data/lib/flash_validators/validators/ip_validator.rb +9 -0
  36. data/lib/flash_validators/validators/latitude_validator.rb +9 -0
  37. data/lib/flash_validators/validators/longitude_validator.rb +9 -0
  38. data/lib/flash_validators/validators/mac_address_validator.rb +24 -0
  39. data/lib/flash_validators/validators/name_validator.rb +9 -0
  40. data/lib/flash_validators/validators/password_validator.rb +9 -0
  41. data/lib/flash_validators/validators/phone_validator.rb +9 -0
  42. data/lib/flash_validators/validators/slug_validator.rb +9 -0
  43. data/lib/flash_validators/validators/ssn_validator.rb +9 -0
  44. data/lib/flash_validators/validators/url_validator.rb +36 -0
  45. data/lib/flash_validators/validators/username_validator.rb +9 -0
  46. data/lib/flash_validators/version.rb +3 -0
  47. data/lib/flash_validators.rb +41 -0
  48. data/spec/lib/boolean_validator_spec.rb +35 -0
  49. data/spec/lib/currency_validator_spec.rb +63 -0
  50. data/spec/lib/email_validator_spec.rb +111 -0
  51. data/spec/lib/equality_validator_spec.rb +340 -0
  52. data/spec/lib/hex_validator_spec.rb +53 -0
  53. data/spec/lib/imei_validator_spec.rb +41 -0
  54. data/spec/lib/ip_validator_spec.rb +33 -0
  55. data/spec/lib/latitude_validator_spec.rb +31 -0
  56. data/spec/lib/longitude_validator_spec.rb +31 -0
  57. data/spec/lib/mac_address_validator_spec.rb +54 -0
  58. data/spec/lib/name_validator_spec.rb +39 -0
  59. data/spec/lib/password_validator_spec.rb +45 -0
  60. data/spec/lib/phone_validator_spec.rb +42 -0
  61. data/spec/lib/slug_validator_spec.rb +41 -0
  62. data/spec/lib/ssn_validator_spec.rb +36 -0
  63. data/spec/lib/url_validator_spec.rb +109 -0
  64. data/spec/lib/username_validator_spec.rb +37 -0
  65. data/spec/spec_helper.rb +11 -0
  66. 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