brazilian_id 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/lib/brazilian_id.rb CHANGED
@@ -2,7 +2,7 @@
2
2
  require File.join(File.dirname(__FILE__), 'brazilian_id', filename)
3
3
  end
4
4
 
5
- ['cpf.rb', 'cnpj.rb', 'titulo_eleitor.rb'].each do |filename|
5
+ ['cpf.rb', 'cnpj.rb', 'titulo_eleitor.rb', 'pis.rb'].each do |filename|
6
6
  require File.join(File.dirname(__FILE__), 'brazilian_id', 'ids', filename)
7
7
  end
8
8
 
@@ -3,23 +3,33 @@ class BrazilianID
3
3
  def check_digits_length; 2; end;
4
4
 
5
5
  def initialize number
6
- @number = clear_number(number)[0..number_length]
6
+ @number = clear_number(number)
7
+
8
+ raise ArgumentError.new "invalid number" if @number.length != number_length
7
9
  end
8
10
 
9
11
  def check_digits
10
- @number[/..$/]
12
+ @check_digits ||= begin
13
+ @number[/..$/]
14
+ end
11
15
  end
12
16
 
13
17
  def sequential
14
- @number[/^(.*)..$/, 1]
18
+ @sequential ||= begin
19
+ @number[/^(.*)..$/, 1]
20
+ end
15
21
  end
16
22
 
17
23
  def valid?
18
- @number == valid_number and not invalid_sequential?
24
+ @valid ||= begin
25
+ @number == valid_number and not invalid_sequential?
26
+ end
19
27
  end
20
28
 
21
29
  def invalid_sequential?
22
- sequential.chars.to_a.uniq.count.eql? 1
30
+ @invalid_sequential ||=begin
31
+ sequential.chars.to_a.uniq.count.eql? 1
32
+ end
23
33
  end
24
34
 
25
35
  def to_s
@@ -1,5 +1,5 @@
1
1
  class CNPJ < BrazilianID
2
- def number_length; 14; end;
2
+ def number_length; 14; end
3
3
 
4
4
  def to_s
5
5
  er = /^(.{2})(.{3})(.{3})(.{4})(.{2})/
@@ -1,5 +1,5 @@
1
1
  class CPF < BrazilianID
2
- def number_length; 11; end;
2
+ def number_length; 11; end
3
3
 
4
4
  def to_s
5
5
  "#{sequential.scan(/\d{3}/).join('.')}-#{check_digits}"
@@ -10,18 +10,20 @@ class CPF < BrazilianID
10
10
  end
11
11
 
12
12
  def origin
13
- [
14
- [:rs],
15
- [:df, :go, :ms, :mt, :to],
16
- [:ac, :am, :ap, :pa, :ro, :rr],
17
- [:ce, :ma, :pi],
18
- [:al, :pb, :pe, :rn],
19
- [:ba, :se],
20
- [:mg],
21
- [:es, :rj],
22
- [:sp],
23
- [:pr, :sc]
24
- ][sequential[-1,1].to_i]
13
+ @origin ||= begin
14
+ [
15
+ [:rs],
16
+ [:df, :go, :ms, :mt, :to],
17
+ [:ac, :am, :ap, :pa, :ro, :rr],
18
+ [:ce, :ma, :pi],
19
+ [:al, :pb, :pe, :rn],
20
+ [:ba, :se],
21
+ [:mg],
22
+ [:es, :rj],
23
+ [:sp],
24
+ [:pr, :sc]
25
+ ][sequential[-1,1].to_i]
26
+ end
25
27
  end
26
28
 
27
29
  def from? uf
@@ -0,0 +1,29 @@
1
+ class PIS < BrazilianID
2
+ def number_length; 11; end
3
+
4
+ def check_digits
5
+ @check_digits ||= begin
6
+ @number[/.$/]
7
+ end
8
+ end
9
+
10
+ def sequential
11
+ @sequential ||= begin
12
+ @number[/^(.*).$/, 1]
13
+ end
14
+ end
15
+
16
+ def to_s
17
+ er = /^(.{3})(.{5})(.{2})(.{1})/
18
+ "#{@number.gsub(er, '\1.\2.\3-\4')}"
19
+ end
20
+
21
+ private
22
+ def mod11 number
23
+ Mod11.new(number, :base => 2..9).check_digit
24
+ end
25
+
26
+ def valid_number
27
+ sequential + mod11(sequential).to_s
28
+ end
29
+ end
@@ -6,19 +6,25 @@ class TituloEleitor < BrazilianID
6
6
  end
7
7
 
8
8
  def sequential
9
- @number[/^(.*)....$/, 1]
9
+ @sequential ||= begin
10
+ @number[/^(.*)....$/, 1]
11
+ end
10
12
  end
11
13
 
12
14
  def uf_digit
13
- @number[/(..)..$/, 1]
15
+ @uf_digit ||= begin
16
+ @number[/(..)..$/, 1]
17
+ end
14
18
  end
15
19
 
16
20
  def origin
17
- [ nil, :sp, :mg, :rj, :rs, :ba, :pr, :ce,
18
- :pe, :sc, :go, :ma, :pb, :pa, :es,
19
- :pi, :rn, :al, :mt, :ms, :df, :se,
20
- :am, :ro, :ac, :ap, :rr, :to, :exterior
21
- ][uf_digit.to_i]
21
+ @origin ||= begin
22
+ [ nil, :sp, :mg, :rj, :rs, :ba, :pr, :ce,
23
+ :pe, :sc, :go, :ma, :pb, :pa, :es,
24
+ :pi, :rn, :al, :mt, :ms, :df, :se,
25
+ :am, :ro, :ac, :ap, :rr, :to, :exterior
26
+ ][uf_digit.to_i]
27
+ end
22
28
  end
23
29
 
24
30
  private
@@ -30,4 +36,4 @@ class TituloEleitor < BrazilianID
30
36
  end
31
37
  end
32
38
 
33
-
39
+ TituloEleitoral = TituloEleitor
@@ -1,3 +1,3 @@
1
1
  module BrazilianId
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
data/spec/cpf_spec.rb CHANGED
@@ -8,4 +8,6 @@ describe CPF do
8
8
  it { CPF.new('009.147.274-10').should_not be_valid }
9
9
  it { CPF.new('000.000.000-00').should_not be_valid }
10
10
  it { CPF.new('111.111.111-11').should_not be_valid }
11
+
12
+ it { lambda { CPF.new('foobar') }.should raise_error(ArgumentError)}
11
13
  end
data/spec/pis_spec.rb ADDED
@@ -0,0 +1,8 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'brazilian_id.rb')
2
+
3
+ describe PIS do
4
+ it { PIS.new('170.33259.50-4').should be_valid }
5
+ it { PIS.new('17033259504').to_s.should == '170.33259.50-4' }
6
+
7
+ end
8
+
data/spec/titulo_spec.rb CHANGED
@@ -2,5 +2,5 @@ require File.join(File.dirname(__FILE__), '..', 'lib', 'brazilian_id.rb')
2
2
 
3
3
  describe TituloEleitor do
4
4
  it { TituloEleitor.new('43568709/06').should be_valid }
5
-
5
+ it { TituloEleitoral.new('43568709/06').should be_valid }
6
6
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brazilian_id
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 2
10
- version: 0.0.2
9
+ - 3
10
+ version: 0.0.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Halan Pinheiro
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-07-17 00:00:00 Z
18
+ date: 2012-07-18 00:00:00 Z
19
19
  dependencies: []
20
20
 
21
21
  description: "Brazilian identifications like CPF, CNPJ, T\xC3\xADtulo de Eleitor"
@@ -39,12 +39,14 @@ files:
39
39
  - lib/brazilian_id/brazilian_id.rb
40
40
  - lib/brazilian_id/ids/cnpj.rb
41
41
  - lib/brazilian_id/ids/cpf.rb
42
+ - lib/brazilian_id/ids/pis.rb
42
43
  - lib/brazilian_id/ids/titulo_eleitor.rb
43
44
  - lib/brazilian_id/mod11.rb
44
45
  - lib/brazilian_id/version.rb
45
46
  - spec/cnpj_spec.rb
46
47
  - spec/cpf_spec.rb
47
48
  - spec/mod11_spec.rb
49
+ - spec/pis_spec.rb
48
50
  - spec/titulo_spec.rb
49
51
  homepage: ""
50
52
  licenses: []
@@ -83,5 +85,6 @@ test_files:
83
85
  - spec/cnpj_spec.rb
84
86
  - spec/cpf_spec.rb
85
87
  - spec/mod11_spec.rb
88
+ - spec/pis_spec.rb
86
89
  - spec/titulo_spec.rb
87
90
  has_rdoc: