br_boleto 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.
Files changed (46) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +15 -0
  3. data/Gemfile.lock +145 -0
  4. data/History.txt +4 -0
  5. data/LICENSE +20 -0
  6. data/README.markdown +156 -0
  7. data/Rakefile +8 -0
  8. data/br_boleto.gemspec +26 -0
  9. data/lib/br_boleto.rb +87 -0
  10. data/lib/br_boleto/calculos/digitos.rb +35 -0
  11. data/lib/br_boleto/calculos/fator_vencimento.rb +129 -0
  12. data/lib/br_boleto/calculos/fatores_de_multiplicacao.rb +67 -0
  13. data/lib/br_boleto/calculos/linha_digitavel.rb +158 -0
  14. data/lib/br_boleto/calculos/modulo10.rb +83 -0
  15. data/lib/br_boleto/calculos/modulo11.rb +54 -0
  16. data/lib/br_boleto/calculos/modulo11_fator3197.rb +88 -0
  17. data/lib/br_boleto/calculos/modulo11_fator_de2a7.rb +97 -0
  18. data/lib/br_boleto/calculos/modulo11_fator_de2a9.rb +83 -0
  19. data/lib/br_boleto/calculos/modulo11_fator_de2a9_resto_zero.rb +29 -0
  20. data/lib/br_boleto/calculos/modulo11_fator_de9a2.rb +65 -0
  21. data/lib/br_boleto/calculos/modulo11_fator_de9a2_resto_x.rb +55 -0
  22. data/lib/br_boleto/calculos/modulo_numero_de_controle.rb +117 -0
  23. data/lib/br_boleto/core/boleto.rb +558 -0
  24. data/lib/br_boleto/core/sicoob.rb +169 -0
  25. data/lib/br_boleto/version.rb +8 -0
  26. data/test/br_boleto/calculos/digitos_test.rb +15 -0
  27. data/test/br_boleto/calculos/fator_vencimento_test.rb +56 -0
  28. data/test/br_boleto/calculos/fatores_de_multiplicacao_test.rb +66 -0
  29. data/test/br_boleto/calculos/linha_digitavel_test.rb +58 -0
  30. data/test/br_boleto/calculos/modulo10_test.rb +54 -0
  31. data/test/br_boleto/calculos/modulo11_fator3197_test.rb +43 -0
  32. data/test/br_boleto/calculos/modulo11_fator_de2a7_test.rb +44 -0
  33. data/test/br_boleto/calculos/modulo11_fator_de2a9_resto_zero_test.rb +40 -0
  34. data/test/br_boleto/calculos/modulo11_fator_de2a9_test.rb +68 -0
  35. data/test/br_boleto/calculos/modulo11_fator_de9a2_resto_x_test.rb +38 -0
  36. data/test/br_boleto/calculos/modulo11_fator_de9a2_test.rb +32 -0
  37. data/test/br_boleto/calculos/modulo11_test.rb +28 -0
  38. data/test/br_boleto/calculos/modulo_numero_de_controle_test.rb +38 -0
  39. data/test/br_boleto/core/boleto_test.rb +221 -0
  40. data/test/br_boleto/core/sicoob_test.rb +138 -0
  41. data/test/factories/boleto.rb +22 -0
  42. data/test/factories/boleto_sicoob.rb +23 -0
  43. data/test/inheritance/boleto_test.rb +15 -0
  44. data/test/inheritance/sicoob_test.rb +25 -0
  45. data/test/test_helper.rb +37 -0
  46. metadata +151 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7779abe6dc0c653dd1e82299a4e9c89d2007e7c8
4
+ data.tar.gz: 95d6fe53fe8ffa6c007e682130176450df534c9b
5
+ SHA512:
6
+ metadata.gz: 035233e8e9c63da0579d77974df98b43cf9535bea8b184ff9ec94bcdfa865093bdffb3cbb766dd9b93a984fad0997e6c8da7fec02c3fb0afaf89eec915503bff
7
+ data.tar.gz: b38d7006eb7451b0a765e5d64d03466d33b4d484e12937aab3809a8a683531a0c3112c89bc5f69b9e2968430470885f48a62c0a75211239c0a4b041d16330004
data/Gemfile ADDED
@@ -0,0 +1,15 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ group :test do
6
+ # gem "mocha", :require => false
7
+ gem "mocha", :require => false
8
+ gem "factory_girl_rails"
9
+ gem 'minitest-reporters'
10
+ gem 'minitest-rails'
11
+ gem 'minitest-spec-rails'
12
+ gem 'shoulda-matchers', require: false
13
+ gem "minitest-matchers_vaccine"
14
+ gem 'simplecov'
15
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,145 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ br_boleto (0.1.0)
5
+ activemodel (>= 4.1)
6
+ activesupport (>= 4.1)
7
+ rake
8
+
9
+ GEM
10
+ remote: http://rubygems.org/
11
+ specs:
12
+ actionmailer (4.2.3)
13
+ actionpack (= 4.2.3)
14
+ actionview (= 4.2.3)
15
+ activejob (= 4.2.3)
16
+ mail (~> 2.5, >= 2.5.4)
17
+ rails-dom-testing (~> 1.0, >= 1.0.5)
18
+ actionpack (4.2.3)
19
+ actionview (= 4.2.3)
20
+ activesupport (= 4.2.3)
21
+ rack (~> 1.6)
22
+ rack-test (~> 0.6.2)
23
+ rails-dom-testing (~> 1.0, >= 1.0.5)
24
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
25
+ actionview (4.2.3)
26
+ activesupport (= 4.2.3)
27
+ builder (~> 3.1)
28
+ erubis (~> 2.7.0)
29
+ rails-dom-testing (~> 1.0, >= 1.0.5)
30
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
31
+ activejob (4.2.3)
32
+ activesupport (= 4.2.3)
33
+ globalid (>= 0.3.0)
34
+ activemodel (4.2.3)
35
+ activesupport (= 4.2.3)
36
+ builder (~> 3.1)
37
+ activerecord (4.2.3)
38
+ activemodel (= 4.2.3)
39
+ activesupport (= 4.2.3)
40
+ arel (~> 6.0)
41
+ activesupport (4.2.3)
42
+ i18n (~> 0.7)
43
+ json (~> 1.7, >= 1.7.7)
44
+ minitest (~> 5.1)
45
+ thread_safe (~> 0.3, >= 0.3.4)
46
+ tzinfo (~> 1.1)
47
+ ansi (1.5.0)
48
+ arel (6.0.2)
49
+ builder (3.2.2)
50
+ docile (1.1.5)
51
+ erubis (2.7.0)
52
+ factory_girl (4.5.0)
53
+ activesupport (>= 3.0.0)
54
+ factory_girl_rails (4.5.0)
55
+ factory_girl (~> 4.5.0)
56
+ railties (>= 3.0.0)
57
+ globalid (0.3.5)
58
+ activesupport (>= 4.1.0)
59
+ i18n (0.7.0)
60
+ json (1.8.3)
61
+ loofah (2.0.2)
62
+ nokogiri (>= 1.5.9)
63
+ mail (2.6.3)
64
+ mime-types (>= 1.16, < 3)
65
+ metaclass (0.0.4)
66
+ mime-types (2.6.1)
67
+ mini_portile (0.6.2)
68
+ minitest (5.7.0)
69
+ minitest-matchers_vaccine (1.0.3)
70
+ minitest (~> 5.0)
71
+ minitest-rails (2.2.0)
72
+ minitest (~> 5.7)
73
+ railties (~> 4.1)
74
+ minitest-reporters (1.0.19)
75
+ ansi
76
+ builder
77
+ minitest (>= 5.0)
78
+ ruby-progressbar
79
+ minitest-spec-rails (5.2.2)
80
+ minitest (~> 5.0)
81
+ rails (~> 4.1)
82
+ mocha (1.1.0)
83
+ metaclass (~> 0.0.1)
84
+ nokogiri (1.6.6.2)
85
+ mini_portile (~> 0.6.0)
86
+ rack (1.6.4)
87
+ rack-test (0.6.3)
88
+ rack (>= 1.0)
89
+ rails (4.2.3)
90
+ actionmailer (= 4.2.3)
91
+ actionpack (= 4.2.3)
92
+ actionview (= 4.2.3)
93
+ activejob (= 4.2.3)
94
+ activemodel (= 4.2.3)
95
+ activerecord (= 4.2.3)
96
+ activesupport (= 4.2.3)
97
+ bundler (>= 1.3.0, < 2.0)
98
+ railties (= 4.2.3)
99
+ sprockets-rails
100
+ rails-deprecated_sanitizer (1.0.3)
101
+ activesupport (>= 4.2.0.alpha)
102
+ rails-dom-testing (1.0.6)
103
+ activesupport (>= 4.2.0.beta, < 5.0)
104
+ nokogiri (~> 1.6.0)
105
+ rails-deprecated_sanitizer (>= 1.0.1)
106
+ rails-html-sanitizer (1.0.2)
107
+ loofah (~> 2.0)
108
+ railties (4.2.3)
109
+ actionpack (= 4.2.3)
110
+ activesupport (= 4.2.3)
111
+ rake (>= 0.8.7)
112
+ thor (>= 0.18.1, < 2.0)
113
+ rake (10.4.2)
114
+ ruby-progressbar (1.7.5)
115
+ shoulda-matchers (2.8.0)
116
+ activesupport (>= 3.0.0)
117
+ simplecov (0.10.0)
118
+ docile (~> 1.1.0)
119
+ json (~> 1.8)
120
+ simplecov-html (~> 0.10.0)
121
+ simplecov-html (0.10.0)
122
+ sprockets (3.2.0)
123
+ rack (~> 1.0)
124
+ sprockets-rails (2.3.2)
125
+ actionpack (>= 3.0)
126
+ activesupport (>= 3.0)
127
+ sprockets (>= 2.8, < 4.0)
128
+ thor (0.19.1)
129
+ thread_safe (0.3.5)
130
+ tzinfo (1.2.2)
131
+ thread_safe (~> 0.1)
132
+
133
+ PLATFORMS
134
+ ruby
135
+
136
+ DEPENDENCIES
137
+ br_boleto!
138
+ factory_girl_rails
139
+ minitest-matchers_vaccine
140
+ minitest-rails
141
+ minitest-reporters
142
+ minitest-spec-rails
143
+ mocha
144
+ shoulda-matchers
145
+ simplecov
data/History.txt ADDED
@@ -0,0 +1,4 @@
1
+ == 1.0.0 27-07-2015
2
+
3
+ * Criação da Gem
4
+ * Boleto para o Banco Sicoob
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2015 Bruno M. Mergen
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.markdown ADDED
@@ -0,0 +1,156 @@
1
+ # BrBoleto
2
+
3
+ Emissão de Boletos Bancários em Ruby.
4
+
5
+ ## Versão 1.0.0
6
+
7
+ Por enquanto esta gem apenas faz os cálculos para o banco sicoob.
8
+
9
+ ## Alternativas
10
+
11
+ Essa biblioteca é baseada em outras **ótimas** bibliotecas.
12
+ **Recomendo analisar muito bem cada solução**:
13
+
14
+ * Stella Caelum [http://stella.caelum.com.br/](http://stella.caelum.com.br/)
15
+ * Novo Gateway de Pagamentos da Locaweb [http://www.locaweb.com.br/produtos/gateway-pagamento.html](http://www.locaweb.com.br/produtos/gateway-pagamento.html)
16
+ * Brcobranca [https://github.com/kivanio/brcobranca](https://github.com/kivanio/brcobranca)
17
+ * Boleto Php [http://boletophp.com.br/](http://boletophp.com.br/)
18
+ * Gem de Boleto Bancário [https://github.com/tomas-stefano/boleto_bancario](https://github.com/tomas-stefano/boleto_bancario)
19
+
20
+ ## Instalação
21
+ **Manual**
22
+
23
+ gem install br_boleto
24
+
25
+ **Instalação via Gemfile**
26
+
27
+ gem 'br_boleto'
28
+
29
+ ## Documentação
30
+
31
+ Seguimos as documentações descritas abaixo:
32
+
33
+ * [Sicoob](documentacoes_boletos/Sicoob)
34
+
35
+
36
+ ## Bancos Suportados
37
+
38
+ Para todos os bancos e carteiras implementadas, **seguimos as documentações** que estão dentro do repositório:
39
+
40
+ <table>
41
+ <tr>
42
+ <th>Nome do Banco</th>
43
+ <th>Carteiras Suportadas</th>
44
+ <th>Testada/Homologada no banco</th>
45
+ </tr>
46
+ <tr>
47
+ <td>Sicoob</td>
48
+ <td>1, 3.</td>
49
+ <td>Emm andamento...</td>
50
+ </tr>
51
+ </table>
52
+
53
+ ## Usage
54
+
55
+ Você pode usar as próprias classes da gem, porém, **recomendo criar uma subclasse** para os bancos que você gostaria de desenvolver.
56
+
57
+ ### Exemplo
58
+
59
+ ```ruby
60
+ class BoletoSicoob < BrBoleto::Sicoob
61
+ end
62
+
63
+ ```
64
+
65
+ ### Criando os boletos / Validações
66
+
67
+ Agora você pode emitir um boleto, **usando a classe criada no exemplo acima**:
68
+
69
+ ```ruby
70
+ BoletoSicoob.new(agencia: '3195', codigo_cedente: '6532', numero_documento: '1101', carteira: '1', valor_documento: 105.78)
71
+ ```
72
+
73
+ Você pode usar blocos se quiser:
74
+
75
+ ```ruby
76
+ boleto_sicoob = BoletoSicoob.new do |boleto|
77
+ boleto.agencia = '0097'
78
+ boleto.carteira = '1'
79
+ boleto.cedente = 'Razao Social da Empresa'
80
+ boleto.codigo_cedente = '90901'
81
+ boleto.endereco_cedente = 'Rua nome da rua, 9999'
82
+ boleto.numero_documento = '12345678'
83
+ boleto.sacado = 'Nome do Sacado'
84
+ boleto.documento_sacado = '35433793990'
85
+ boleto.data_vencimento = Date.tomorrow
86
+ boleto.valor_documento = 31678.99
87
+ end
88
+ ```
89
+
90
+ **Cada banco possui suas próprias validações de campo e de tamanho**.
91
+ Primeiramente, **antes de renderizar qualquer boleto você precisar verificar se esse o boleto é válido**.
92
+
93
+ ```ruby
94
+ if boleto_sicoob.valid?
95
+ # Renderiza o boleto itau
96
+ else
97
+ # Trata os erros
98
+ end
99
+ ```
100
+
101
+ ### Campos do Boleto
102
+
103
+ Segue abaixo os métodos para serem chamados, no momento de renderizar os boletos. Os campos são de mesmo nome:
104
+
105
+ ```ruby
106
+ boleto_sicoob.codigo_banco_formatado # Retorna o código do banco, junto com seu dígito
107
+
108
+ boleto_sicoob.codigo_de_barras
109
+
110
+ boleto_sicoob.linha_digitavel
111
+
112
+ boleto_sicoob.nosso_numero
113
+
114
+ boleto_sicoob.agencia_codigo_cedente
115
+
116
+ boleto_sicoob.carteira_formatada # Formata a carteira, para mostrar no boleto.
117
+
118
+ boleto_sicoob.numero_documento
119
+
120
+ boleto_sicoob.valor_documento
121
+
122
+ boleto_sicoob.especie
123
+
124
+ boleto_sicoob.especie_documento
125
+ ```
126
+
127
+ ## Sobrescrevendo comportamentos
128
+
129
+ Você pode sobrescrever os comportamentos na subclasse.
130
+
131
+ Por exemplo, imagine que você quer sobrescrever a forma como é tratada a segunda parte do código de barras.
132
+ **Seguindo a interface da classe BrBoleto::Boleto** fica bem simples:
133
+
134
+ ```ruby
135
+ class BoletoSicoob < BrBoleto::Sicoob
136
+ def codigo_de_barras_do_banco
137
+ # Sua implementação ...
138
+ end
139
+ end
140
+ ```
141
+
142
+ ## Contribuições
143
+
144
+ Seja um contribuidor. Você pode contribuir de N formas. Seguem elas:
145
+
146
+ * Criar boletos para outros bancos.
147
+ * Homologando boletos junto ao banco.
148
+ * Fornecendo documentações mais atualizadas dos Bancos.
149
+ * Escrevendo novos formatos (PDF, PNG), e me avisando para divulgar no Readme.
150
+ * Refatorando código!!
151
+ * Fornecendo Feedback construtivo! (Sempre bem vindo!)
152
+
153
+ ## Licença
154
+
155
+ - BSD
156
+ - Copyleft 2015 Bruno M. Mergen
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require 'rake/testtask'
2
+
3
+ Rake::TestTask.new do |task|
4
+ task.libs << %w(test lib)
5
+ task.pattern = 'test/**/*_test.rb'
6
+ end
7
+
8
+ task :default => :test
data/br_boleto.gemspec ADDED
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/br_boleto/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Bruno M. Mergen"]
6
+ gem.email = ["brunomergen@gmail.com"]
7
+ gem.description = %q{Emissão de Boletos Bancários em Ruby}
8
+ gem.summary = %q{Emissão de Boletos Bancários em Ruby}
9
+ gem.homepage = "https://github.com/Brunomm/br_boleto"
10
+ gem.license = "BSD"
11
+
12
+ gem.files = `git ls-files`.split($\).reject { |f| ['.pdf','.xls'].include?(File.extname(f)) }
13
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
14
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
15
+ gem.name = "br_boleto"
16
+ gem.require_paths = ["lib"]
17
+ gem.version = BrBoleto::Version::CURRENT
18
+
19
+ gem.required_ruby_version = '>= 2.1'
20
+
21
+
22
+ gem.add_dependency "rake", '>= 0.8.7'
23
+ gem.add_dependency "activesupport", '~> 4.2'
24
+ gem.add_dependency "activemodel", '~> 4.2'
25
+
26
+ end
data/lib/br_boleto.rb ADDED
@@ -0,0 +1,87 @@
1
+ # encoding: utf-8
2
+ require 'br_boleto/version'
3
+ require 'active_model'
4
+ require 'active_support/core_ext/class'
5
+ require 'active_support/core_ext/enumerable'
6
+ require 'active_support/core_ext/object'
7
+ require 'active_support/core_ext/string'
8
+
9
+ # Copyright (C) 2015 Bruno M. Mergen <http://duobr.com.br>
10
+ #
11
+ # @author Bruno Mucelini Mergen <brunomergen@gmail.com>
12
+ #
13
+ # == Boleto Bancário
14
+ #
15
+ # Emissão de Boletos Bancários em Ruby. Simples e principalmente, flexível.
16
+ #
17
+ # Essa biblioteca é baseada em outras <b>ótimas</b> bibliotecas.
18
+ # Recomendo analisar muito bem cada solução!
19
+ #
20
+ # * Novo Gateway de Pagamentos da Locaweb: http://www.locaweb.com.br/produtos/gateway-pagamento.html
21
+ # * Brcobranca: https://github.com/kivanio/brcobranca
22
+ # * Boleto Php: http://boletophp.com.br
23
+ # * Stella Caelum: http://stella.caelum.com.br
24
+ # * BoletoBancario: https://github.com/tomas-stefano/boleto_bancario
25
+ #
26
+ # === Instalação via Rubygems
27
+ #
28
+ # gem install br_boleto
29
+ #
30
+ # === Instalar via Bundler
31
+ #
32
+ # Coloque no Gemfile:
33
+ #
34
+ # gem 'br_boleto'
35
+ #
36
+ # Depois de colocar no Gemfile:
37
+ #
38
+ # bundle install
39
+ #
40
+ module BrBoleto
41
+ # Modulo responsável por guardar todas as regras dos campos de
42
+ # todos os Boletos Bancários. <b>Contribuicões com novas documentações dos
43
+ # bancos e homologação dos boletos são extremamente bem vindas!</b>
44
+ #
45
+ # Esse módulo também é responsável por guardar todas as regras de validação dos boletos e
46
+ # contém a forma de chamar os objetos necessários para renderização
47
+ # dos formatos (pdf, html, etc) e internacionalização dos boletos (caso
48
+ # você precise mudar os nomes dos campos nos boletos)
49
+ #
50
+ module Core
51
+ extend ActiveSupport::Autoload
52
+
53
+ autoload :Boleto
54
+ autoload :BancoBrasil
55
+ autoload :Banrisul
56
+ autoload :Bradesco
57
+ autoload :Caixa
58
+ autoload :Hsbc
59
+ autoload :Itau
60
+ autoload :Real
61
+ autoload :Santander
62
+ autoload :Sicredi
63
+ autoload :Sicoob
64
+ end
65
+
66
+ # Módulo que possui classes que realizam os cálculos dos campos que serão mostrados nos boletos.
67
+ #
68
+ module Calculos
69
+ extend ActiveSupport::Autoload
70
+
71
+ autoload :FatorVencimento
72
+ autoload :FatoresDeMultiplicacao
73
+ autoload :LinhaDigitavel
74
+ autoload :Modulo10
75
+ autoload :Modulo11
76
+ autoload :Modulo11FatorDe2a9
77
+ autoload :Modulo11Fator3197
78
+ autoload :Modulo11FatorDe2a9RestoZero
79
+ autoload :Modulo11FatorDe2a7
80
+ autoload :Modulo11FatorDe9a2
81
+ autoload :Modulo11FatorDe9a2RestoX
82
+ autoload :ModuloNumeroDeControle
83
+ autoload :Digitos
84
+ end
85
+
86
+ include Core
87
+ end