validates_cpf_cnpj 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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