boleto_bancario 0.0.1.beta → 0.0.2

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