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.
@@ -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 - Allow a nil value to be valid
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 - Execute validation when :if evaluates true
51
- :unless - Execute validation when :unless evaluates false
52
- :on - Specify validation context (e.g :save, :create or :update). Default is :save
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
 
@@ -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).merge(configuration)
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).merge(configuration)
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).merge(configuration)
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
@@ -1,3 +1,3 @@
1
1
  module ValidatesCpfCnpj
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -8,40 +8,14 @@ describe ValidatesCpfCnpj do
8
8
  end
9
9
 
10
10
  context 'should be invalid when' do
11
- it 'value is 1234567890' do
12
- person = Person.new(:code => '1234567890')
13
- person.validates_cpf(:code)
14
- person.errors.should_not be_empty
15
- end
16
-
17
- it 'value is 12345678901' do
18
- person = Person.new(:code => '12345678901')
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
- it 'value is 12345678901234' do
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
- it 'value is 05393.625/0001-84' do
154
- person = Person.new(:code => '05393.625/0001-84')
155
- person.validates_cnpj(:code)
156
- person.errors.should_not be_empty
157
- end
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
- it 'value is 123.456.789-01' do
260
- person = Person.new(:code => '123.456.789-01')
261
- person.validates_cpf_or_cnpj(:code)
262
- person.errors.should_not be_empty
263
- end
264
-
265
- it 'value is 800337.878-83' do
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.1.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: 2012-07-04 00:00:00.000000000 Z
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: &79122770 !ruby/object:Gem::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: *79122770
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: &79122560 !ruby/object:Gem::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: *79122560
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: &79122350 !ruby/object:Gem::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: *79122350
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: &79122100 !ruby/object:Gem::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: *79122100
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.10
117
+ rubygems_version: 1.8.24
98
118
  signing_key:
99
119
  specification_version: 3
100
120
  summary: CPF/CNPJ ActiveModel validations