titulo_eleitoral 0.0.1

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.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ OTExOGMzYWRmN2M0ZmUzYmEwOWRjZTY0NmNkODVhNTZiMGFhMGIyZg==
5
+ data.tar.gz: !binary |-
6
+ Y2FjYjFlMzQ0N2NkNGFjOWM3YjU4MjY0NWQ5NGQ4NzRiMTFlODI1ZQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ YTg1NGQwOWM3YjVjZGM2MjJjNzJhNjA1ODk0NDU3YjMyMzczMWIxMzY0ODQ3
10
+ MmQ1MTFhMDc3NGY2YWRhYzBjYjMwM2E1NzgzMGZhOTEyZWVmMDMzYWFjY2Yz
11
+ ZDIyZmUwYWEyNTZjN2FhNTljMGE1ODQ2NzVjZmMzNDhiZmI5ZWI=
12
+ data.tar.gz: !binary |-
13
+ ZWZmNTc5M2Y3YTc4YzJlYTQ1NTZlZTU5ZTI5NTVjZDJjOGE4OWJkNzFiNzJl
14
+ MzA4NTQ2MDFmYjAzYmNkNmFlMjYyZWJkODYwNmU0ZWMzOGRkZTRiZTdjMTNm
15
+ Zjc5Y2I1ODA5YmU2MDg3ZWFjM2MxZWFlZjFkOTA1Zjg2MDZkYzg=
data/.coveralls.yml ADDED
@@ -0,0 +1 @@
1
+ service_name: travis-ci
data/.gitignore ADDED
@@ -0,0 +1,23 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
23
+ .idea
data/.travis.yml ADDED
@@ -0,0 +1,17 @@
1
+ language: ruby
2
+ cache: bundler
3
+
4
+ rvm:
5
+ - 2.1.1
6
+ - 2.0.0
7
+ - 1.9.3
8
+ - 1.9.2
9
+
10
+ script: 'bundle exec rake'
11
+
12
+ notifications:
13
+ email:
14
+ recipients:
15
+ - eduardodeoh@gmail.com
16
+ on_failure: change
17
+ on_success: never
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in titulo-eleitoral.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Eduardo de O. Hernandes
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,42 @@
1
+ # TituloEleitoral
2
+
3
+ [![Build Status](https://travis-ci.org/eduardodeoh/titulo_eleitoral.svg?branch=master)](https://travis-ci.org/eduardodeoh/titulo_eleitoral) [![Coverage Status](https://coveralls.io/repos/eduardodeoh/titulo_eleitoral/badge.png?branch=master)](https://coveralls.io/r/eduardodeoh/titulo_eleitoral?branch=master) [![Gem Version](https://badge.fury.io/rb/titulo_eleitoral.svg)](http://badge.fury.io/rb/titulo_eleitoral)
4
+
5
+ Esta gem permite validar o número de inscrição presente no título eleitoral, de acordo com o artigo 12 da resolução número 21.538 do TSE, de 14/10/2003.
6
+
7
+ ## Instalação
8
+
9
+ Adicione essa linha no arquivo Gemfile da sua aplicação:
10
+
11
+ gem 'titulo_eleitoral'
12
+
13
+ E etão execute:
14
+
15
+ $ bundle
16
+
17
+ Ou instale você mesmo:
18
+
19
+ $ gem install titulo_eleitoral
20
+
21
+ ## Uso
22
+
23
+ A utilização é bem simples:
24
+
25
+ ```ruby
26
+ # Para verificar se o número de inscrição é válido:
27
+ TituloEleitoral.valido?('324542010232')
28
+
29
+ # Para verificar a UF do número de inscrição:
30
+ TituloEleitoral.uf('324542010232')
31
+
32
+ # Para retornar uma instância da classe TituloEleitoral::NumeroInscricao:
33
+ TituloEleitoral.numero_inscricao('324542010232')
34
+ ```
35
+
36
+ ## Contribuindo
37
+
38
+ 1. Faça um Fork
39
+ 2. Crie um branch para a nova funcionalidade (`git checkout -b minha-nova-funcionalidade`)
40
+ 3. Faça o commit de suas alterações (`git commit -am 'Adicionada nova funcionalidade'`)
41
+ 4. Faça um push da sua nova funconalidade (`git push origin minha-nova-funcionalidade`)
42
+ 5. Submeta uma nova Pull Request
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require 'bundler/gem_tasks'
2
+
3
+ require 'rake/testtask'
4
+
5
+ Rake::TestTask.new do |t|
6
+ t.libs << 'lib/titulo_eleitoral'
7
+ t.test_files = FileList['test/**/*_test.rb']
8
+ t.verbose = true
9
+ end
10
+
11
+ task :default => :test
@@ -0,0 +1,16 @@
1
+ require 'titulo_eleitoral/version'
2
+ require 'titulo_eleitoral/numero_inscricao'
3
+
4
+ module TituloEleitoral
5
+ def self.valido?(numero)
6
+ numero_inscricao(numero).valido?
7
+ end
8
+
9
+ def self.numero_inscricao(numero)
10
+ NumeroInscricao.new(numero)
11
+ end
12
+
13
+ def self.uf(numero)
14
+ numero_inscricao(numero).uf
15
+ end
16
+ end
@@ -0,0 +1,39 @@
1
+ module TituloEleitoral
2
+ MULTIPLICADORES_DV1 = [2, 3, 4, 5, 6, 7, 8, 9]
3
+ MULTIPLICADORES_DV2 = [7, 8, 9]
4
+
5
+ UFS = {
6
+ '01' => 'SP',
7
+ '02' => 'MG',
8
+ '03' => 'RJ',
9
+ '04' => 'RS',
10
+ '05' => 'BA',
11
+ '06' => 'PR',
12
+ '07' => 'CE',
13
+ '08' => 'PE',
14
+ '09' => 'SC',
15
+ '10' => 'GO',
16
+ '11' => 'MA',
17
+ '12' => 'PB',
18
+ '13' => 'PA',
19
+ '14' => 'ES',
20
+ '15' => 'PI',
21
+ '16' => 'RN',
22
+ '17' => 'AL',
23
+ '18' => 'MT',
24
+ '19' => 'MS',
25
+ '20' => 'DF',
26
+ '21' => 'SE',
27
+ '22' => 'AM',
28
+ '23' => 'RO',
29
+ '24' => 'AC',
30
+ '25' => 'AP',
31
+ '26' => 'RR',
32
+ '27' => 'TO',
33
+ '28' => 'Exterior(ZZ)'
34
+ }
35
+
36
+ MODULO = 11
37
+
38
+ NUMERO_DIGITOS = 12
39
+ end
@@ -0,0 +1,87 @@
1
+ require 'titulo_eleitoral/constantes'
2
+
3
+ module TituloEleitoral
4
+ class NumeroInscricao
5
+ attr_reader :numero, :numero_original, :dv1, :dv2
6
+
7
+ #http://www.tse.jus.br/legislacao/codigo-eleitoral/normas-editadas-pelo-tse/resolucao-nb0-21.538-de-14-de-outubro-de-2003-brasilia-2013-df
8
+ #http://www.exceldoseujeito.com.br/2008/12/19/validar-cpf-cnpj-e-titulo-de-eleitor-parte-ii/
9
+ def initialize(numero)
10
+ @numero_original = divide_em_array(numero)
11
+ @numero = normaliza_quantidade_digitos(numero_original)
12
+ @dv1 = primeiro_digito_verificador
13
+ @dv2 = segundo_digito_verificador
14
+ end
15
+
16
+ def valido?
17
+ return false if numero_original.size > NUMERO_DIGITOS
18
+ digitos_verificadores == digitos_verificadores_calculados
19
+ end
20
+
21
+ def uf
22
+ UFS[digitos_uf] if uf_valida?
23
+ end
24
+
25
+ private
26
+ def primeiro_digito_verificador
27
+ #Somar a multiplicação dos 8 primeiros digitos, respectivamente, por [2,3,4,5,6,7,8,9] e após calcular módulo 11 desta soma
28
+ digitos = numero.take(8).map(&:to_i)
29
+ calcula_digito_verificador(digitos, MULTIPLICADORES_DV1)
30
+ end
31
+
32
+ def segundo_digito_verificador
33
+ #Somar a multiplicação dos digitos 9, 10 e DV1, respectivamente, por [7,8,9] e após calcular módulo 11 desta soma
34
+ digitos = numero[8,2].map(&:to_i) << dv1
35
+ calcula_digito_verificador(digitos, MULTIPLICADORES_DV2)
36
+ end
37
+
38
+ def calcula_digito_verificador(digitos, multiplicadores)
39
+ soma_multiplicacao = digitos.zip(multiplicadores).inject(0) { |resultado,(digito, multiplicador)| resultado + (digito * multiplicador) }
40
+ resto_divisao = soma_multiplicacao % MODULO
41
+ verifica_resto(resto_divisao)
42
+ end
43
+
44
+ def divide_em_array(numero)
45
+ case
46
+ when numero.is_a?(String) && numero.match(/\d$/)
47
+ numero.split('')
48
+ when numero.is_a?(Fixnum)
49
+ numero.to_s.split('')
50
+ else
51
+ []
52
+ end
53
+ end
54
+
55
+ def normaliza_quantidade_digitos(numero)
56
+ (numero.join.size == NUMERO_DIGITOS) ? numero : numero.join.rjust(NUMERO_DIGITOS, "0").split('')
57
+ end
58
+
59
+ def digitos_uf
60
+ numero[8,2].join
61
+ end
62
+
63
+ def digitos_verificadores
64
+ numero[10,2].join
65
+ end
66
+
67
+ def uf_valida?
68
+ uf = digitos_uf.to_i
69
+ uf >= 1 && uf <=28
70
+ end
71
+
72
+ def digitos_verificadores_calculados
73
+ dv1.to_s + dv2.to_s
74
+ end
75
+
76
+ def verifica_resto(resto_divisao)
77
+ case resto_divisao
78
+ when 10
79
+ 0
80
+ when 0 || 1
81
+ 1
82
+ else
83
+ resto_divisao
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,3 @@
1
+ module TituloEleitoral
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,104 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative 'test_helper'
4
+
5
+ describe TituloEleitoral::NumeroInscricao do
6
+
7
+ describe 'dado um número de inscrição válido com 12 dígitos' do
8
+ before do
9
+ @valor = 316820550159
10
+ @numero = TituloEleitoral::NumeroInscricao.new(@valor)
11
+ end
12
+
13
+ it 'deve ser válido' do
14
+ @numero.valido?.must_equal true
15
+ end
16
+
17
+ it 'deve retornar DV1' do
18
+ @numero.dv1.must_equal 5
19
+ end
20
+
21
+ it 'deve retornar DV2' do
22
+ @numero.dv2.must_equal 9
23
+ end
24
+
25
+ it 'deve retornar número original como array de strings' do
26
+ @numero.numero_original.must_be_instance_of Array
27
+ end
28
+
29
+ it 'deve retornar número como array de strings sem preenchimento de zeros à esquerda' do
30
+ teste = @valor.to_s.split('')
31
+ @numero.numero.must_equal teste
32
+ end
33
+
34
+ it 'deve retornar a UF do título' do
35
+ @numero.uf.wont_be_nil
36
+ end
37
+ end
38
+
39
+ describe 'dada uma string válida com 12 dígitos' do
40
+ before do
41
+ @valor2 = '316820550159'
42
+ @numero2 = TituloEleitoral::NumeroInscricao.new(@valor2)
43
+ end
44
+
45
+ it 'deve ser válido' do
46
+ @numero2.valido?.must_equal true
47
+ end
48
+ end
49
+
50
+ describe 'dado um número com menos de 12 dígitos' do
51
+ before do
52
+ @valor3 = 67735700132
53
+ @numero3 = TituloEleitoral::NumeroInscricao.new(@valor3)
54
+ end
55
+
56
+ it 'deve retornar número como array de strings com preenchimento de zeros à esquerda' do
57
+ teste = @valor3.to_s.split('').unshift('0')
58
+ @numero3.numero.must_equal teste
59
+ end
60
+ end
61
+
62
+ describe 'dada uma string com mais de 12 dígitos' do
63
+ before do
64
+ @valor4 = '0677357001321'
65
+ @numero4 = TituloEleitoral::NumeroInscricao.new(@valor4)
66
+ end
67
+
68
+ it 'número de inscrição deve ser inválido' do
69
+ @numero4.valido?.must_equal false
70
+ end
71
+ end
72
+
73
+ describe 'dada uma string com dígitos e letras' do
74
+ before do
75
+ @valor5 = '6773570013AB'
76
+ @numero5 = TituloEleitoral::NumeroInscricao.new(@valor5)
77
+ end
78
+
79
+ it 'número inscrição deve ser inválido' do
80
+ @numero5.valido?.must_equal false
81
+ end
82
+
83
+ it 'número original deve ser uma array vazio' do
84
+ @numero5.numero_original.must_equal []
85
+ end
86
+
87
+ it 'número deve ser um array preenchido com zeros' do
88
+ @numero5.numero.must_equal Array.new(12,'0')
89
+ end
90
+ end
91
+
92
+ describe 'dada uma string válida de 12 dígitos e dígitos da UF menores que 01 ou maiores que 28' do
93
+ it 'dígitos da UF menor que 01 retorna nil' do
94
+ numero = TituloEleitoral::NumeroInscricao.new('067735700032')
95
+ numero.uf.must_be_nil
96
+ end
97
+
98
+ it 'dígitos da UF maior que 28 retorna nil' do
99
+ numero = TituloEleitoral::NumeroInscricao.new('067735702932')
100
+ numero.uf.must_be_nil
101
+ end
102
+ end
103
+
104
+ end
@@ -0,0 +1,6 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+
4
+ require 'titulo_eleitoral'
5
+ require 'minitest/autorun'
6
+ require 'minitest/pride'
@@ -0,0 +1,9 @@
1
+ require_relative 'test_helper'
2
+
3
+ describe TituloEleitoral do
4
+
5
+ it "must be defined" do
6
+ TituloEleitoral::VERSION.wont_be_nil
7
+ end
8
+
9
+ end
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'titulo_eleitoral/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'titulo_eleitoral'
8
+ spec.version = TituloEleitoral::VERSION
9
+ spec.authors = ['Eduardo de O. Hernandes']
10
+ spec.email = ['eduardodeoh@gmail.com']
11
+ spec.summary = %q{Validação do número de inscrição do título eleitoral.}
12
+ spec.description = %q{Valida o número de inscrição do título eleitoral conforme resolução 21.538 (14/10/2003) do TSE, artigo 12.}
13
+ spec.homepage = 'https://github.com/eduardodeoh/titulo_eleitoral'
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.6"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "minitest"
24
+ spec.add_development_dependency "coveralls"
25
+ end
metadata ADDED
@@ -0,0 +1,119 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: titulo_eleitoral
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Eduardo de O. Hernandes
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: coveralls
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: Valida o número de inscrição do título eleitoral conforme resolução 21.538
70
+ (14/10/2003) do TSE, artigo 12.
71
+ email:
72
+ - eduardodeoh@gmail.com
73
+ executables: []
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - .coveralls.yml
78
+ - .gitignore
79
+ - .travis.yml
80
+ - Gemfile
81
+ - LICENSE.txt
82
+ - README.md
83
+ - Rakefile
84
+ - lib/titulo_eleitoral.rb
85
+ - lib/titulo_eleitoral/constantes.rb
86
+ - lib/titulo_eleitoral/numero_inscricao.rb
87
+ - lib/titulo_eleitoral/version.rb
88
+ - test/numero_inscricao_test.rb
89
+ - test/test_helper.rb
90
+ - test/version_test.rb
91
+ - titulo_eleitoral.gemspec
92
+ homepage: https://github.com/eduardodeoh/titulo_eleitoral
93
+ licenses:
94
+ - MIT
95
+ metadata: {}
96
+ post_install_message:
97
+ rdoc_options: []
98
+ require_paths:
99
+ - lib
100
+ required_ruby_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ! '>='
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ requirements: []
111
+ rubyforge_project:
112
+ rubygems_version: 2.4.2
113
+ signing_key:
114
+ specification_version: 4
115
+ summary: Validação do número de inscrição do título eleitoral.
116
+ test_files:
117
+ - test/numero_inscricao_test.rb
118
+ - test/test_helper.rb
119
+ - test/version_test.rb