titulo_eleitoral 0.0.1

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