active_validation 1.0.0 → 1.1.0
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 +4 -4
- data/.gitignore +1 -6
- data/.rspec +3 -3
- data/CODE_OF_CONDUCT.md +13 -0
- data/LICENSE.txt +17 -18
- data/README.md +100 -145
- data/active_validation.gemspec +4 -3
- data/bin/console +14 -0
- data/bin/rake +16 -0
- data/bin/setup +7 -0
- data/config/locales/en.yml +7 -8
- data/lib/active_validation.rb +4 -4
- data/lib/active_validation/matchers/{ensure_valid_latitude_format_of.rb → ensure_valid_coordinate_format_of.rb} +5 -5
- data/lib/active_validation/validators/coordinate_validator.rb +38 -0
- data/lib/active_validation/version.rb +1 -1
- metadata +11 -63
- data/lib/active_validation/matchers/ensure_valid_longitude_format_of.rb +0 -26
- data/lib/active_validation/validators/latitude_validator.rb +0 -9
- data/lib/active_validation/validators/longitude_validator.rb +0 -9
- data/spec/lib/alpha_numeric_validator_spec.rb +0 -91
- data/spec/lib/alpha_validator_spec.rb +0 -182
- data/spec/lib/base64_validator_spec.rb +0 -33
- data/spec/lib/boolean_validator_spec.rb +0 -35
- data/spec/lib/credit_card_validator_spec.rb +0 -686
- data/spec/lib/currency_validator_spec.rb +0 -63
- data/spec/lib/cusip_validator_spec.rb +0 -27
- data/spec/lib/email_validator_spec.rb +0 -109
- data/spec/lib/equality_validator_spec.rb +0 -334
- data/spec/lib/hex_validator_spec.rb +0 -73
- data/spec/lib/imei_validator_spec.rb +0 -41
- data/spec/lib/ip_validator_spec.rb +0 -33
- data/spec/lib/isbn_validator_spec.rb +0 -41
- data/spec/lib/isin_validator_spec.rb +0 -35
- data/spec/lib/latitude_validator_spec.rb +0 -31
- data/spec/lib/longitude_validator_spec.rb +0 -31
- data/spec/lib/mac_address_validator_spec.rb +0 -54
- data/spec/lib/name_validator_spec.rb +0 -39
- data/spec/lib/password_validator_spec.rb +0 -85
- data/spec/lib/phone_validator_spec.rb +0 -42
- data/spec/lib/sedol_validator_spec.rb +0 -31
- data/spec/lib/slug_validator_spec.rb +0 -41
- data/spec/lib/ssn_validator_spec.rb +0 -36
- data/spec/lib/url_validator_spec.rb +0 -106
- data/spec/lib/username_validator_spec.rb +0 -37
- data/spec/lib/uuid_validator_spec.rb +0 -157
- data/spec/spec_helper.rb +0 -12
@@ -1,63 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe CurrencyValidator do
|
4
|
-
|
5
|
-
context "has a valid value" do
|
6
|
-
let(:klass) do
|
7
|
-
Class.new do
|
8
|
-
include ActiveModel::Validations
|
9
|
-
attr_accessor :price, :name
|
10
|
-
validates :price, currency: true
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
subject { klass.new }
|
15
|
-
|
16
|
-
it { should allow_value(".00").for(:price) }
|
17
|
-
it { should allow_value("1.0").for(:price) }
|
18
|
-
it { should allow_value("1.00").for(:price) }
|
19
|
-
it { should allow_value("12345678.00").for(:price) }
|
20
|
-
|
21
|
-
it { should_not allow_value('').for(:price) }
|
22
|
-
it { should_not allow_value(' ').for(:price) }
|
23
|
-
it { should_not allow_value(nil).for(:price) }
|
24
|
-
it { should_not allow_value("1").for(:price) }
|
25
|
-
it { should_not allow_value("1.000").for(:price) }
|
26
|
-
it { should_not allow_value("$1.00").for(:price) }
|
27
|
-
it { should_not allow_value("! \#$%\`|").for(:price) }
|
28
|
-
it { should_not allow_value("<>@[]\`|").for(:price) }
|
29
|
-
|
30
|
-
it { should ensure_valid_currency_format_of(:price) }
|
31
|
-
it { should_not ensure_valid_currency_format_of(:name) }
|
32
|
-
end
|
33
|
-
|
34
|
-
context "with :strict option has a valid value" do
|
35
|
-
let(:klass) do
|
36
|
-
Class.new do
|
37
|
-
include ActiveModel::Validations
|
38
|
-
attr_accessor :price, :name
|
39
|
-
validates :price, currency: { strict: true }
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
subject { klass.new }
|
44
|
-
|
45
|
-
it { should allow_value("1.00").for(:price) }
|
46
|
-
it { should allow_value("12345678.00").for(:price) }
|
47
|
-
|
48
|
-
it { should_not allow_value('').for(:price) }
|
49
|
-
it { should_not allow_value(' ').for(:price) }
|
50
|
-
it { should_not allow_value(nil).for(:price) }
|
51
|
-
it { should_not allow_value(".00").for(:price) }
|
52
|
-
it { should_not allow_value("1").for(:price) }
|
53
|
-
it { should_not allow_value("1.0").for(:price) }
|
54
|
-
it { should_not allow_value("1.000").for(:price) }
|
55
|
-
it { should_not allow_value("$1.00").for(:price) }
|
56
|
-
it { should_not allow_value("! \#$%\`|").for(:price) }
|
57
|
-
it { should_not allow_value("<>@[]\`|").for(:price) }
|
58
|
-
|
59
|
-
it { should ensure_valid_currency_format_of(:price) }
|
60
|
-
it { should_not ensure_valid_currency_format_of(:name) }
|
61
|
-
end
|
62
|
-
|
63
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe CusipValidator do
|
4
|
-
|
5
|
-
context "has a valid value" do
|
6
|
-
let(:klass) do
|
7
|
-
Class.new do
|
8
|
-
include ActiveModel::Validations
|
9
|
-
attr_accessor :code, :name
|
10
|
-
validates :code, cusip: true
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
subject { klass.new }
|
15
|
-
|
16
|
-
it { should allow_value("125509BG3").for(:code) }
|
17
|
-
|
18
|
-
it { should_not allow_value('').for(:code) }
|
19
|
-
it { should_not allow_value(' ').for(:code) }
|
20
|
-
it { should_not allow_value(nil).for(:code) }
|
21
|
-
it { should_not allow_value("12345678AB").for(:code) }
|
22
|
-
|
23
|
-
it { should ensure_valid_cusip_format_of(:code) }
|
24
|
-
it { should_not ensure_valid_cusip_format_of(:name) }
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|
@@ -1,109 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe EmailValidator do
|
4
|
-
|
5
|
-
subject { klass.new }
|
6
|
-
|
7
|
-
context "with valid format" do
|
8
|
-
let(:klass) do
|
9
|
-
Class.new do
|
10
|
-
include ActiveModel::Validations
|
11
|
-
attr_accessor :email, :name
|
12
|
-
validates :email, email: true
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
[
|
17
|
-
"s_u@example.com",
|
18
|
-
"super.user@example.com",
|
19
|
-
"super+user@example.com",
|
20
|
-
"super-user@example.com",
|
21
|
-
"super+user@example-site.com",
|
22
|
-
"user@example.com",
|
23
|
-
"user@example-site.com",
|
24
|
-
"user@en.example.com",
|
25
|
-
"user@example.museum",
|
26
|
-
"user@123.com",
|
27
|
-
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@example.com",
|
28
|
-
"01234567890@example.com"
|
29
|
-
].each do |email|
|
30
|
-
it "#{email.inspect} should be valid" do
|
31
|
-
should allow_value(email).for(:email)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
[
|
36
|
-
"",
|
37
|
-
" ",
|
38
|
-
"example.com",
|
39
|
-
"super user@example.com",
|
40
|
-
" user@example.com",
|
41
|
-
" user@example.com ",
|
42
|
-
"user@example.com ",
|
43
|
-
"user",
|
44
|
-
"user@com",
|
45
|
-
"user@.com",
|
46
|
-
"user@example",
|
47
|
-
"user@example.",
|
48
|
-
"user@example.c",
|
49
|
-
"user_example.com",
|
50
|
-
"user@example_site.com",
|
51
|
-
"user@example.com@example.com",
|
52
|
-
"user@",
|
53
|
-
"user@! \"\#$%(),/;<>_[]\`|.com",
|
54
|
-
"user@127.0.0.1",
|
55
|
-
"user@127.0.0.1:25",
|
56
|
-
"user@example.com\n<script>alert('hello')</script>",
|
57
|
-
"@example.com",
|
58
|
-
"@example",
|
59
|
-
"@",
|
60
|
-
"! \#$%\`|@example.com",
|
61
|
-
"<>@[]\`|@example.com"
|
62
|
-
].each do |email|
|
63
|
-
it "#{email.inspect} should be invalid" do
|
64
|
-
should_not allow_value(email).for(:email)
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
it { should ensure_valid_email_format_of(:email) }
|
69
|
-
it { should_not ensure_valid_email_format_of(:name) }
|
70
|
-
end
|
71
|
-
|
72
|
-
context "is in the specific domain" do
|
73
|
-
context "domain specified as string" do
|
74
|
-
let(:klass) do
|
75
|
-
Class.new do
|
76
|
-
include ActiveModel::Validations
|
77
|
-
attr_accessor :email, :name
|
78
|
-
validates :email, email: { domain: "edu" }
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
it { should allow_value("user@example.edu").for(:email) }
|
83
|
-
it { should_not allow_value("user@example.com").for(:email) }
|
84
|
-
|
85
|
-
it { should ensure_valid_email_format_of(:email) }
|
86
|
-
it { should_not ensure_valid_email_format_of(:name) }
|
87
|
-
end
|
88
|
-
|
89
|
-
context "set as an array of strings and symbols" do
|
90
|
-
let(:klass) do
|
91
|
-
Class.new do
|
92
|
-
include ActiveModel::Validations
|
93
|
-
attr_accessor :email, :name
|
94
|
-
validates :email, email: { domain: ['com', :edu, 'Com.Au'] }
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
it { should allow_value("user@example.com").for(:email) }
|
99
|
-
it { should allow_value("user@example.edu").for(:email) }
|
100
|
-
it { should allow_value("user@example.com.au").for(:email) }
|
101
|
-
it { should allow_value("user@example.Com.Au").for(:email) }
|
102
|
-
it { should_not allow_value("user@example.org").for(:email) }
|
103
|
-
|
104
|
-
it { should ensure_valid_email_format_of(:email) }
|
105
|
-
it { should_not ensure_valid_email_format_of(:name) }
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
end
|
@@ -1,334 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe EqualityValidator do
|
4
|
-
|
5
|
-
context "value less than" do
|
6
|
-
let(:klass) do
|
7
|
-
Class.new do
|
8
|
-
include ActiveModel::Validations
|
9
|
-
attr_accessor :bid, :price, :name
|
10
|
-
validates :bid, equality: { operator: :less_than, to: :price }
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
subject(:model){ klass.new }
|
15
|
-
|
16
|
-
specify "first field less than the second" do
|
17
|
-
model.bid = 1
|
18
|
-
model.price = 2
|
19
|
-
expect(model).to be_valid
|
20
|
-
end
|
21
|
-
|
22
|
-
specify "first field equal to the second" do
|
23
|
-
model.bid = 1
|
24
|
-
model.price = 1
|
25
|
-
expect(model).to be_invalid
|
26
|
-
end
|
27
|
-
|
28
|
-
specify "first field greater than the second" do
|
29
|
-
model.bid = 1
|
30
|
-
model.price = 0
|
31
|
-
expect(model).to be_invalid
|
32
|
-
end
|
33
|
-
|
34
|
-
specify "first field is empty, the second is blank" do
|
35
|
-
model.bid = ""
|
36
|
-
model.price = " "
|
37
|
-
expect(model).to be_valid
|
38
|
-
end
|
39
|
-
|
40
|
-
specify "first field is blank, the second is empty" do
|
41
|
-
model.bid = " "
|
42
|
-
model.price = ""
|
43
|
-
expect(model).to be_invalid
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
context "value less than or equal to" do
|
48
|
-
let(:klass) do
|
49
|
-
Class.new do
|
50
|
-
include ActiveModel::Validations
|
51
|
-
attr_accessor :bid, :price, :name
|
52
|
-
validates :bid, equality: { operator: :less_than_or_equal_to, to: :price }
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
subject(:model){ klass.new }
|
57
|
-
|
58
|
-
specify "first field equal to the second" do
|
59
|
-
model.bid = 1
|
60
|
-
model.price = 1
|
61
|
-
expect(model).to be_valid
|
62
|
-
end
|
63
|
-
|
64
|
-
specify "first field less than the second" do
|
65
|
-
model.bid = 1
|
66
|
-
model.price = 2
|
67
|
-
expect(model).to be_valid
|
68
|
-
end
|
69
|
-
|
70
|
-
specify "first field greater than the second" do
|
71
|
-
model.bid = 1
|
72
|
-
model.price = 0
|
73
|
-
expect(model).to be_invalid
|
74
|
-
end
|
75
|
-
|
76
|
-
specify "first field is empty, the second is blank" do
|
77
|
-
model.bid = ""
|
78
|
-
model.price = " "
|
79
|
-
expect(model).to be_valid
|
80
|
-
end
|
81
|
-
|
82
|
-
specify "first field is blank, the second is empty" do
|
83
|
-
model.bid = " "
|
84
|
-
model.price = ""
|
85
|
-
expect(model).to be_invalid
|
86
|
-
end
|
87
|
-
|
88
|
-
specify "both fields are blank" do
|
89
|
-
model.bid = model.price = ""
|
90
|
-
expect(model).to be_valid
|
91
|
-
end
|
92
|
-
|
93
|
-
specify "both fields are empty" do
|
94
|
-
model.bid = model.price = " "
|
95
|
-
expect(model).to be_valid
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
context "value greater than" do
|
100
|
-
let(:klass) do
|
101
|
-
Class.new do
|
102
|
-
include ActiveModel::Validations
|
103
|
-
attr_accessor :bid, :price, :name
|
104
|
-
validates :bid, equality: { operator: :greater_than, to: :price }
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
subject(:model){ klass.new }
|
109
|
-
|
110
|
-
specify "first field greater than the second" do
|
111
|
-
model.bid = 1
|
112
|
-
model.price = 0
|
113
|
-
expect(model).to be_valid
|
114
|
-
end
|
115
|
-
|
116
|
-
specify "first field less than the second" do
|
117
|
-
model.bid = 1
|
118
|
-
model.price = 2
|
119
|
-
expect(model).to be_invalid
|
120
|
-
end
|
121
|
-
|
122
|
-
specify "first field equal to the second" do
|
123
|
-
model.bid = 1
|
124
|
-
model.price = 1
|
125
|
-
expect(model).to be_invalid
|
126
|
-
end
|
127
|
-
|
128
|
-
specify "first field is empty, the second is blank" do
|
129
|
-
model.bid = ""
|
130
|
-
model.price = " "
|
131
|
-
expect(model).to be_invalid
|
132
|
-
end
|
133
|
-
|
134
|
-
specify "first field is blank, the second is empty" do
|
135
|
-
model.bid = " "
|
136
|
-
model.price = ""
|
137
|
-
expect(model).to be_valid
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
context "value greater than or equal to" do
|
142
|
-
let(:klass) do
|
143
|
-
Class.new do
|
144
|
-
include ActiveModel::Validations
|
145
|
-
attr_accessor :bid, :price, :name
|
146
|
-
validates :bid, equality: { operator: :greater_than_or_equal_to, to: :price }
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
subject(:model){ klass.new }
|
151
|
-
|
152
|
-
specify "first field equal to the second" do
|
153
|
-
model.bid = 1
|
154
|
-
model.price = 1
|
155
|
-
expect(model).to be_valid
|
156
|
-
end
|
157
|
-
|
158
|
-
specify "first field greater than the second" do
|
159
|
-
model.bid = 1
|
160
|
-
model.price = 0
|
161
|
-
expect(model).to be_valid
|
162
|
-
end
|
163
|
-
|
164
|
-
specify "first field less than the second" do
|
165
|
-
model.bid = 1
|
166
|
-
model.price = 2
|
167
|
-
expect(model).to be_invalid
|
168
|
-
end
|
169
|
-
|
170
|
-
specify "first field is empty, the second is blank" do
|
171
|
-
model.bid = ""
|
172
|
-
model.price = " "
|
173
|
-
expect(model).to be_invalid
|
174
|
-
end
|
175
|
-
|
176
|
-
specify "first field is blank, the second is empty" do
|
177
|
-
model.bid = " "
|
178
|
-
model.price = ""
|
179
|
-
expect(model).to be_valid
|
180
|
-
end
|
181
|
-
|
182
|
-
specify "both fields are blank" do
|
183
|
-
model.bid = model.price = ""
|
184
|
-
expect(model).to be_valid
|
185
|
-
end
|
186
|
-
|
187
|
-
specify "both fields are empty" do
|
188
|
-
model.bid = model.price = " "
|
189
|
-
expect(model).to be_valid
|
190
|
-
end
|
191
|
-
end
|
192
|
-
|
193
|
-
context "value equal to" do
|
194
|
-
let(:klass) do
|
195
|
-
Class.new do
|
196
|
-
include ActiveModel::Validations
|
197
|
-
attr_accessor :bid, :price, :name
|
198
|
-
validates :bid, equality: { operator: :equal_to, to: :price }
|
199
|
-
end
|
200
|
-
end
|
201
|
-
|
202
|
-
subject(:model){ klass.new }
|
203
|
-
|
204
|
-
specify "first field equal to the second" do
|
205
|
-
model.bid = 1
|
206
|
-
model.price = 1
|
207
|
-
expect(model).to be_valid
|
208
|
-
end
|
209
|
-
|
210
|
-
specify "first field less than the second" do
|
211
|
-
model.bid = 1
|
212
|
-
model.price = 2
|
213
|
-
expect(model).to be_invalid
|
214
|
-
end
|
215
|
-
|
216
|
-
specify "first field greater than the second" do
|
217
|
-
model.bid = 1
|
218
|
-
model.price = 0
|
219
|
-
expect(model).to be_invalid
|
220
|
-
end
|
221
|
-
|
222
|
-
specify "first field has value, the second is nil" do
|
223
|
-
model.bid = 1
|
224
|
-
model.price = nil
|
225
|
-
expect(model).to be_invalid
|
226
|
-
end
|
227
|
-
|
228
|
-
specify "first field is nil, the second has value" do
|
229
|
-
model.bid = nil
|
230
|
-
model.price = 1
|
231
|
-
expect(model).to be_invalid
|
232
|
-
end
|
233
|
-
|
234
|
-
specify "both fields are nil" do
|
235
|
-
model.bid = model.price = nil
|
236
|
-
expect(model).to be_valid
|
237
|
-
end
|
238
|
-
|
239
|
-
specify "first field is empty, the second is blank" do
|
240
|
-
model.bid = ""
|
241
|
-
model.price = " "
|
242
|
-
expect(model).to be_invalid
|
243
|
-
end
|
244
|
-
|
245
|
-
specify "first field is blank, the second is empty" do
|
246
|
-
model.bid = " "
|
247
|
-
model.price = ""
|
248
|
-
expect(model).to be_invalid
|
249
|
-
end
|
250
|
-
|
251
|
-
specify "both fields are blank" do
|
252
|
-
model.bid = model.price = ""
|
253
|
-
expect(model).to be_valid
|
254
|
-
end
|
255
|
-
|
256
|
-
specify "both fields are empty" do
|
257
|
-
model.bid = model.price = " "
|
258
|
-
expect(model).to be_valid
|
259
|
-
end
|
260
|
-
end
|
261
|
-
|
262
|
-
context "value not equal to" do
|
263
|
-
let(:klass) do
|
264
|
-
Class.new do
|
265
|
-
include ActiveModel::Validations
|
266
|
-
attr_accessor :bid, :price, :name
|
267
|
-
validates :bid, equality: { operator: :not_equal_to, to: :price }
|
268
|
-
end
|
269
|
-
end
|
270
|
-
|
271
|
-
subject(:model){ klass.new }
|
272
|
-
|
273
|
-
specify "first field equal to the second" do
|
274
|
-
model.bid = 1
|
275
|
-
model.price = 1
|
276
|
-
expect(model).to be_invalid
|
277
|
-
end
|
278
|
-
|
279
|
-
specify "first field less than the second" do
|
280
|
-
model.bid = 1
|
281
|
-
model.price = 2
|
282
|
-
expect(model).to be_valid
|
283
|
-
end
|
284
|
-
|
285
|
-
specify "first field greater than the second" do
|
286
|
-
model.bid = 1
|
287
|
-
model.price = 0
|
288
|
-
expect(model).to be_valid
|
289
|
-
end
|
290
|
-
|
291
|
-
specify "first field has value, the second is nil" do
|
292
|
-
model.bid = 1
|
293
|
-
model.price = nil
|
294
|
-
expect(model).to be_valid
|
295
|
-
end
|
296
|
-
|
297
|
-
specify "first field is nil, the second has value" do
|
298
|
-
model.bid = nil
|
299
|
-
model.price = 1
|
300
|
-
expect(model).to be_valid
|
301
|
-
end
|
302
|
-
|
303
|
-
specify "both fields are nil" do
|
304
|
-
model.bid = model.price = nil
|
305
|
-
expect(model).to be_invalid
|
306
|
-
end
|
307
|
-
|
308
|
-
specify "first field is empty, the second is blank" do
|
309
|
-
model.bid = ""
|
310
|
-
model.price = " "
|
311
|
-
expect(model).to be_valid
|
312
|
-
end
|
313
|
-
|
314
|
-
specify "first field is blank, the second is empty" do
|
315
|
-
model.bid = " "
|
316
|
-
model.price = ""
|
317
|
-
expect(model).to be_valid
|
318
|
-
end
|
319
|
-
|
320
|
-
specify "both fields are blank" do
|
321
|
-
model.bid = model.price = ""
|
322
|
-
expect(model).to be_invalid
|
323
|
-
end
|
324
|
-
|
325
|
-
specify "both fields are empty" do
|
326
|
-
model.bid = model.price = " "
|
327
|
-
expect(model).to be_invalid
|
328
|
-
end
|
329
|
-
end
|
330
|
-
|
331
|
-
#it { should ensure_equality_of(:bid).to(:price).operator(:less_than) }
|
332
|
-
#it { should_not ensure_equality_of(:bid).to(:name).operator(:less_than) }
|
333
|
-
|
334
|
-
end
|