brazilian_id 0.0.2 → 0.0.3

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/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: