validates_cpf_cnpj 0.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.
- data/.gitignore +4 -0
- data/.rspec +1 -0
- data/Gemfile +4 -0
- data/README.rdoc +66 -0
- data/Rakefile +6 -0
- data/lib/validates_cpf_cnpj/cnpj.rb +23 -0
- data/lib/validates_cpf_cnpj/cpf.rb +23 -0
- data/lib/validates_cpf_cnpj/version.rb +3 -0
- data/lib/validates_cpf_cnpj.rb +56 -0
- data/spec/lib/validates_cpf_cnpj_spec.rb +452 -0
- data/spec/spec_helper.rb +18 -0
- data/validates_cpf_cnpj.gemspec +26 -0
- metadata +101 -0
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour
|
data/Gemfile
ADDED
data/README.rdoc
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
= ValidatesCpfCnpj
|
2
|
+
|
3
|
+
* Source: http://github.com/rfs/validates_cpf_cnpj
|
4
|
+
* Bugs: http://github.com/rfs/validates_cpf_cnpj/issues
|
5
|
+
|
6
|
+
== Description
|
7
|
+
|
8
|
+
CPF and CNPJ validations for ActiveModel and Rails.
|
9
|
+
|
10
|
+
== Installation
|
11
|
+
|
12
|
+
As gem:
|
13
|
+
|
14
|
+
# in Gemfile
|
15
|
+
gem 'validates_cpf_cnpj'
|
16
|
+
|
17
|
+
# Run bundler
|
18
|
+
$ bundle install
|
19
|
+
|
20
|
+
== Usage
|
21
|
+
|
22
|
+
Validating a CPF attribute:
|
23
|
+
|
24
|
+
class Patient
|
25
|
+
validates_cpf :cpf_attr
|
26
|
+
# or
|
27
|
+
validates :cpf_attr, :cpf => true
|
28
|
+
end
|
29
|
+
|
30
|
+
Validating a CNPJ attribute:
|
31
|
+
|
32
|
+
class Supplier
|
33
|
+
validates_cnpj :cnpj_attr
|
34
|
+
# or
|
35
|
+
validates :cnpj_attr, :cnpj => true
|
36
|
+
end
|
37
|
+
|
38
|
+
Validating an attribute that can store both CPF or CNPJ:
|
39
|
+
|
40
|
+
class Customer
|
41
|
+
validates_cpf_or_cnpj :cpf_cnpj_attr
|
42
|
+
# or
|
43
|
+
validates :cpf_cnpj_attr, :cpf_or_cnpj => true
|
44
|
+
end
|
45
|
+
|
46
|
+
Regular validation options:
|
47
|
+
|
48
|
+
:allow_nil - Allow a nil value to be valid
|
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
|
53
|
+
|
54
|
+
== Contributing
|
55
|
+
|
56
|
+
Feel free to fork, fix and send me a pull request.
|
57
|
+
|
58
|
+
== Maintainers
|
59
|
+
|
60
|
+
* {Reginaldo Francisco}[http://github.com/rfs]
|
61
|
+
|
62
|
+
== License
|
63
|
+
|
64
|
+
Released under the MIT license:
|
65
|
+
|
66
|
+
* http://www.opensource.org/licenses/MIT
|
data/Rakefile
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
module ValidatesCpfCnpj
|
2
|
+
module Cnpj
|
3
|
+
def self.valid?(value)
|
4
|
+
value.gsub!(/[^0-9]/, '')
|
5
|
+
digit = value.slice(-2, 2)
|
6
|
+
control = ''
|
7
|
+
if value.size == 14
|
8
|
+
factor = 0
|
9
|
+
2.times do |i|
|
10
|
+
sum = 0;
|
11
|
+
12.times do |j|
|
12
|
+
sum += value.slice(j, 1).to_i * ((11 + i - j) % 8 + 2)
|
13
|
+
end
|
14
|
+
sum += factor * 2 if i == 1
|
15
|
+
factor = 11 - sum % 11
|
16
|
+
factor = 0 if factor > 9
|
17
|
+
control << factor.to_s
|
18
|
+
end
|
19
|
+
end
|
20
|
+
control == digit
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module ValidatesCpfCnpj
|
2
|
+
module Cpf
|
3
|
+
def self.valid?(value)
|
4
|
+
value.gsub!(/[^0-9]/, '')
|
5
|
+
digit = value.slice(-2, 2)
|
6
|
+
control = ''
|
7
|
+
if value.size == 11
|
8
|
+
factor = 0
|
9
|
+
2.times do |i|
|
10
|
+
sum = 0
|
11
|
+
9.times do |j|
|
12
|
+
sum += value.slice(j, 1).to_i * (10 + i - j)
|
13
|
+
end
|
14
|
+
sum += (factor * 2) if i == 1
|
15
|
+
factor = (sum * 10) % 11
|
16
|
+
factor = 0 if factor == 10
|
17
|
+
control << factor.to_s
|
18
|
+
end
|
19
|
+
end
|
20
|
+
control == digit
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'active_model'
|
2
|
+
require 'validates_cpf_cnpj/cpf'
|
3
|
+
require 'validates_cpf_cnpj/cnpj'
|
4
|
+
|
5
|
+
module ActiveModel
|
6
|
+
module Validations
|
7
|
+
class CpfOrCnpjValidator < ActiveModel::EachValidator
|
8
|
+
include ValidatesCpfCnpj
|
9
|
+
|
10
|
+
def validate_each(record, attr_name, value)
|
11
|
+
return if (options[:allow_nil] and value.nil?) or (options[:allow_blank] and value.blank?)
|
12
|
+
return if (options[:if] == false) or (options[:unless] == true)
|
13
|
+
return if (options[:on].to_s == 'create' and not record.new_record?) or (options[:on].to_s == 'update' and record.new_record?)
|
14
|
+
|
15
|
+
if value.to_s.gsub(/[^0-9]/, '').length <= 11
|
16
|
+
if (not value.to_s.match(/\A\d{11}\z/) and not value.to_s.match(/\A\d{3}\.\d{3}\.\d{3}\-\d{2}\z/)) or not Cpf.valid?(value)
|
17
|
+
record.errors.add(attr_name)
|
18
|
+
end
|
19
|
+
else
|
20
|
+
if (not value.to_s.match(/\A\d{14}\z/) and not value.to_s.match(/\A\d{2}\.\d{3}\.\d{3}\/\d{4}\-\d{2}\z/)) or not Cnpj.valid?(value)
|
21
|
+
record.errors.add(attr_name)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class CpfValidator < CpfOrCnpjValidator
|
28
|
+
end
|
29
|
+
|
30
|
+
class CnpjValidator < CpfOrCnpjValidator
|
31
|
+
end
|
32
|
+
|
33
|
+
module HelperMethods
|
34
|
+
def validates_cpf(*attr_names)
|
35
|
+
configuration = { :on => :save }
|
36
|
+
configuration.update(attr_names.extract_options!)
|
37
|
+
raise ArgumentError, "You need to supply at least one attribute" if attr_names.empty?
|
38
|
+
validates_with CpfValidator, _merge_attributes(attr_names).merge(configuration)
|
39
|
+
end
|
40
|
+
|
41
|
+
def validates_cnpj(*attr_names)
|
42
|
+
configuration = { :on => :save }
|
43
|
+
configuration.update(attr_names.extract_options!)
|
44
|
+
raise ArgumentError, "You need to supply at least one attribute" if attr_names.empty?
|
45
|
+
validates_with CnpjValidator, _merge_attributes(attr_names).merge(configuration)
|
46
|
+
end
|
47
|
+
|
48
|
+
def validates_cpf_or_cnpj(*attr_names)
|
49
|
+
configuration = { :on => :save }
|
50
|
+
configuration.update(attr_names.extract_options!)
|
51
|
+
raise ArgumentError, "You need to supply at least one attribute" if attr_names.empty?
|
52
|
+
validates_with CpfOrCnpjValidator, _merge_attributes(attr_names).merge(configuration)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,452 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ValidatesCpfCnpj do
|
4
|
+
describe 'validates_cpf' do
|
5
|
+
it 'should raise an ArgumentError when no attribute is informed' do
|
6
|
+
person = Person.new
|
7
|
+
lambda { person.validates_cpf }.should raise_exception(ArgumentError, 'You need to supply at least one attribute')
|
8
|
+
end
|
9
|
+
|
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
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'value is nil' do
|
48
|
+
person = Person.new(:code => nil)
|
49
|
+
person.validates_cpf(:code)
|
50
|
+
person.errors.should_not be_empty
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'value is empty' do
|
54
|
+
person = Person.new(:code => '')
|
55
|
+
person.validates_cpf(:code)
|
56
|
+
person.errors.should_not be_empty
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context 'should be valid when' do
|
61
|
+
it 'value is 80033787883' do
|
62
|
+
person = Person.new(:code => '80033787883')
|
63
|
+
person.validates_cpf(:code)
|
64
|
+
person.errors.should be_empty
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'value is 800.337.878-83' do
|
68
|
+
person = Person.new(:code => '800.337.878-83')
|
69
|
+
person.validates_cpf(:code)
|
70
|
+
person.errors.should be_empty
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'value is nil and :allow_nil or :allow_blank is true' do
|
74
|
+
person = Person.new(:code => nil)
|
75
|
+
person.validates_cpf(:code, :allow_nil => true)
|
76
|
+
person.errors.should be_empty
|
77
|
+
person.validates_cpf(:code, :allow_blank => true)
|
78
|
+
person.errors.should be_empty
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'value is empty and :allow_blank is true' do
|
82
|
+
person = Person.new(:code => '')
|
83
|
+
person.validates_cpf(:code, :allow_blank => true)
|
84
|
+
person.errors.should be_empty
|
85
|
+
person.validates_cpf(:code, :allow_nil => true)
|
86
|
+
person.errors.should_not be_empty
|
87
|
+
end
|
88
|
+
|
89
|
+
it ':if option evaluates false' do
|
90
|
+
person = Person.new(:code => '12345678901')
|
91
|
+
person.validates_cpf(:code, :if => false)
|
92
|
+
person.errors.should be_empty
|
93
|
+
end
|
94
|
+
|
95
|
+
it ':unless option evaluates true' do
|
96
|
+
person = Person.new(:code => '12345678901')
|
97
|
+
person.validates_cpf(:code, :unless => true)
|
98
|
+
person.errors.should be_empty
|
99
|
+
end
|
100
|
+
|
101
|
+
it ':on option is :create and the model instance is not a new record' do
|
102
|
+
person = Person.new(:code => '12345678901')
|
103
|
+
person.stub!(:new_record?, false)
|
104
|
+
person.validates_cpf(:code, :on => :create)
|
105
|
+
person.errors.should be_empty
|
106
|
+
end
|
107
|
+
|
108
|
+
it ':on option is :update and the model instance is a new record' do
|
109
|
+
person = Person.new(:code => '12345678901')
|
110
|
+
person.validates_cpf(:code, :on => :update)
|
111
|
+
person.errors.should be_empty
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
describe 'validates_cnpj' do
|
117
|
+
it 'should raise an ArgumentError when no attribute is informed' do
|
118
|
+
person = Person.new
|
119
|
+
lambda { person.validates_cnpj }.should raise_exception(ArgumentError, 'You need to supply at least one attribute')
|
120
|
+
end
|
121
|
+
|
122
|
+
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
|
+
|
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
|
152
|
+
|
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
|
163
|
+
end
|
164
|
+
|
165
|
+
it 'value is nil' do
|
166
|
+
person = Person.new(:code => nil)
|
167
|
+
person.validates_cnpj(:code)
|
168
|
+
person.errors.should_not be_empty
|
169
|
+
end
|
170
|
+
|
171
|
+
it 'value is empty' do
|
172
|
+
person = Person.new(:code => '')
|
173
|
+
person.validates_cnpj(:code)
|
174
|
+
person.errors.should_not be_empty
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
context 'should be valid when' do
|
179
|
+
it 'value is 05393625000184' do
|
180
|
+
person = Person.new(:code => '05393625000184')
|
181
|
+
person.validates_cnpj(:code)
|
182
|
+
person.errors.should be_empty
|
183
|
+
end
|
184
|
+
|
185
|
+
it 'value is 05.393.625/0001-84' do
|
186
|
+
person = Person.new(:code => '05.393.625/0001-84')
|
187
|
+
person.validates_cnpj(:code)
|
188
|
+
person.errors.should be_empty
|
189
|
+
end
|
190
|
+
|
191
|
+
it 'value is nil and :allow_nil or :allow_blank is true' do
|
192
|
+
person = Person.new(:code => nil)
|
193
|
+
person.validates_cnpj(:code, :allow_nil => true)
|
194
|
+
person.errors.should be_empty
|
195
|
+
person.validates_cnpj(:code, :allow_blank => true)
|
196
|
+
person.errors.should be_empty
|
197
|
+
end
|
198
|
+
|
199
|
+
it 'value is empty and :allow_blank is true' do
|
200
|
+
person = Person.new(:code => '')
|
201
|
+
person.validates_cnpj(:code, :allow_blank => true)
|
202
|
+
person.errors.should be_empty
|
203
|
+
person.validates_cnpj(:code, :allow_nil => true)
|
204
|
+
person.errors.should_not be_empty
|
205
|
+
end
|
206
|
+
|
207
|
+
it ':if option evaluates false' do
|
208
|
+
person = Person.new(:code => '12345678901234')
|
209
|
+
person.validates_cnpj(:code, :if => false)
|
210
|
+
person.errors.should be_empty
|
211
|
+
end
|
212
|
+
|
213
|
+
it ':unless option evaluates true' do
|
214
|
+
person = Person.new(:code => '12345678901234')
|
215
|
+
person.validates_cnpj(:code, :unless => true)
|
216
|
+
person.errors.should be_empty
|
217
|
+
end
|
218
|
+
|
219
|
+
it ':on option is :create and the model instance is not a new record' do
|
220
|
+
person = Person.new(:code => '12345678901')
|
221
|
+
person.stub!(:new_record?, false)
|
222
|
+
person.validates_cnpj(:code, :on => :create)
|
223
|
+
person.errors.should be_empty
|
224
|
+
end
|
225
|
+
|
226
|
+
it ':on option is :update and the model instance is a new record' do
|
227
|
+
person = Person.new(:code => '12345678901')
|
228
|
+
person.validates_cnpj(:code, :on => :update)
|
229
|
+
person.errors.should be_empty
|
230
|
+
end
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
describe 'validates_cpf_or_cnpj' do
|
235
|
+
it 'should raise an ArgumentError when no attribute is informed' do
|
236
|
+
person = Person.new
|
237
|
+
lambda { person.validates_cpf_or_cnpj }.should raise_exception(ArgumentError, 'You need to supply at least one attribute')
|
238
|
+
end
|
239
|
+
|
240
|
+
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
|
+
|
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
|
329
|
+
end
|
330
|
+
|
331
|
+
it 'value is nil' do
|
332
|
+
person = Person.new(:code => nil)
|
333
|
+
person.validates_cpf_or_cnpj(:code)
|
334
|
+
person.errors.should_not be_empty
|
335
|
+
end
|
336
|
+
|
337
|
+
it 'value is empty' do
|
338
|
+
person = Person.new(:code => '')
|
339
|
+
person.validates_cpf_or_cnpj(:code)
|
340
|
+
person.errors.should_not be_empty
|
341
|
+
end
|
342
|
+
end
|
343
|
+
|
344
|
+
context 'should be valid when' do
|
345
|
+
it 'value is 80033787883' do
|
346
|
+
person = Person.new(:code => '80033787883')
|
347
|
+
person.validates_cpf_or_cnpj(:code)
|
348
|
+
person.errors.should be_empty
|
349
|
+
end
|
350
|
+
|
351
|
+
it 'value is 800.337.878-83' do
|
352
|
+
person = Person.new(:code => '800.337.878-83')
|
353
|
+
person.validates_cpf_or_cnpj(:code)
|
354
|
+
person.errors.should be_empty
|
355
|
+
end
|
356
|
+
|
357
|
+
it 'value is nil and :allow_nil or :allow_blank is true' do
|
358
|
+
person = Person.new(:code => nil)
|
359
|
+
person.validates_cpf_or_cnpj(:code, :allow_nil => true)
|
360
|
+
person.errors.should be_empty
|
361
|
+
person.validates_cpf_or_cnpj(:code, :allow_blank => true)
|
362
|
+
person.errors.should be_empty
|
363
|
+
end
|
364
|
+
|
365
|
+
it 'value is empty and :allow_blank is true' do
|
366
|
+
person = Person.new(:code => '')
|
367
|
+
person.validates_cpf_or_cnpj(:code, :allow_blank => true)
|
368
|
+
person.errors.should be_empty
|
369
|
+
person.validates_cpf_or_cnpj(:code, :allow_nil => true)
|
370
|
+
person.errors.should_not be_empty
|
371
|
+
end
|
372
|
+
|
373
|
+
it ':if option evaluates false' do
|
374
|
+
person = Person.new(:code => '12345678901')
|
375
|
+
person.validates_cpf_or_cnpj(:code, :if => false)
|
376
|
+
person.errors.should be_empty
|
377
|
+
end
|
378
|
+
|
379
|
+
it ':unless option evaluates true' do
|
380
|
+
person = Person.new(:code => '12345678901')
|
381
|
+
person.validates_cpf_or_cnpj(:code, :unless => true)
|
382
|
+
person.errors.should be_empty
|
383
|
+
end
|
384
|
+
|
385
|
+
it ':on option is :create and the model instance is not a new record' do
|
386
|
+
person = Person.new(:code => '12345678901')
|
387
|
+
person.stub!(:new_record?, false)
|
388
|
+
person.validates_cpf_or_cnpj(:code, :on => :create)
|
389
|
+
person.errors.should be_empty
|
390
|
+
end
|
391
|
+
|
392
|
+
it ':on option is :update and the model instance is a new record' do
|
393
|
+
person = Person.new(:code => '12345678901')
|
394
|
+
person.validates_cpf_or_cnpj(:code, :on => :update)
|
395
|
+
person.errors.should be_empty
|
396
|
+
end
|
397
|
+
|
398
|
+
it 'value is 05393625000184' do
|
399
|
+
person = Person.new(:code => '05393625000184')
|
400
|
+
person.validates_cpf_or_cnpj(:code)
|
401
|
+
person.errors.should be_empty
|
402
|
+
end
|
403
|
+
|
404
|
+
it 'value is 05.393.625/0001-84' do
|
405
|
+
person = Person.new(:code => '05.393.625/0001-84')
|
406
|
+
person.validates_cpf_or_cnpj(:code)
|
407
|
+
person.errors.should be_empty
|
408
|
+
end
|
409
|
+
|
410
|
+
it 'value is nil and :allow_nil or :allow_blank is true' do
|
411
|
+
person = Person.new(:code => nil)
|
412
|
+
person.validates_cpf_or_cnpj(:code, :allow_nil => true)
|
413
|
+
person.errors.should be_empty
|
414
|
+
person.validates_cpf_or_cnpj(:code, :allow_blank => true)
|
415
|
+
person.errors.should be_empty
|
416
|
+
end
|
417
|
+
|
418
|
+
it 'value is empty and :allow_blank is true' do
|
419
|
+
person = Person.new(:code => '')
|
420
|
+
person.validates_cpf_or_cnpj(:code, :allow_blank => true)
|
421
|
+
person.errors.should be_empty
|
422
|
+
person.validates_cpf_or_cnpj(:code, :allow_nil => true)
|
423
|
+
person.errors.should_not be_empty
|
424
|
+
end
|
425
|
+
|
426
|
+
it ':if option evaluates false' do
|
427
|
+
person = Person.new(:code => '12345678901234')
|
428
|
+
person.validates_cpf_or_cnpj(:code, :if => false)
|
429
|
+
person.errors.should be_empty
|
430
|
+
end
|
431
|
+
|
432
|
+
it ':unless option evaluates true' do
|
433
|
+
person = Person.new(:code => '12345678901234')
|
434
|
+
person.validates_cpf_or_cnpj(:code, :unless => true)
|
435
|
+
person.errors.should be_empty
|
436
|
+
end
|
437
|
+
|
438
|
+
it ':on option is :create and the model instance is not a new record' do
|
439
|
+
person = Person.new(:code => '12345678901')
|
440
|
+
person.stub!(:new_record?, false)
|
441
|
+
person.validates_cpf_or_cnpj(:code, :on => :create)
|
442
|
+
person.errors.should be_empty
|
443
|
+
end
|
444
|
+
|
445
|
+
it ':on option is :update and the model instance is a new record' do
|
446
|
+
person = Person.new(:code => '12345678901')
|
447
|
+
person.validates_cpf_or_cnpj(:code, :on => :update)
|
448
|
+
person.errors.should be_empty
|
449
|
+
end
|
450
|
+
end
|
451
|
+
end
|
452
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'validates_cpf_cnpj'
|
2
|
+
require 'active_record'
|
3
|
+
|
4
|
+
ActiveRecord::Base.establish_connection(
|
5
|
+
:adapter => 'sqlite3',
|
6
|
+
:database => ':memory:'
|
7
|
+
)
|
8
|
+
|
9
|
+
ActiveRecord::Schema.define do
|
10
|
+
self.verbose = false
|
11
|
+
|
12
|
+
create_table :people do |t|
|
13
|
+
t.string :code
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class Person < ActiveRecord::Base
|
18
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "validates_cpf_cnpj/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "validates_cpf_cnpj"
|
7
|
+
s.version = ValidatesCpfCnpj::VERSION
|
8
|
+
s.authors = ["Reginaldo Francisco"]
|
9
|
+
s.email = ["naldo_ds@yahoo.com.br"]
|
10
|
+
s.homepage = "http://github.com/rfs/validates_cpf_cnpj"
|
11
|
+
s.summary = %q{CPF/CNPJ ActiveModel validations}
|
12
|
+
s.description = %q{CPF and CNPJ validations for ActiveModel and Rails}
|
13
|
+
|
14
|
+
s.rubyforge_project = "validates_cpf_cnpj"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_development_dependency "rake"
|
22
|
+
s.add_development_dependency "rspec"
|
23
|
+
s.add_development_dependency "activerecord"
|
24
|
+
|
25
|
+
s.add_runtime_dependency "activemodel", ">= 3.0.0"
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: validates_cpf_cnpj
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Reginaldo Francisco
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-07-04 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: &79122770 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *79122770
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rspec
|
27
|
+
requirement: &79122560 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *79122560
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: activerecord
|
38
|
+
requirement: &79122350 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *79122350
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: activemodel
|
49
|
+
requirement: &79122100 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 3.0.0
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *79122100
|
58
|
+
description: CPF and CNPJ validations for ActiveModel and Rails
|
59
|
+
email:
|
60
|
+
- naldo_ds@yahoo.com.br
|
61
|
+
executables: []
|
62
|
+
extensions: []
|
63
|
+
extra_rdoc_files: []
|
64
|
+
files:
|
65
|
+
- .gitignore
|
66
|
+
- .rspec
|
67
|
+
- Gemfile
|
68
|
+
- README.rdoc
|
69
|
+
- Rakefile
|
70
|
+
- lib/validates_cpf_cnpj.rb
|
71
|
+
- lib/validates_cpf_cnpj/cnpj.rb
|
72
|
+
- lib/validates_cpf_cnpj/cpf.rb
|
73
|
+
- lib/validates_cpf_cnpj/version.rb
|
74
|
+
- spec/lib/validates_cpf_cnpj_spec.rb
|
75
|
+
- spec/spec_helper.rb
|
76
|
+
- validates_cpf_cnpj.gemspec
|
77
|
+
homepage: http://github.com/rfs/validates_cpf_cnpj
|
78
|
+
licenses: []
|
79
|
+
post_install_message:
|
80
|
+
rdoc_options: []
|
81
|
+
require_paths:
|
82
|
+
- lib
|
83
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
requirements: []
|
96
|
+
rubyforge_project: validates_cpf_cnpj
|
97
|
+
rubygems_version: 1.8.10
|
98
|
+
signing_key:
|
99
|
+
specification_version: 3
|
100
|
+
summary: CPF/CNPJ ActiveModel validations
|
101
|
+
test_files: []
|