br_boleto 0.1.0

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