boleto_bancario 0.0.1.beta → 0.0.2

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 (56) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -2
  3. data/.travis.yml +10 -0
  4. data/Changelog.markdown +4 -0
  5. data/Gemfile +1 -1
  6. data/Planning.markdown +18 -86
  7. data/README.markdown +107 -55
  8. data/Rakefile +7 -1
  9. data/TODO.markdown +15 -1
  10. data/boleto_bancario.gemspec +7 -3
  11. data/lib/boleto_bancario.rb +27 -15
  12. data/lib/boleto_bancario/calculos/modulo11_fator_de9a2.rb +65 -0
  13. data/lib/boleto_bancario/calculos/modulo11_fator_de9a2_resto_x.rb +5 -51
  14. data/lib/boleto_bancario/calculos/modulo_numero_de_controle.rb +117 -0
  15. data/lib/boleto_bancario/core/banco_brasil.rb +30 -5
  16. data/lib/boleto_bancario/core/banrisul.rb +182 -0
  17. data/lib/boleto_bancario/core/boleto.rb +67 -34
  18. data/lib/boleto_bancario/core/bradesco.rb +28 -16
  19. data/lib/boleto_bancario/core/caixa.rb +233 -0
  20. data/lib/boleto_bancario/core/hsbc.rb +170 -0
  21. data/lib/boleto_bancario/core/itau.rb +20 -10
  22. data/lib/boleto_bancario/core/real.rb +177 -0
  23. data/lib/boleto_bancario/core/santander.rb +19 -22
  24. data/lib/boleto_bancario/core/sicoob.rb +172 -0
  25. data/lib/boleto_bancario/core/sicredi.rb +290 -0
  26. data/lib/boleto_bancario/version.rb +1 -2
  27. data/spec/boleto_bancario/calculos/modulo10_spec.rb +4 -0
  28. data/spec/boleto_bancario/calculos/modulo11_fator_de2a9_spec.rb +6 -0
  29. data/spec/boleto_bancario/calculos/modulo11_fator_de9a2_spec.rb +31 -0
  30. data/spec/boleto_bancario/calculos/modulo_numero_de_controle_spec.rb +37 -0
  31. data/spec/boleto_bancario/core/banco_brasil_spec.rb +59 -65
  32. data/spec/boleto_bancario/core/banrisul_spec.rb +129 -0
  33. data/spec/boleto_bancario/core/boleto_spec.rb +148 -32
  34. data/spec/boleto_bancario/core/bradesco_spec.rb +29 -36
  35. data/spec/boleto_bancario/core/caixa_spec.rb +111 -0
  36. data/spec/boleto_bancario/core/hsbc_spec.rb +72 -0
  37. data/spec/boleto_bancario/core/itau_spec.rb +33 -36
  38. data/spec/boleto_bancario/core/real_spec.rb +104 -0
  39. data/spec/boleto_bancario/core/santander_spec.rb +26 -24
  40. data/spec/boleto_bancario/core/sicoob_spec.rb +111 -0
  41. data/spec/boleto_bancario/core/sicredi_spec.rb +149 -0
  42. data/spec/inheritance/banco_brasil_spec.rb +22 -0
  43. data/spec/inheritance/banrisul_spec.rb +22 -0
  44. data/spec/inheritance/boleto_spec.rb +15 -0
  45. data/spec/inheritance/bradesco_spec.rb +22 -0
  46. data/spec/inheritance/caixa_spec.rb +22 -0
  47. data/spec/inheritance/hsbc_spec.rb +22 -0
  48. data/spec/inheritance/itau_spec.rb +22 -0
  49. data/spec/inheritance/real_spec.rb +22 -0
  50. data/spec/inheritance/santander_spec.rb +22 -0
  51. data/spec/inheritance/sicoob_spec.rb +22 -0
  52. data/spec/inheritance/sicredi_spec.rb +22 -0
  53. data/spec/shared_examples/boleto_bancario_shared_example.rb +21 -34
  54. data/spec/spec_helper.rb +2 -2
  55. metadata +119 -47
  56. data/.rvmrc +0 -1
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: cd0a9ec52328f6ce59edd1d4105e868345dcb0fc
4
+ data.tar.gz: 7b290c3183af8c16461d56604152d4f3a7e1d1df
5
+ SHA512:
6
+ metadata.gz: a9a9fd7deda2d72950c4339e600ec28d787efd4d94da0c1883162f78db6745cd456bd09ea21d3a558fc2896a5bdd925be70a18134374d41dee4b777d3a6e18ab
7
+ data.tar.gz: dd9f31fad47809390594a97dd34af31da5495b0623e083139bbbe05ad0a8c4808a220fa94d3a9abbae941f136fe813c08a8f79784c36a2b918f7b4444d2bfa7f
data/.gitignore CHANGED
@@ -3,16 +3,17 @@
3
3
  .bundle
4
4
  .config
5
5
  .yardoc
6
- Gemfile.lock
7
6
  InstalledFiles
8
7
  _yardoc
9
8
  coverage
10
9
  doc/
11
10
  lib/bundler/man
11
+ vendor/
12
12
  pkg
13
13
  rdoc
14
14
  spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
- .DS_Store
18
+ .DS_Store
19
+ Gemfile.lock
@@ -0,0 +1,10 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - jruby
5
+ - 2.0
6
+ before_install:
7
+ - export DISPLAY=:99.0
8
+ - sh -e /etc/init.d/xvfb start
9
+ script:
10
+ - bundle exec rspec
@@ -1,5 +1,9 @@
1
1
  # development
2
2
 
3
+ * Implementado Banrisul.
4
+
5
+ # 0.0.1.beta
6
+
3
7
  * Implementado Banco do Brasil.
4
8
  * Implementado Santander.
5
9
  * Implementado Bradesco.
data/Gemfile CHANGED
@@ -1,3 +1,3 @@
1
- source 'https://rubygems.org'
1
+ source 'http://rubygems.org'
2
2
 
3
3
  gemspec
@@ -2,104 +2,26 @@
2
2
 
3
3
  Emissão de Boletos Bancários em Ruby. Simples, fácil e principalmente, flexível.
4
4
 
5
- ## Alternativas
6
-
7
- Essa biblioteca é baseada em outras **ótimas** bibliotecas (**Recomendo analisar muito bem cada solução e usar a que resolver o seu problema!**):
8
-
9
- * Stella Caelum [http://stella.caelum.com.br/](http://stella.caelum.com.br/)
10
- * Novo Gateway de Pagamentos da Locaweb [http://www.locaweb.com.br/produtos/gateway-pagamento.html](http://www.locaweb.com.br/produtos/gateway-pagamento.html)
11
- * Brcobranca [https://github.com/kivanio/brcobranca](https://github.com/kivanio/brcobranca)
12
- * Boleto Php [http://boletophp.com.br/](http://boletophp.com.br/)
13
- * Gem de Boleto Bancário (essa gem) [https://github.com/tomas-stefano/boleto_bancario](https://github.com/tomas-stefano/boleto_bancario)
14
-
15
- ## Instalação
16
-
17
- gem install boleto_bancario
18
-
19
- ## Bancos Suportados
20
-
21
- * TODO: Precisa escrever essa parte
22
-
23
- ## Usage
24
-
25
- Você pode usar as próprias classes da gem, porém, **recomendo criar uma subclasse** para os bancos que você gostaria de desenvolver.
26
-
27
- Exemplo:
28
-
29
- ```ruby
30
- class Itau < BoletoBancario::Itau
31
- end
32
-
33
- class Santander < BoletoBancario::Santander
34
- end
35
-
36
- class Bradesco < BoletoBancario::Bradesco
37
- end
38
-
39
- class BancoBrasil < BoletoBancario::BancoBrasil
40
- end
41
- ```
42
-
43
- ## Attributos
44
-
45
- * TODO: Precisa escrever essa parte
46
-
47
- ## Internacionalização (i18n)
48
-
49
- * TODO: Precisa escrever essa parte
50
-
51
- ## Validações
52
-
53
- * TODO: Precisa escrever essa parte
54
-
55
- ## Código do Banco
56
-
57
- * TODO: Precisa escrever essa parte
58
-
59
- ## Agência / Código do Cedente
60
-
61
- * TODO: Precisa escrever essa parte
62
-
63
- ## Nosso Número
64
-
65
- * TODO: Precisa escrever essa parte
66
-
67
- ## Código de Barras
68
-
69
- * TODO: Precisa escrever essa parte
70
-
71
- ## Linha digitável
72
-
73
- * TODO: Precisa escrever essa parte
74
-
75
- ## Documentação
76
-
77
- * TODO: Precisa escrever essa parte
78
-
79
5
  ## Formatos
80
6
 
81
7
  * TODO: Essa parte ainda pode mudar até a versão 0.0.1.
82
8
 
83
- HTML 5 é o formato suportado por enquanto. Para usar em Html, você precisa usar a gem **[boleto_bancario_html](https://github.com/tomas-stefano/boleto_bancario_html)**:
84
-
85
- gem install boleto_bancario_html
86
-
87
- E colocar na classe:
9
+ Colocar na classe:
88
10
 
89
11
  ```ruby
90
- class Itau < BoletoBancario::Itau
91
- def format
92
- BoletoBancario::HTML5
93
- end
12
+ class BoletoItau < BoletoBancario::Itau
13
+ respond_to :html, :pdf, :png
94
14
  end
95
15
  ```
96
16
 
97
17
  Para renderizar o html:
98
18
 
99
19
  ```ruby
100
- itau = Itau.new
20
+ itau = BoletoItau.new
21
+
22
+ itau.respond_with # Irá chamar o método render da instância do objeto passado no método format.
101
23
 
102
- itau.render # Irá chamar o método render da instância do objeto passado no método format.
24
+ itau.respond_with(:pdf)
103
25
  ```
104
26
 
105
27
  ### Criando um novo Formato
@@ -108,12 +30,22 @@ Em relação a parte de formatos a gem de boleto bancário é extremamente flex
108
30
 
109
31
  Basta criar um objeto que responda ao método **render**:
110
32
 
33
+ ```ruby
34
+ module BoletoBancario
35
+ module Formato
36
+ class Html < Boleto
37
+ def render(*args)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ ```
43
+
111
44
  ```ruby
112
45
  module BoletoBancario
113
46
  module Formato
114
47
  class Pdf < Boleto
115
48
  def render(*args)
116
- # ...
117
49
  end
118
50
  end
119
51
  end
@@ -1,4 +1,4 @@
1
- # BoletoBancario
1
+ # Boleto Bancario
2
2
 
3
3
  Emissão de Boletos Bancários em Ruby.
4
4
 
@@ -25,14 +25,20 @@ Essa biblioteca é baseada em outras **ótimas** bibliotecas.
25
25
 
26
26
  ## Documentação
27
27
 
28
- Seguimos todas as documentações que estão dentro do repositório:
28
+ Seguimos todas as documentações descritas abaixo:
29
29
 
30
- * [Bradesco](https://github.com/tomas-stefano/boleto_bancario/tree/master/documentacoes_dos_boletos/bradesco)
31
- * [Banco do Brasil](https://github.com/tomas-stefano/boleto_bancario/tree/master/documentacoes_dos_boletos/banco_brasil)
32
- * [Itaú](https://github.com/tomas-stefano/boleto_bancario/tree/master/documentacoes_dos_boletos/itau)
33
- * [Santander](https://github.com/tomas-stefano/boleto_bancario/tree/master/documentacoes_dos_boletos/santander)
30
+ * [Banco do Brasil](documentacoes_dos_boletos/banco_brasil)
31
+ * [Banrisul](documentacoes_dos_boletos/banrisul)
32
+ * [Bradesco](documentacoes_dos_boletos/Bradesco)
33
+ * [Caixa](documentacoes_dos_boletos/Caixa)
34
+ * [HSBC](documentacoes_dos_boletos/HASBC)
35
+ * [Itaú](documentacoes_dos_boletos/Itau)
36
+ * [Real](documentacoes_dos_boletos/Real)
37
+ * [Santander](documentacoes_dos_boletos/santander)
38
+ * [Sicoob](documentacoes_dos_boletos/Sicoob)
39
+ * [Sicredi](documentacoes_dos_boletos/Sicredi)
34
40
 
35
- Se você tiver uma documentação do boleto, **mais atualizada**, venha contribuir para a gem. :)
41
+ Se você tiver uma documentação do boleto, **mais atualizada**, gostaria de pedir que você me enviasse. :)
36
42
 
37
43
  ## Bancos Suportados
38
44
 
@@ -56,8 +62,8 @@ Para todos os bancos e carteiras implementadas, **seguimos as documentações**
56
62
  <td>Esperando Contribuição</td>
57
63
  </tr>
58
64
  <tr>
59
- <td>Itaú</td>
60
- <td>107, 109, 122, 142, 143, 126, 174, 175, 196, 198, 131, 146, 150, 168.</td>
65
+ <td>Banrisul</td>
66
+ <td>00, 08.</td>
61
67
  <td>Esperando Contribuição</td>
62
68
  </tr>
63
69
  <tr>
@@ -65,11 +71,41 @@ Para todos os bancos e carteiras implementadas, **seguimos as documentações**
65
71
  <td>03, 06, 09, 19, 21, 22.</td>
66
72
  <td>Esperando Contribuição</td>
67
73
  </tr>
74
+ <tr>
75
+ <td>Caixa</td>
76
+ <td>14, 24.</td>
77
+ <td>Esperando Contribuição</td>
78
+ </tr>
79
+ <tr>
80
+ <td>HSBC</td>
81
+ <td>CNR.</td>
82
+ <td>Esperando Contribuição</td>
83
+ </tr>
84
+ <tr>
85
+ <td>Itaú</td>
86
+ <td>107, 109, 122, 142, 143, 126, 174, 175, 196, 198, 131, 146, 150, 168.</td>
87
+ <td>Esperando Contribuição</td>
88
+ </tr>
89
+ <tr>
90
+ <td>Real</td>
91
+ <td>00, 20, 31, 42, 47, 85.</td>
92
+ <td>Esperando Contribuição</td>
93
+ </tr>
68
94
  <tr>
69
95
  <td>Santander</td>
70
96
  <td>101, 102, 121.</td>
71
97
  <td>Esperando Contribuição</td>
72
98
  </tr>
99
+ <tr>
100
+ <td>Sicoob</td>
101
+ <td>1, 9.</td>
102
+ <td>Esperando Contribuição</td>
103
+ </tr>
104
+ <tr>
105
+ <td>Sicredi</td>
106
+ <td>03, C.</td>
107
+ <td>Esperando Contribuição</td>
108
+ </tr>
73
109
  </table>
74
110
 
75
111
  **OBS.: Caso a homologação seja aceita junto ao banco, contribua e mude a seção acima. Caso recuse alguma carteira acima, por favor me avise, para tirar dessa lista.**
@@ -85,17 +121,17 @@ Você pode usar as próprias classes da gem, porém, **recomendo criar uma subcl
85
121
  ### Exemplo
86
122
 
87
123
  ```ruby
88
- class BoletoItau < BoletoBancario::Itau
89
- end
124
+ class BoletoItau < BoletoBancario::Itau
125
+ end
90
126
 
91
- class BoletoSantander < BoletoBancario::Santander
92
- end
127
+ class BoletoSantander < BoletoBancario::Santander
128
+ end
93
129
 
94
- class BoletoBradesco < BoletoBancario::Bradesco
95
- end
130
+ class BoletoBradesco < BoletoBancario::Bradesco
131
+ end
96
132
 
97
- class BoletoBancoBrasil < BoletoBancario::BancoBrasil
98
- end
133
+ class BoletoBancoBrasil < BoletoBancario::BancoBrasil
134
+ end
99
135
  ```
100
136
 
101
137
  Segue os attributos dos boletos:
@@ -123,58 +159,65 @@ Segue os attributos dos boletos:
123
159
 
124
160
  Agora você pode emitir um boleto, **usando a classe criada no exemplo acima**:
125
161
 
126
- BoletoItau.new(conta_corrente: '89755', agencia: '0097', :carteira => '195')
162
+ ```ruby
163
+ BoletoItau.new(conta_corrente: '89755', agencia: '0097', :carteira => '195')
164
+ ```
127
165
 
128
166
  Você pode usar blocos se quiser:
129
167
 
130
- BoletoItau.new do |boleto|
131
- boleto_itau.conta_corrente = '89755'
132
- boleto_itau.digito_conta_corrente = '1'
133
- boleto_itau.agencia = '0097'
134
- boleto_itau.carteira = '198'
135
- boleto_itau.cedente = 'Razao Social da Empresa'
136
- boleto_itau.codigo_cedente = '90901'
137
- boleto_itau.endereco_cedente = 'Rua nome da rua, 9999'
138
- boleto_itau.numero_documento = '12345678'
139
- boleto_itau.sacado = 'Nome do Sacado'
140
- boleto_itau.documento_sacado = '35433793990'
141
- boleto_itau.data_vencimento = Date.tomorrow
142
- boleto_itau.valor_documento = 31678.99
143
- boleto_itau.seu_numero = 1234
144
- end
168
+ ```ruby
169
+ boleto_itau = BoletoItau.new do |boleto|
170
+ boleto.conta_corrente = '89755'
171
+ boleto.agencia = '0097'
172
+ boleto.carteira = '198'
173
+ boleto.cedente = 'Razao Social da Empresa'
174
+ boleto.codigo_cedente = '90901'
175
+ boleto.endereco_cedente = 'Rua nome da rua, 9999'
176
+ boleto.numero_documento = '12345678'
177
+ boleto.sacado = 'Nome do Sacado'
178
+ boleto.documento_sacado = '35433793990'
179
+ boleto.data_vencimento = Date.tomorrow
180
+ boleto.valor_documento = 31678.99
181
+ boleto.seu_numero = 1234
182
+ end
183
+ ```
145
184
 
146
185
  **Cada banco possui suas próprias validações de campo e de tamanho**.
147
186
  Primeiramente, **antes de renderizar qualquer boleto você precisar verificar se esse o boleto é válido**.
148
187
 
149
- if boleto_itau.valid?
150
- # Renderiza o boleto itau
151
- else
152
- # Trata os erros
153
- end
188
+ ```ruby
189
+ if boleto_itau.valid?
190
+ # Renderiza o boleto itau
191
+ else
192
+ # Trata os erros
193
+ end
194
+ ```
154
195
 
155
196
  ### Campos do Boleto
156
197
 
157
198
  Segue abaixo os métodos para serem chamados, no momento de renderizar os boletos. Os campos são de mesmo nome:
158
199
 
159
- boleto_itau.codigo_banco_formatado # Retorna o código do banco, junto com seu dígito
200
+ ```ruby
201
+ boleto_itau.codigo_banco_formatado # Retorna o código do banco, junto com seu dígito
160
202
 
161
- boleto_itau.codigo_de_barras
203
+ boleto_itau.codigo_de_barras
162
204
 
163
- boleto_itau.linha_digitavel
205
+ boleto_itau.linha_digitavel
164
206
 
165
- boleto_itau.nosso_numero
207
+ boleto_itau.nosso_numero
166
208
 
167
- boleto_itau.agencia_codigo_cedente
209
+ boleto_itau.agencia_codigo_cedente
168
210
 
169
- boleto_itau.carteira_formatada # Formata a carteira, para mostrar no boleto.
211
+ boleto_itau.carteira_formatada # Formata a carteira, para mostrar no boleto.
170
212
 
171
- boleto_itau.numero_documento
213
+ boleto_itau.numero_documento
172
214
 
173
- boleto_itau.valor_documento
215
+ boleto_itau.valor_documento
174
216
 
175
- boleto_itau.especie
217
+ boleto_itau.especie
176
218
 
177
- boleto_itau.especie_documento
219
+ boleto_itau.especie_documento
220
+ ```
178
221
 
179
222
  ## Sobrescrevendo comportamentos
180
223
 
@@ -183,18 +226,28 @@ Você pode sobrescrever os comportamentos na subclasse.
183
226
  Por exemplo, imagine que você quer sobrescrever a forma como é tratada a segunda parte do código de barras.
184
227
  **Seguindo a interface da classe BoletoBancario::Boleto** fica bem simples:
185
228
 
186
- class BoletoItau < BoletoBancario::Itau
187
- def codigo_de_barras_do_banco
188
- # Sua implementação ...
189
- end
190
- end
229
+ ```ruby
230
+ class BoletoItau < BoletoBancario::Itau
231
+ def codigo_de_barras_do_banco
232
+ # Sua implementação ...
233
+ end
234
+ end
235
+ ```
236
+
237
+ ## Formatos (HTML, PDF e PNG)
238
+
239
+ ### Objetivos para as próximas versões: criar os formatos dos boletos de:
240
+
241
+ * HTML
242
+ * PDF
243
+ * PNG
191
244
 
192
245
  ## O que a gem não faz
193
246
 
194
247
  A gem não trata os arquivos de remessa e os arquivos de retorno do banco.
195
248
 
196
249
  Na minha opinião não deveria ser responsabilidade dessa gem.
197
- Essa gem **apenas emite o boleto**, com todas as informações necessárias para o pagamento.
250
+ Essa gem **apenas emite o boleto**, com todas as informações necessárias do boleto.
198
251
 
199
252
  ## Contribuições
200
253
 
@@ -205,4 +258,3 @@ Seja um contribuidor. Você pode contribuir de N formas. Seguem elas:
205
258
  * Escrevendo novos formatos (PDF, PNG), e me avisando para divulgar no Readme.
206
259
  * Refatorando código!!
207
260
  * Fornecendo Feedback construtivo! (Sempre bem vindo!)
208
-
data/Rakefile CHANGED
@@ -1,9 +1,15 @@
1
1
  # encoding: utf-8
2
2
  require 'bundler/gem_tasks'
3
3
  require 'yard'
4
+ require 'rspec/core/rake_task'
5
+
6
+ task :default => :spec
7
+
8
+ desc 'Running Tests'
9
+ RSpec::Core::RakeTask.new(:spec)
4
10
 
5
11
  desc 'Generate documentation'
6
12
  YARD::Rake::YardocTask.new do |t|
7
13
  t.files = ['lib/**/*.rb', '-', 'LICENSE']
8
14
  t.options = ['--main', 'README.markdown', '--no-private', '--title', "Boleto Bancário #{BoletoBancario::VERSION}"]
9
- end
15
+ end