brcobranca 2.0.6 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. data/.document +5 -0
  2. data/.gitignore +30 -0
  3. data/Gemfile +11 -0
  4. data/Gemfile.lock +48 -0
  5. data/History.txt +13 -1
  6. data/LICENSE +20 -0
  7. data/README.rdoc +12 -5
  8. data/Rakefile +33 -37
  9. data/VERSION +1 -0
  10. data/brcobranca.gemspec +26 -35
  11. data/lib/brcobranca/arquivos/logos/{bb.jpg → bancobrasil.jpg} +0 -0
  12. data/lib/brcobranca/arquivos/logos/banespa.jpg +0 -0
  13. data/lib/brcobranca/arquivos/logos/caixa.jpg +0 -0
  14. data/lib/brcobranca/boleto/banco_brasil.rb +150 -77
  15. data/lib/brcobranca/boleto/base.rb +146 -75
  16. data/lib/brcobranca/boleto/bradesco.rb +69 -0
  17. data/lib/brcobranca/boleto/caixa.rb +100 -0
  18. data/lib/brcobranca/boleto/hsbc.rb +95 -0
  19. data/lib/brcobranca/boleto/itau.rb +133 -0
  20. data/lib/brcobranca/boleto/real.rb +74 -0
  21. data/lib/brcobranca/boleto/template/base.rb +13 -0
  22. data/lib/brcobranca/boleto/template/rghost.rb +136 -62
  23. data/lib/brcobranca/boleto/unibanco.rb +115 -0
  24. data/lib/brcobranca/calculo.rb +132 -0
  25. data/lib/brcobranca/calculo_data.rb +42 -0
  26. data/lib/brcobranca/currency.rb +3 -4
  27. data/lib/brcobranca/formatacao.rb +102 -0
  28. data/lib/brcobranca/limpeza.rb +19 -0
  29. data/lib/brcobranca/retorno/base.rb +1 -2
  30. data/lib/brcobranca/retorno/retorno_cbr643.rb +42 -40
  31. data/lib/brcobranca/version.rb +3 -0
  32. data/lib/brcobranca.rb +93 -16
  33. data/spec/brcobranca/banco_bradesco_spec.rb +63 -50
  34. data/spec/brcobranca/banco_brasil_spec.rb +102 -136
  35. data/spec/brcobranca/banco_caixa_spec.rb +166 -0
  36. data/spec/brcobranca/banco_hsbc_spec.rb +83 -76
  37. data/spec/brcobranca/banco_real_spec.rb +54 -37
  38. data/spec/brcobranca/banco_unibanco_spec.rb +69 -52
  39. data/spec/brcobranca/base_spec.rb +24 -79
  40. data/spec/brcobranca/boletos_em_lote_spec.rb +46 -0
  41. data/spec/brcobranca/core_ext_spec.rb +24 -114
  42. data/spec/brcobranca/currency_spec.rb +1 -0
  43. data/spec/brcobranca/{banco_itau_spec.rb → itau_spec.rb} +112 -67
  44. data/spec/brcobranca/retorno_cbr643_spec.rb +13 -12
  45. data/spec/brcobranca/rghost_spec.rb +8 -7
  46. data/spec/brcobranca_spec.rb +16 -6
  47. data/spec/spec_helper.rb +11 -8
  48. metadata +107 -58
  49. data/Manifest.txt +0 -51
  50. data/PostInstall.txt +0 -4
  51. data/lib/brcobranca/boleto/banco_banespa.rb +0 -85
  52. data/lib/brcobranca/boleto/banco_bradesco.rb +0 -44
  53. data/lib/brcobranca/boleto/banco_hsbc.rb +0 -77
  54. data/lib/brcobranca/boleto/banco_itau.rb +0 -115
  55. data/lib/brcobranca/boleto/banco_real.rb +0 -70
  56. data/lib/brcobranca/boleto/banco_unibanco.rb +0 -79
  57. data/lib/brcobranca/boleto/template/util.rb +0 -32
  58. data/lib/brcobranca/config.rb +0 -9
  59. data/lib/brcobranca/core_ext.rb +0 -279
  60. data/spec/brcobranca/banco_banespa_spec.rb +0 -195
  61. data/spec/brcobranca/template/rghost_spec.rb +0 -65
  62. data/spec/brcobranca/template/util_spec.rb +0 -42
  63. data/spec/rcov.opts +0 -2
  64. data/spec/spec.opts +0 -6
  65. data/tasks/rcov.rake +0 -12
  66. data/tasks/rspec.rake +0 -21
@@ -0,0 +1,102 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # @author Kivanio Barbosa
3
+ module Brcobranca
4
+ # Métodos auxiliares de formatação
5
+ module Formatacao
6
+ # Formata como CPF
7
+ #
8
+ # @return [String]
9
+ # @example
10
+ # "12345678901".to_br_cpf #=> 123.456.789-01
11
+ def to_br_cpf
12
+ self.to_s.gsub(/^(.{3})(.{3})(.{3})(.{2})$/,'\1.\2.\3-\4')
13
+ end
14
+
15
+ # Formata como CEP
16
+ #
17
+ # @return [String]
18
+ # @example
19
+ # "85253100".to_br_cep #=> "85253-100"
20
+ # 85253100.to_br_cep #=> "85253-100"
21
+ def to_br_cep
22
+ self.to_s.gsub(/^(.{5})(.{3})$/,'\1-\2')
23
+ end
24
+
25
+ # Formata como CNPJ
26
+ #
27
+ # @return [String]
28
+ # @example
29
+ # "12345678000901".to_br_cnpj #=> 12.345.678/0009-01
30
+ def to_br_cnpj
31
+ self.to_s.gsub(/^(.{2})(.{3})(.{3})(.{4})(.{2})$/,'\1.\2.\3/\4-\5')
32
+ end
33
+
34
+ # Gera formatação automática do documento baseado no tamanho do campo.
35
+ #
36
+ # @return [String] Retorna a mesma caso não encontre o formato adequado.
37
+ # @example
38
+ # "12345678000901".formata_documento #=> 12.345.678/0009-01
39
+ # "85253100".formata_documento #=> "85253-100"
40
+ # "12345678901".formata_documento #=> 123.456.789-01
41
+ # "12345".formata_documento #=> 12345
42
+ def formata_documento
43
+ case self.to_s.size
44
+ when 8 then self.to_br_cep
45
+ when 11 then self.to_br_cpf
46
+ when 14 then self.to_br_cnpj
47
+ else
48
+ self
49
+ end
50
+ end
51
+
52
+ # Remove caracteres que não sejam numéricos.
53
+ #
54
+ # @return [String]
55
+ # @example
56
+ # 1a23e45+".somente_numeros #=> 12345
57
+ def somente_numeros
58
+ self.to_s.gsub(/\D/,'')
59
+ end
60
+
61
+ # Monta a linha digitável padrão para todos os bancos segundo a BACEN.
62
+ #
63
+ # A linha digitável será composta por cinco campos:<br/>
64
+ # <b>1º campo</b>: <br/>
65
+ # Composto pelo código de Banco, código da moeda, as cinco primeiras posições do campo livre
66
+ # e o dígito verificador deste campo.<br/>
67
+ # <b>2º campo</b>: <br/>
68
+ # Composto pelas posições 6ª a 15ª do campo livre e o dígito verificador deste campo.<br/>
69
+ # <b>3º campo</b>: <br/>
70
+ # Composto pelas posições 16ª a 25ª do campo livre e o dígito verificador deste campo.<br/>
71
+ # <b>4º campo</b>: <br/>
72
+ # Composto pelo dígito verificador do código de barras, ou seja, a 5ª posição do código de barras.<br/>
73
+ # <b>5º campo</b>: <br/>
74
+ # Composto pelo fator de vencimento com 4(quatro) caracteres e o valor do documento com
75
+ # 10(dez) caracteres, sem separadores e sem edição.<br/>
76
+ #
77
+ # @return [String]
78
+ # @raise [ArgumentError] Caso não seja um número de 44 dígitos.
79
+ # @example
80
+ # "00192376900000135000000001238798777770016818".linha_digitavel #=> "00190.00009 01238.798779 77700.168188 2 37690000013500"
81
+ def linha_digitavel
82
+ if self =~ /^(\d{4})(\d{1})(\d{14})(\d{5})(\d{10})(\d{10})$/
83
+ linha = $1
84
+ linha << $4
85
+ linha << linha.modulo10.to_s
86
+ linha << $5
87
+ linha << $5.modulo10.to_s
88
+ linha << $6
89
+ linha << $6.modulo10.to_s
90
+ linha << $2
91
+ linha << $3
92
+ linha.gsub(/^(.{5})(.{5})(.{5})(.{6})(.{5})(.{6})(.{1})(.{14})$/,'\1.\2 \3.\4 \5.\6 \7 \8')
93
+ else
94
+ raise ArgumentError, "#{self} Precisa conter 44 caracteres numéricos."
95
+ end
96
+ end
97
+ end
98
+ end
99
+
100
+ [ String, Numeric ].each do |klass|
101
+ klass.class_eval { include Brcobranca::Formatacao }
102
+ end
@@ -0,0 +1,19 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module Brcobranca
3
+ module Limpeza
4
+ # Transforma Float em String preservando o zero a direita.
5
+ #
6
+ # @return [String]
7
+ # @example
8
+ # 1.9 #=> 190
9
+ # 1.93 #=> 193
10
+ def limpa_valor_moeda
11
+ inicio, fim = self.to_s.split(/\./)
12
+ (inicio + fim.ljust(2,'0'))
13
+ end
14
+ end
15
+ end
16
+
17
+ [ Float ].each do |klass|
18
+ klass.class_eval { include Brcobranca::Limpeza }
19
+ end
@@ -1,7 +1,6 @@
1
1
  module Brcobranca
2
2
  module Retorno
3
- class Base
4
- # Agência com DV, posições 17 à 21
3
+ class Base # Classe base para retornos bancários
5
4
  attr_accessor :agencia_com_dv
6
5
  attr_accessor :cedente_com_dv
7
6
  attr_accessor :convenio
@@ -1,44 +1,46 @@
1
1
  require 'parseline'
2
+ module Brcobranca
3
+ module Retorno
4
+ # Formato de Retorno CNAB 643
5
+ class RetornoCbr643 < Base
6
+ extend ParseLine::FixedWidth # Extendendo parseline
2
7
 
3
- # Formato de Retorno CNAB 643
4
- class RetornoCbr643 < Brcobranca::Retorno::Base
5
- # Extendendo parseline
6
- extend ParseLine::FixedWidth
7
-
8
- fixed_width_layout do |parse|
9
- parse.field :agencia_com_dv,17..21
10
- parse.field :cedente_com_dv,22..30
11
- parse.field :convenio,31..37
12
- parse.field :nosso_numero,63..79
13
- parse.field :tipo_cobranca,80..80
14
- parse.field :tipo_cobranca_anterior,81..81
15
- parse.field :natureza_recebimento,86..87
16
- parse.field :carteira_variacao,91..93
17
- parse.field :desconto,95..99
18
- parse.field :iof,100..104
19
- parse.field :carteira,106..107
20
- parse.field :comando,108..109
21
- parse.field :data_liquidacao,110..115
22
- parse.field :data_vencimento,146..151
23
- parse.field :valor_titulo,152..164
24
- parse.field :banco_recebedor,165..167
25
- parse.field :agencia_recebedora_com_dv,168..172
26
- parse.field :especie_documento,173..174
27
- parse.field :data_credito,175..180
28
- parse.field :valor_tarifa,181..187
29
- parse.field :outras_despesas,188..200
30
- parse.field :juros_desconto,201..213
31
- parse.field :iof_desconto,214..226
32
- parse.field :valor_abatimento,227..239
33
- parse.field :desconto_concedito,240..252
34
- parse.field :valor_recebido,253..265
35
- parse.field :juros_mora,266..278
36
- parse.field :outros_recebimento,279..291
37
- parse.field :abatimento_nao_aproveitado,292..304
38
- parse.field :valor_lancamento,305..317
39
- parse.field :indicativo_lancamento,318..318
40
- parse.field :indicador_valor,319..319
41
- parse.field :valor_ajuste,320..331
42
- parse.field :sequencial,394..399
8
+ fixed_width_layout do |parse|
9
+ parse.field :agencia_com_dv,17..21
10
+ parse.field :cedente_com_dv,22..30
11
+ parse.field :convenio,31..37
12
+ parse.field :nosso_numero,63..79
13
+ parse.field :tipo_cobranca,80..80
14
+ parse.field :tipo_cobranca_anterior,81..81
15
+ parse.field :natureza_recebimento,86..87
16
+ parse.field :carteira_variacao,91..93
17
+ parse.field :desconto,95..99
18
+ parse.field :iof,100..104
19
+ parse.field :carteira,106..107
20
+ parse.field :comando,108..109
21
+ parse.field :data_liquidacao,110..115
22
+ parse.field :data_vencimento,146..151
23
+ parse.field :valor_titulo,152..164
24
+ parse.field :banco_recebedor,165..167
25
+ parse.field :agencia_recebedora_com_dv,168..172
26
+ parse.field :especie_documento,173..174
27
+ parse.field :data_credito,175..180
28
+ parse.field :valor_tarifa,181..187
29
+ parse.field :outras_despesas,188..200
30
+ parse.field :juros_desconto,201..213
31
+ parse.field :iof_desconto,214..226
32
+ parse.field :valor_abatimento,227..239
33
+ parse.field :desconto_concedito,240..252
34
+ parse.field :valor_recebido,253..265
35
+ parse.field :juros_mora,266..278
36
+ parse.field :outros_recebimento,279..291
37
+ parse.field :abatimento_nao_aproveitado,292..304
38
+ parse.field :valor_lancamento,305..317
39
+ parse.field :indicativo_lancamento,318..318
40
+ parse.field :indicador_valor,319..319
41
+ parse.field :valor_ajuste,320..331
42
+ parse.field :sequencial,394..399
43
+ end
44
+ end
43
45
  end
44
46
  end
@@ -0,0 +1,3 @@
1
+ module Brcobranca
2
+ VERSION = "3.0.0"
3
+ end
data/lib/brcobranca.rb CHANGED
@@ -1,4 +1,10 @@
1
- $:.unshift(File.dirname(__FILE__)) unless $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.join(File.dirname(__FILE__))
3
+ require 'brcobranca/calculo'
4
+ require 'brcobranca/limpeza'
5
+ require 'brcobranca/formatacao'
6
+ require 'brcobranca/calculo_data'
7
+ require 'brcobranca/currency'
2
8
 
3
9
  begin
4
10
  require 'date'
@@ -8,28 +14,99 @@ rescue LoadError
8
14
  require 'date'
9
15
  end
10
16
 
11
- %w(core_ext currency config).each {|req| require File.join(File.dirname(__FILE__),"brcobranca",req) }
17
+ begin
18
+ require 'active_model'
19
+ rescue LoadError
20
+ require 'rubygems' unless ENV['NO_RUBYGEMS']
21
+ gem 'active_model', ">= 3.0.0"
22
+ require 'active_model'
23
+ end
24
+
12
25
 
13
- %w(base banco_brasil banco_itau banco_hsbc banco_real banco_bradesco banco_unibanco banco_banespa).each {|req| require File.join(File.dirname(__FILE__),"brcobranca","boleto",req) }
26
+ module Brcobranca
27
+ # Exception lançada quando algum tipo de boleto soicitado ainda não tiver sido implementado.
28
+ class NaoImplementado < NotImplementedError
29
+ end
30
+
31
+ # Exception lançada quando os dados informados para o boleto estão inválidos.
32
+ #
33
+ # Você pode usar assim na sua aplicação:
34
+ # rescue Brcobranca::BoletoInvalido => invalido
35
+ # puts invalido.errors
36
+ class BoletoInvalido < StandardError
14
37
 
15
- %w(util rghost).each {|req| require File.join(File.dirname(__FILE__),"brcobranca","boleto","template",req) }
38
+ # Atribui o objeto boleto e pega seus erros de validação
39
+ def initialize(boleto)
40
+ errors = boleto.errors.full_messages.join(', ')
41
+ super(errors)
42
+ end
43
+ end
16
44
 
17
- %w(base retorno_cbr643).each {|req| require File.join(File.dirname(__FILE__),"brcobranca","retorno",req) }
45
+ # Configurações do Brcobranca.
46
+ #
47
+ # Para mudar as configurações padrão, você pode fazer assim:
48
+ # config/environments/test.rb:
49
+ #
50
+ # Brcobranca.configure do |config|
51
+ # config.formato = :gif
52
+ # end
53
+ #
54
+ # Ou colocar em um arquivo na pasta initializer do rails.
55
+ class Configuration
56
+ # Gerador de arquivo de boleto.
57
+ # @return [Symbol]
58
+ # @param [Symbol] (Padrão: :rghost)
59
+ attr_accessor :gerador
60
+ # Formato do arquivo de boleto a ser gerado.
61
+ # @return [Symbol]
62
+ # @param [Symbol] (Padrão: :pdf)
63
+ # @see http://wiki.github.com/shairontoledo/rghost/supported-devices-drivers-and-formats Veja mais formatos na documentação do rghost.
64
+ attr_accessor :formato
18
65
 
19
- case Brcobranca::Config::OPCOES[:gerador]
20
- when 'rghost'
66
+ # Resolução em pixels do arquivo gerado.
67
+ # @return [Integer]
68
+ # @param [Integer] (Padrão: 150)
69
+ attr_accessor :resolucao
21
70
 
22
- module Brcobranca::Boleto
23
- Base.class_eval do
24
- include Brcobranca::Boleto::Template::Rghost
25
- include Brcobranca::Boleto::Template::Util
71
+ # Atribui valores padrões de configuração
72
+ def initialize
73
+ self.gerador = :rghost
74
+ self.formato = :pdf
75
+ self.resolucao = 150
26
76
  end
27
77
  end
28
78
 
29
- else
30
- "Configure o gerador na opção 'Brcobranca::Config::OPCOES[:gerador]' corretamente!!!"
31
- end
79
+ # Atribui os valores customizados para as configurações.
80
+ def self.configuration
81
+ @configuration ||= Configuration.new
82
+ end
32
83
 
33
- module Brcobranca
34
- VERSION = '2.0.6'
84
+ # Bloco para realizar configurações customizadas.
85
+ def self.setup
86
+ yield(configuration)
87
+ end
88
+
89
+ # Módulo para classes de boletos
90
+ module Boleto
91
+ autoload :Base, 'brcobranca/boleto/base'
92
+ autoload :BancoBrasil, 'brcobranca/boleto/banco_brasil'
93
+ autoload :Itau, 'brcobranca/boleto/itau'
94
+ autoload :Hsbc, 'brcobranca/boleto/hsbc'
95
+ autoload :Real, 'brcobranca/boleto/real'
96
+ autoload :Bradesco, 'brcobranca/boleto/bradesco'
97
+ autoload :Unibanco, 'brcobranca/boleto/unibanco'
98
+ autoload :Caixa, 'brcobranca/boleto/caixa'
99
+
100
+ # Módulos para classes de template
101
+ module Template
102
+ autoload :Base, 'brcobranca/boleto/template/base'
103
+ autoload :Rghost, 'brcobranca/boleto/template/rghost'
104
+ end
105
+ end
106
+
107
+ # Módulos para classes de retorno bancário
108
+ module Retorno
109
+ autoload :Base, 'brcobranca/retorno/base'
110
+ autoload :RetornoCbr643, 'brcobranca/retorno/retorno_cbr643'
111
+ end
35
112
  end
@@ -1,6 +1,7 @@
1
+ # -*- encoding: utf-8 -*-
1
2
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
3
 
3
- describe BancoBradesco do
4
+ describe Brcobranca::Boleto::Bradesco do
4
5
  before(:each) do
5
6
  @valid_attributes = {
6
7
  :especie_documento => "DM",
@@ -22,8 +23,8 @@ describe BancoBradesco do
22
23
  }
23
24
  end
24
25
 
25
- it "should create a new default instance" do
26
- boleto_novo = BancoBradesco.new
26
+ it "Criar nova instancia com atributos padrões" do
27
+ boleto_novo = Brcobranca::Boleto::Bradesco.new
27
28
  boleto_novo.banco.should eql("237")
28
29
  boleto_novo.especie_documento.should eql("DM")
29
30
  boleto_novo.especie.should eql("R$")
@@ -37,11 +38,11 @@ describe BancoBradesco do
37
38
  boleto_novo.valor_documento.should eql(0.0)
38
39
  boleto_novo.local_pagamento.should eql("QUALQUER BANCO ATÉ O VENCIMENTO")
39
40
  boleto_novo.carteira.should eql("06")
40
- boleto_novo.should be_instance_of(BancoBradesco)
41
+
41
42
  end
42
43
 
43
- it "should create a new instance given valid attributes" do
44
- boleto_novo = BancoBradesco.new(@valid_attributes)
44
+ it "Criar nova instancia com atributos válidos" do
45
+ boleto_novo = Brcobranca::Boleto::Bradesco.new(@valid_attributes)
45
46
  boleto_novo.banco.should eql("237")
46
47
  boleto_novo.especie_documento.should eql("DM")
47
48
  boleto_novo.especie.should eql("R$")
@@ -58,29 +59,28 @@ describe BancoBradesco do
58
59
  boleto_novo.documento_cedente.should eql("12345678912")
59
60
  boleto_novo.sacado.should eql("Claudio Pozzebom")
60
61
  boleto_novo.sacado_documento.should eql("12345678900")
61
- boleto_novo.conta_corrente.should eql("61900")
62
+ boleto_novo.conta_corrente.should eql("0061900")
62
63
  boleto_novo.agencia.should eql("4042")
63
64
  boleto_novo.convenio.should eql(12387989)
64
- boleto_novo.numero_documento.should eql("777700168")
65
+ boleto_novo.numero_documento.should eql("00777700168")
65
66
  boleto_novo.carteira.should eql("06")
66
- boleto_novo.should be_instance_of(BancoBradesco)
67
67
  end
68
68
 
69
- it "should mount codigo de barras para carteira numero 06" do
69
+ it "Montar código de barras para carteira número 06" do
70
70
  @valid_attributes[:valor] = 2952.95
71
71
  @valid_attributes[:data_documento] = Date.parse("2009-04-30")
72
72
  @valid_attributes[:dias_vencimento] = 0
73
73
  @valid_attributes[:numero_documento] = "75896452"
74
74
  @valid_attributes[:conta_corrente] = "0403005"
75
75
  @valid_attributes[:agencia] = "1172"
76
- boleto_novo = BancoBradesco.new(@valid_attributes)
77
- boleto_novo.should be_instance_of(BancoBradesco)
78
- boleto_novo.monta_codigo_43_digitos.should eql("2379422300002952951172060007589645204030050")
76
+ boleto_novo = Brcobranca::Boleto::Bradesco.new(@valid_attributes)
77
+
78
+ boleto_novo.codigo_barras_segunda_parte.should eql("1172060007589645204030050")
79
79
  boleto_novo.codigo_barras.should eql("23795422300002952951172060007589645204030050")
80
- boleto_novo.codigo_barras.linha_digitavel.should eql("23791.17209 60007.589645 52040.300502 5 42230000295295")
80
+ boleto_novo.codigo_barras.linha_digitavel.should eql("23791.17209 60007.589645 52040.300502 5 42230000295295")
81
81
  end
82
82
 
83
- it "should mount codigo de barras para carteira numero 03" do
83
+ it "Montar código de barras para carteira número 03" do
84
84
  @valid_attributes[:valor] = 135.00
85
85
  @valid_attributes[:dias_vencimento] = 1
86
86
  @valid_attributes[:data_documento] = Date.parse("2008-02-01")
@@ -88,36 +88,22 @@ describe BancoBradesco do
88
88
  @valid_attributes[:conta_corrente] = "61900"
89
89
  @valid_attributes[:agencia] = "4042"
90
90
  @valid_attributes[:carteira] = "03"
91
- boleto_novo = BancoBradesco.new(@valid_attributes)
92
- boleto_novo.should be_instance_of(BancoBradesco)
93
- boleto_novo.monta_codigo_43_digitos.should eql("2379377000000135004042030077770016800619000")
91
+ boleto_novo = Brcobranca::Boleto::Bradesco.new(@valid_attributes)
92
+
93
+ boleto_novo.codigo_barras_segunda_parte.should eql("4042030077770016800619000")
94
94
  boleto_novo.codigo_barras.should eql("23791377000000135004042030077770016800619000")
95
95
  boleto_novo.codigo_barras.linha_digitavel.should eql("23794.04201 30077.770011 68006.190000 1 37700000013500")
96
96
  end
97
97
 
98
- # TODO - should give exception
99
- it "should return nil when attributes are nil" do
100
- @valid_attributes[:valor] = 0
101
- @valid_attributes[:data_documento] = Date.parse("2008-02-01")
102
- @valid_attributes[:dias_vencimento] = 0
103
- @valid_attributes[:numero_documento] = ""
104
- @valid_attributes[:banco] = ""
105
- @valid_attributes[:carteira] = ""
106
- @valid_attributes[:moeda] = ""
107
- @valid_attributes[:convenio] = ""
108
- @valid_attributes[:conta_corrente] = ""
109
- @valid_attributes[:agencia] = ""
110
- @valid_attributes[:carteira] = ""
111
-
112
- boleto_novo = BancoBradesco.new(@valid_attributes)
113
- boleto_novo.should be_instance_of(BancoBradesco)
114
- boleto_novo.monta_codigo_43_digitos.should be_nil
115
- boleto_novo.codigo_barras.should be_nil
98
+ it "Não permitir gerar boleto com atributos inválido" do
99
+ boleto_novo = Brcobranca::Boleto::Bradesco.new
100
+ lambda { boleto_novo.codigo_barras }.should raise_error(Brcobranca::BoletoInvalido)
101
+ boleto_novo.errors.count.should eql(3)
116
102
  end
117
103
 
118
- it "should mount nosso_numero_boleto" do
119
- boleto_novo = BancoBradesco.new(@valid_attributes)
120
- boleto_novo.should be_instance_of(BancoBradesco)
104
+ it "Montar nosso_numero_boleto" do
105
+ boleto_novo = Brcobranca::Boleto::Bradesco.new(@valid_attributes)
106
+
121
107
  boleto_novo.numero_documento = "4042"
122
108
  boleto_novo.carteira = "06"
123
109
  boleto_novo.nosso_numero_boleto.should eql("06/00000004042-8")
@@ -144,28 +130,55 @@ describe BancoBradesco do
144
130
  boleto_novo.nosso_numero_dv.should eql(6)
145
131
  end
146
132
 
147
- it "should mount agencia_conta_boleto" do
148
- boleto_novo = BancoBradesco.new(@valid_attributes)
149
- boleto_novo.should be_instance_of(BancoBradesco)
150
- boleto_novo.agencia_conta_boleto.should eql("4042-8 / 61900-0")
133
+ it "Montar agencia_conta_boleto" do
134
+ boleto_novo = Brcobranca::Boleto::Bradesco.new(@valid_attributes)
135
+
136
+ boleto_novo.agencia_conta_boleto.should eql("4042-8 / 0061900-0")
151
137
  boleto_novo.agencia = "0719"
152
- boleto_novo.agencia_conta_boleto.should eql("0719-6 / 61900-0")
138
+ boleto_novo.agencia_conta_boleto.should eql("0719-6 / 0061900-0")
153
139
  boleto_novo.agencia = "0548"
154
140
  boleto_novo.conta_corrente = "1448"
155
- boleto_novo.agencia_conta_boleto.should eql("0548-7 / 1448-6")
141
+ boleto_novo.agencia_conta_boleto.should eql("0548-7 / 0001448-6")
156
142
  end
157
-
158
- it "should test outputs" do
143
+
144
+ it "Busca logotipo do banco" do
145
+ boleto_novo = Brcobranca::Boleto::Bradesco.new
146
+ File.exist?(boleto_novo.logotipo).should be_true
147
+ File.stat(boleto_novo.logotipo).zero?.should be_false
148
+ end
149
+
150
+ it "Gerar boleto nos formatos válidos com método to_" do
159
151
  @valid_attributes[:valor] = 2952.95
160
152
  @valid_attributes[:data_documento] = Date.parse("2009-04-30")
161
153
  @valid_attributes[:dias_vencimento] = 0
162
154
  @valid_attributes[:numero_documento] = "75896452"
163
155
  @valid_attributes[:conta_corrente] = "0403005"
164
156
  @valid_attributes[:agencia] = "1172"
165
- boleto_novo = BancoBradesco.new(@valid_attributes)
166
- boleto_novo.should be_instance_of(BancoBradesco)
157
+ boleto_novo = Brcobranca::Boleto::Bradesco.new(@valid_attributes)
158
+
159
+ %w| pdf jpg tif png ps |.each do |format|
160
+ file_body=boleto_novo.send("to_#{format}".to_sym)
161
+ tmp_file=Tempfile.new("foobar." << format)
162
+ tmp_file.puts file_body
163
+ tmp_file.close
164
+ File.exist?(tmp_file.path).should be_true
165
+ File.stat(tmp_file.path).zero?.should be_false
166
+ File.delete(tmp_file.path).should eql(1)
167
+ File.exist?(tmp_file.path).should be_false
168
+ end
169
+ end
170
+
171
+ it "Gerar boleto nos formatos válidos" do
172
+ @valid_attributes[:valor] = 2952.95
173
+ @valid_attributes[:data_documento] = Date.parse("2009-04-30")
174
+ @valid_attributes[:dias_vencimento] = 0
175
+ @valid_attributes[:numero_documento] = "75896452"
176
+ @valid_attributes[:conta_corrente] = "0403005"
177
+ @valid_attributes[:agencia] = "1172"
178
+ boleto_novo = Brcobranca::Boleto::Bradesco.new(@valid_attributes)
179
+
167
180
  %w| pdf jpg tif png ps |.each do |format|
168
- file_body=boleto_novo.to(format.to_sym)
181
+ file_body=boleto_novo.to(format)
169
182
  tmp_file=Tempfile.new("foobar." << format)
170
183
  tmp_file.puts file_body
171
184
  tmp_file.close