validates_cpf_cnpj 0.1.0 → 0.2.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.
- data/README.rdoc +7 -7
- data/lib/validates_cpf_cnpj.rb +3 -9
- data/lib/validates_cpf_cnpj/cpf.rb +5 -0
- data/lib/validates_cpf_cnpj/version.rb +1 -1
- data/spec/lib/validates_cpf_cnpj_spec.rb +34 -159
- metadata +31 -11
data/README.rdoc
CHANGED
@@ -21,7 +21,7 @@ As gem:
|
|
21
21
|
|
22
22
|
Validating a CPF attribute:
|
23
23
|
|
24
|
-
class Patient
|
24
|
+
class Patient < ActiveRecord::Base
|
25
25
|
validates_cpf :cpf_attr
|
26
26
|
# or
|
27
27
|
validates :cpf_attr, :cpf => true
|
@@ -29,7 +29,7 @@ Validating a CPF attribute:
|
|
29
29
|
|
30
30
|
Validating a CNPJ attribute:
|
31
31
|
|
32
|
-
class Supplier
|
32
|
+
class Supplier < ActiveRecord::Base
|
33
33
|
validates_cnpj :cnpj_attr
|
34
34
|
# or
|
35
35
|
validates :cnpj_attr, :cnpj => true
|
@@ -37,7 +37,7 @@ Validating a CNPJ attribute:
|
|
37
37
|
|
38
38
|
Validating an attribute that can store both CPF or CNPJ:
|
39
39
|
|
40
|
-
class Customer
|
40
|
+
class Customer < ActiveRecord::Base
|
41
41
|
validates_cpf_or_cnpj :cpf_cnpj_attr
|
42
42
|
# or
|
43
43
|
validates :cpf_cnpj_attr, :cpf_or_cnpj => true
|
@@ -45,11 +45,11 @@ Validating an attribute that can store both CPF or CNPJ:
|
|
45
45
|
|
46
46
|
Regular validation options:
|
47
47
|
|
48
|
-
:allow_nil -
|
48
|
+
:allow_nil - Allows a nil value to be valid
|
49
49
|
:allow_blank - Allows a nil or empty string value to be valid
|
50
|
-
:if -
|
51
|
-
:unless -
|
52
|
-
:on -
|
50
|
+
:if - Executes validation when :if evaluates true
|
51
|
+
:unless - Executes validation when :unless evaluates false
|
52
|
+
:on - Specifies validation context (e.g :save, :create or :update). Default is :save
|
53
53
|
|
54
54
|
== Contributing
|
55
55
|
|
data/lib/validates_cpf_cnpj.rb
CHANGED
@@ -32,24 +32,18 @@ module ActiveModel
|
|
32
32
|
|
33
33
|
module HelperMethods
|
34
34
|
def validates_cpf(*attr_names)
|
35
|
-
configuration = { :on => :save }
|
36
|
-
configuration.update(attr_names.extract_options!)
|
37
35
|
raise ArgumentError, "You need to supply at least one attribute" if attr_names.empty?
|
38
|
-
validates_with CpfValidator, _merge_attributes(attr_names)
|
36
|
+
validates_with CpfValidator, _merge_attributes(attr_names)
|
39
37
|
end
|
40
38
|
|
41
39
|
def validates_cnpj(*attr_names)
|
42
|
-
configuration = { :on => :save }
|
43
|
-
configuration.update(attr_names.extract_options!)
|
44
40
|
raise ArgumentError, "You need to supply at least one attribute" if attr_names.empty?
|
45
|
-
validates_with CnpjValidator, _merge_attributes(attr_names)
|
41
|
+
validates_with CnpjValidator, _merge_attributes(attr_names)
|
46
42
|
end
|
47
43
|
|
48
44
|
def validates_cpf_or_cnpj(*attr_names)
|
49
|
-
configuration = { :on => :save }
|
50
|
-
configuration.update(attr_names.extract_options!)
|
51
45
|
raise ArgumentError, "You need to supply at least one attribute" if attr_names.empty?
|
52
|
-
validates_with CpfOrCnpjValidator, _merge_attributes(attr_names)
|
46
|
+
validates_with CpfOrCnpjValidator, _merge_attributes(attr_names)
|
53
47
|
end
|
54
48
|
end
|
55
49
|
end
|
@@ -1,7 +1,12 @@
|
|
1
1
|
module ValidatesCpfCnpj
|
2
2
|
module Cpf
|
3
|
+
@@invalid_cpfs = %w{12345678909 11111111111 22222222222 33333333333 44444444444 55555555555 66666666666 77777777777 88888888888 99999999999 00000000000}
|
4
|
+
|
3
5
|
def self.valid?(value)
|
4
6
|
value.gsub!(/[^0-9]/, '')
|
7
|
+
|
8
|
+
return false if @@invalid_cpfs.member?(value)
|
9
|
+
|
5
10
|
digit = value.slice(-2, 2)
|
6
11
|
control = ''
|
7
12
|
if value.size == 11
|
@@ -8,40 +8,14 @@ describe ValidatesCpfCnpj do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
context 'should be invalid when' do
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
person.validates_cpf(:code)
|
20
|
-
person.errors.should_not be_empty
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'value is ABC80033787883' do
|
24
|
-
person = Person.new(:code => 'ABC45678901')
|
25
|
-
person.validates_cpf(:code)
|
26
|
-
person.errors.should_not be_empty
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'value is 123.456.789-01' do
|
30
|
-
person = Person.new(:code => '123.456.789-01')
|
31
|
-
person.validates_cpf(:code)
|
32
|
-
person.errors.should_not be_empty
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'value is 800337.878-83' do
|
36
|
-
person = Person.new(:code => '800337.878-83')
|
37
|
-
person.validates_cpf(:code)
|
38
|
-
person.errors.should_not be_empty
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'value is 800337878-83' do
|
42
|
-
person = Person.new(:code => '800337878-83')
|
43
|
-
person.validates_cpf(:code)
|
44
|
-
person.errors.should_not be_empty
|
11
|
+
invalid_cpfs = %w{1234567890 12345678901 ABC45678901 123.456.789-01 800337.878-83 800337878-83}
|
12
|
+
|
13
|
+
invalid_cpfs.each do |cpf|
|
14
|
+
it "value is #{cpf}" do
|
15
|
+
person = Person.new(:code => cpf)
|
16
|
+
person.validates_cpf(:code)
|
17
|
+
person.errors.should_not be_empty
|
18
|
+
end
|
45
19
|
end
|
46
20
|
|
47
21
|
it 'value is nil' do
|
@@ -55,6 +29,17 @@ describe ValidatesCpfCnpj do
|
|
55
29
|
person.validates_cpf(:code)
|
56
30
|
person.errors.should_not be_empty
|
57
31
|
end
|
32
|
+
|
33
|
+
# This numbers will be considered valid by the algorithm but is known as not valid on real world, so they should be blocked
|
34
|
+
blocked_cpfs = %w{12345678909 11111111111 22222222222 33333333333 44444444444 55555555555 66666666666 77777777777 88888888888 99999999999 00000000000}
|
35
|
+
|
36
|
+
blocked_cpfs.each do |cpf|
|
37
|
+
it "is a well know invalid number: #{cpf}" do
|
38
|
+
person = Person.new(:code => cpf)
|
39
|
+
person.validates_cpf(:code)
|
40
|
+
person.errors.should_not be_empty
|
41
|
+
end
|
42
|
+
end
|
58
43
|
end
|
59
44
|
|
60
45
|
context 'should be valid when' do
|
@@ -120,47 +105,17 @@ describe ValidatesCpfCnpj do
|
|
120
105
|
end
|
121
106
|
|
122
107
|
context 'should be invalid when' do
|
123
|
-
it 'value is 1234567890123' do
|
124
|
-
person = Person.new(:code => '1234567890123')
|
125
|
-
person.validates_cnpj(:code)
|
126
|
-
person.errors.should_not be_empty
|
127
|
-
end
|
128
108
|
|
129
|
-
|
130
|
-
person = Person.new(:code => '12345678901234')
|
131
|
-
person.validates_cnpj(:code)
|
132
|
-
person.errors.should_not be_empty
|
133
|
-
end
|
134
|
-
|
135
|
-
it 'value is 123456789012345' do
|
136
|
-
person = Person.new(:code => '123456789012345')
|
137
|
-
person.validates_cnpj(:code)
|
138
|
-
person.errors.should_not be_empty
|
139
|
-
end
|
140
|
-
|
141
|
-
it 'value is ABC05393625000184' do
|
142
|
-
person = Person.new(:code => 'ABC05393625000184')
|
143
|
-
person.validates_cnpj(:code)
|
144
|
-
person.errors.should_not be_empty
|
145
|
-
end
|
146
|
-
|
147
|
-
it 'value is 12.345.678/9012-34' do
|
148
|
-
person = Person.new(:code => '12.345.678/9012-34')
|
149
|
-
person.validates_cnpj(:code)
|
150
|
-
person.errors.should_not be_empty
|
151
|
-
end
|
109
|
+
invalid_cnpjs = %w{1234567890123 12345678901234 123456789012345 ABC05393625000184 12.345.678/9012-34 05393.625/0001-84 05393.6250001-84}
|
152
110
|
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
it 'value is 05393.6250001-84' do
|
160
|
-
person = Person.new(:code => '05393.6250001-84')
|
161
|
-
person.validates_cnpj(:code)
|
162
|
-
person.errors.should_not be_empty
|
111
|
+
invalid_cnpjs.each do |cnpj|
|
112
|
+
it "value is #{cnpj}" do
|
113
|
+
person = Person.new(:code => cnpj)
|
114
|
+
person.validates_cnpj(:code)
|
115
|
+
person.errors.should_not be_empty
|
116
|
+
end
|
163
117
|
end
|
118
|
+
|
164
119
|
|
165
120
|
it 'value is nil' do
|
166
121
|
person = Person.new(:code => nil)
|
@@ -238,94 +193,14 @@ describe ValidatesCpfCnpj do
|
|
238
193
|
end
|
239
194
|
|
240
195
|
context 'should be invalid when' do
|
241
|
-
it 'value is 1234567890' do
|
242
|
-
person = Person.new(:code => '1234567890')
|
243
|
-
person.validates_cpf_or_cnpj(:code)
|
244
|
-
person.errors.should_not be_empty
|
245
|
-
end
|
246
|
-
|
247
|
-
it 'value is 12345678901' do
|
248
|
-
person = Person.new(:code => '12345678901')
|
249
|
-
person.validates_cpf_or_cnpj(:code)
|
250
|
-
person.errors.should_not be_empty
|
251
|
-
end
|
252
|
-
|
253
|
-
it 'value is ABC80033787883' do
|
254
|
-
person = Person.new(:code => 'ABC45678901')
|
255
|
-
person.validates_cpf_or_cnpj(:code)
|
256
|
-
person.errors.should_not be_empty
|
257
|
-
end
|
258
196
|
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
person = Person.new(:code => '800337.878-83')
|
267
|
-
person.validates_cpf_or_cnpj(:code)
|
268
|
-
person.errors.should_not be_empty
|
269
|
-
end
|
270
|
-
|
271
|
-
it 'value is 800337878-83' do
|
272
|
-
person = Person.new(:code => '800337878-83')
|
273
|
-
person.validates_cpf_or_cnpj(:code)
|
274
|
-
person.errors.should_not be_empty
|
275
|
-
end
|
276
|
-
|
277
|
-
it 'value is nil' do
|
278
|
-
person = Person.new(:code => nil)
|
279
|
-
person.validates_cpf_or_cnpj(:code)
|
280
|
-
person.errors.should_not be_empty
|
281
|
-
end
|
282
|
-
|
283
|
-
it 'value is empty' do
|
284
|
-
person = Person.new(:code => '')
|
285
|
-
person.validates_cpf_or_cnpj(:code)
|
286
|
-
person.errors.should_not be_empty
|
287
|
-
end
|
288
|
-
|
289
|
-
it 'value is 1234567890123' do
|
290
|
-
person = Person.new(:code => '1234567890123')
|
291
|
-
person.validates_cpf_or_cnpj(:code)
|
292
|
-
person.errors.should_not be_empty
|
293
|
-
end
|
294
|
-
|
295
|
-
it 'value is 12345678901234' do
|
296
|
-
person = Person.new(:code => '12345678901234')
|
297
|
-
person.validates_cpf_or_cnpj(:code)
|
298
|
-
person.errors.should_not be_empty
|
299
|
-
end
|
300
|
-
|
301
|
-
it 'value is 123456789012345' do
|
302
|
-
person = Person.new(:code => '123456789012345')
|
303
|
-
person.validates_cpf_or_cnpj(:code)
|
304
|
-
person.errors.should_not be_empty
|
305
|
-
end
|
306
|
-
|
307
|
-
it 'value is ABC05393625000184' do
|
308
|
-
person = Person.new(:code => 'ABC05393625000184')
|
309
|
-
person.validates_cpf_or_cnpj(:code)
|
310
|
-
person.errors.should_not be_empty
|
311
|
-
end
|
312
|
-
|
313
|
-
it 'value is 12.345.678/9012-34' do
|
314
|
-
person = Person.new(:code => '12.345.678/9012-34')
|
315
|
-
person.validates_cpf_or_cnpj(:code)
|
316
|
-
person.errors.should_not be_empty
|
317
|
-
end
|
318
|
-
|
319
|
-
it 'value is 05393.625/0001-84' do
|
320
|
-
person = Person.new(:code => '05393.625/0001-84')
|
321
|
-
person.validates_cpf_or_cnpj(:code)
|
322
|
-
person.errors.should_not be_empty
|
323
|
-
end
|
324
|
-
|
325
|
-
it 'value is 05393.6250001-84' do
|
326
|
-
person = Person.new(:code => '05393.6250001-84')
|
327
|
-
person.validates_cpf_or_cnpj(:code)
|
328
|
-
person.errors.should_not be_empty
|
197
|
+
invalid_numbers = %w{1234567890 12345678901 ABC45678901 123.456.789-01 800337.878-83 800337878-83 1234567890123 12345678901234 123456789012345 ABC05393625000184 12.345.678/9012-34 05393.625/0001-84 05393.6250001-84}
|
198
|
+
invalid_numbers.each do |number|
|
199
|
+
it "value is #{number}" do
|
200
|
+
person = Person.new(:code => number)
|
201
|
+
person.validates_cpf_or_cnpj(:code)
|
202
|
+
person.errors.should_not be_empty
|
203
|
+
end
|
329
204
|
end
|
330
205
|
|
331
206
|
it 'value is nil' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: validates_cpf_cnpj
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-01-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: rspec
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: '0'
|
33
38
|
type: :development
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: activerecord
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,10 +53,15 @@ dependencies:
|
|
43
53
|
version: '0'
|
44
54
|
type: :development
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: activemodel
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ! '>='
|
@@ -54,7 +69,12 @@ dependencies:
|
|
54
69
|
version: 3.0.0
|
55
70
|
type: :runtime
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 3.0.0
|
58
78
|
description: CPF and CNPJ validations for ActiveModel and Rails
|
59
79
|
email:
|
60
80
|
- naldo_ds@yahoo.com.br
|
@@ -94,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
94
114
|
version: '0'
|
95
115
|
requirements: []
|
96
116
|
rubyforge_project: validates_cpf_cnpj
|
97
|
-
rubygems_version: 1.8.
|
117
|
+
rubygems_version: 1.8.24
|
98
118
|
signing_key:
|
99
119
|
specification_version: 3
|
100
120
|
summary: CPF/CNPJ ActiveModel validations
|