cnab 0.2.0 → 0.3.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 (42) hide show
  1. data/cnab.gemspec +1 -2
  2. data/lib/cnab.rb +12 -7
  3. data/lib/cnab/definition.rb +22 -0
  4. data/lib/cnab/definitions.rb +10 -0
  5. data/lib/cnab/definitions/header_arquivo.rb +14 -0
  6. data/lib/cnab/definitions/header_lote.rb +14 -0
  7. data/lib/cnab/definitions/segmento_t.rb +14 -0
  8. data/lib/cnab/definitions/segmento_u.rb +14 -0
  9. data/lib/cnab/definitions/trailer_arquivo.rb +14 -0
  10. data/lib/cnab/definitions/trailer_lote.rb +14 -0
  11. data/lib/cnab/detalhe.rb +5 -5
  12. data/lib/cnab/detalhe/segmento_t.rb +4 -31
  13. data/lib/cnab/detalhe/segmento_u.rb +4 -26
  14. data/lib/cnab/header_arquivo.rb +3 -25
  15. data/lib/cnab/header_lote/cobranca.rb +3 -24
  16. data/lib/cnab/helper.rb +3 -2
  17. data/lib/cnab/trailer_arquivo.rb +3 -9
  18. data/lib/cnab/trailer_lote/cobranca.rb +3 -16
  19. data/lib/cnab/version.rb +1 -1
  20. data/lib/cnab/versions/08.7/header_arquivo.yml +24 -0
  21. data/lib/cnab/versions/08.7/header_lote.yml +23 -0
  22. data/lib/cnab/versions/08.7/segmento_t.yml +29 -0
  23. data/lib/cnab/versions/08.7/segmento_u.yml +24 -0
  24. data/lib/cnab/versions/08.7/trailer_arquivo.yml +8 -0
  25. data/lib/cnab/versions/08.7/trailer_lote.yml +15 -0
  26. data/spec/cnab.txt +6 -0
  27. data/spec/cnab/definition_spec.rb +29 -0
  28. data/spec/cnab/definitions/header_arquivo_spec.rb +17 -0
  29. data/spec/cnab/definitions/header_lote_spec.rb +17 -0
  30. data/spec/cnab/definitions/segmento_t_spec.rb +17 -0
  31. data/spec/cnab/definitions/segmento_u_spec.rb +17 -0
  32. data/spec/cnab/definitions/trailer_arquivo_spec.rb +17 -0
  33. data/spec/cnab/definitions/trailer_lote_spec.rb +17 -0
  34. data/spec/cnab/detalhe/segmento_t_spec.rb +6 -2
  35. data/spec/cnab/detalhe/segmento_t_u_spec.rb +4 -2
  36. data/spec/cnab/detalhe/segmento_u_spec.rb +6 -2
  37. data/spec/cnab/detalhe_spec.rb +8 -6
  38. data/spec/cnab/header_arquivo_spec.rb +6 -2
  39. data/spec/cnab/header_lote/cobranca_spec.rb +6 -2
  40. data/spec/cnab/trailer_arquivo_spec.rb +6 -2
  41. data/spec/cnab_spec.rb +9 -40
  42. metadata +34 -20
@@ -18,6 +18,5 @@ Gem::Specification.new do |gem|
18
18
 
19
19
  gem.add_development_dependency "rake"
20
20
  gem.add_development_dependency "rspec"
21
- gem.add_development_dependency "fakefs"
22
21
  gem.add_development_dependency "coveralls"
23
- end
22
+ end
@@ -1,4 +1,5 @@
1
1
  require "cnab/version"
2
+ require "yaml"
2
3
 
3
4
  module Cnab
4
5
  autoload :HeaderArquivo, 'cnab/header_arquivo'
@@ -7,31 +8,35 @@ module Cnab
7
8
  autoload :TrailerLote, 'cnab/trailer_lote'
8
9
  autoload :Detalhe, 'cnab/detalhe'
9
10
  autoload :Retorno, 'cnab/retorno'
11
+ autoload :Definition, 'cnab/definition'
12
+ autoload :Definitions, 'cnab/definitions'
10
13
 
11
14
  autoload :Helper, 'cnab/helper'
12
15
  autoload :Exceptions, 'cnab/exceptions'
13
16
 
14
- def self.parse(file = nil, merge = false)
17
+ def self.parse(file = nil, merge = false, version = '08.7')
15
18
  raise Exceptions::NoFileGiven if file.nil?
16
19
 
20
+ definition = Cnab::Definition.new(version)
21
+
17
22
  File.open(file, 'rb') do |f|
18
- header_arquivo = HeaderArquivo.new(f.gets)
19
- header_lote = HeaderLote::Cobranca.new(f.gets)
23
+ header_arquivo = HeaderArquivo.new(f.gets, definition.header_arquivo)
24
+ header_lote = HeaderLote::Cobranca.new(f.gets, definition.header_lote)
20
25
 
21
26
  detalhes = []
22
27
  while(line = f.gets)
23
28
  if line[7] == "5"
24
- trailer_lote = TrailerLote::Cobranca.new(line)
29
+ trailer_lote = TrailerLote::Cobranca.new(line, definition.trailer_lote)
25
30
  break
26
31
  end
27
32
  if merge
28
- detalhes << Detalhe.merge(line, f.gets)
33
+ detalhes << Detalhe.merge(line, f.gets, definition)
29
34
  else
30
- detalhes << Detalhe.parse(line)
35
+ detalhes << Detalhe.parse(line, definition)
31
36
  end
32
37
  end
33
38
 
34
- trailer_arquivo = TrailerArquivo.new(f.gets)
39
+ trailer_arquivo = TrailerArquivo.new(f.gets, definition.trailer_arquivo)
35
40
  Retorno.new({ :header_arquivo => header_arquivo,
36
41
  :header_lote => header_lote,
37
42
  :detalhes => detalhes,
@@ -0,0 +1,22 @@
1
+ module Cnab
2
+ class Definition
3
+ def initialize(version)
4
+ @header_arquivo = Definitions::HeaderArquivo.new(version)
5
+ @header_lote = Definitions::HeaderLote.new(version)
6
+ @segmento_t = Definitions::SegmentoT.new(version)
7
+ @segmento_u = Definitions::SegmentoU.new(version)
8
+ @trailer_lote = Definitions::TrailerLote.new(version)
9
+ @trailer_arquivo = Definitions::TrailerArquivo.new(version)
10
+ end
11
+
12
+ def method_missing(method_name)
13
+ return instance_variable_get("@#{method_name}") if instance_variable_defined?("@#{method_name}")
14
+ super
15
+ end
16
+
17
+ def respond_to_missing?(method_name, include_private = false)
18
+ return true if instance_variable_defined?("@#{method_name}")
19
+ super
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,10 @@
1
+ module Cnab
2
+ module Definitions
3
+ autoload :HeaderArquivo, 'cnab/definitions/header_arquivo'
4
+ autoload :HeaderLote, 'cnab/definitions/header_lote'
5
+ autoload :TrailerArquivo, 'cnab/definitions/trailer_arquivo'
6
+ autoload :TrailerLote, 'cnab/definitions/trailer_lote'
7
+ autoload :SegmentoT, 'cnab/definitions/segmento_t'
8
+ autoload :SegmentoU, 'cnab/definitions/segmento_u'
9
+ end
10
+ end
@@ -0,0 +1,14 @@
1
+ module Cnab
2
+ module Definitions
3
+ class HeaderArquivo
4
+ def initialize(version)
5
+ @definition = YAML.load_file("lib/cnab/versions/#{version}/header_arquivo.yml")
6
+ end
7
+
8
+ def method_missing(method)
9
+ range = @definition[method.to_s].split('..')
10
+ Range.new(range[0].to_i, range[1].to_i)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module Cnab
2
+ module Definitions
3
+ class HeaderLote
4
+ def initialize(version)
5
+ @definition = YAML.load_file("lib/cnab/versions/#{version}/header_lote.yml")
6
+ end
7
+
8
+ def method_missing(method)
9
+ range = @definition[method.to_s].split('..')
10
+ Integer(range[0])..Integer(range[1])
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module Cnab
2
+ module Definitions
3
+ class SegmentoT
4
+ def initialize(version)
5
+ @definition = YAML.load_file("lib/cnab/versions/#{version}/segmento_t.yml")
6
+ end
7
+
8
+ def method_missing(method)
9
+ range = @definition[method.to_s].split('..')
10
+ Integer(range[0])..Integer(range[1])
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module Cnab
2
+ module Definitions
3
+ class SegmentoU
4
+ def initialize(version)
5
+ @definition = YAML.load_file("lib/cnab/versions/#{version}/segmento_u.yml")
6
+ end
7
+
8
+ def method_missing(method)
9
+ range = @definition[method.to_s].split('..')
10
+ Integer(range[0])..Integer(range[1])
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module Cnab
2
+ module Definitions
3
+ class TrailerArquivo
4
+ def initialize(version)
5
+ @definition = YAML.load_file("lib/cnab/versions/#{version}/trailer_arquivo.yml")
6
+ end
7
+
8
+ def method_missing(method)
9
+ range = @definition[method.to_s].split('..')
10
+ Integer(range[0])..Integer(range[1])
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module Cnab
2
+ module Definitions
3
+ class TrailerLote
4
+ def initialize(version)
5
+ @definition = YAML.load_file("lib/cnab/versions/#{version}/trailer_lote.yml")
6
+ end
7
+
8
+ def method_missing(method)
9
+ range = @definition[method.to_s].split('..')
10
+ Integer(range[0])..Integer(range[1])
11
+ end
12
+ end
13
+ end
14
+ end
@@ -4,19 +4,19 @@ module Cnab
4
4
  autoload :SegmentoU, 'cnab/detalhe/segmento_u'
5
5
  autoload :SegmentoTU, 'cnab/detalhe/segmento_t_u'
6
6
 
7
- def self.parse(line)
7
+ def self.parse(line, definition)
8
8
  case line[13]
9
9
  when "T"
10
- SegmentoT.new(line)
10
+ SegmentoT.new(line, definition.segmento_t)
11
11
  when "U"
12
- SegmentoU.new(line)
12
+ SegmentoU.new(line, definition.segmento_u)
13
13
  else
14
14
  raise Exceptions::SegmentNotImplemented
15
15
  end
16
16
  end
17
17
 
18
- def self.merge(line1, line2)
19
- SegmentoTU.new(parse(line1), parse(line2))
18
+ def self.merge(line1, line2, definition)
19
+ SegmentoTU.new(parse(line1, definition), parse(line2, definition))
20
20
  end
21
21
  end
22
22
  end
@@ -3,39 +3,12 @@ module Cnab
3
3
  class SegmentoT
4
4
  include Helper
5
5
 
6
- def initialize(line)
6
+ def initialize(line, definition)
7
7
  raise Exceptions::LineNotParseable unless line.size == 242
8
8
 
9
- @banco = line[0..2].strip
10
- @lote = line[3..6].strip
11
- @tipo_registro = line[7..7].strip
12
- @num_registro = line[8..12].strip
13
- @segmento = line[13..13].strip
14
- @res_cnab1 = line[14..14].strip
15
- @cod_movimentacao = line[15..16].strip
16
- @agencia = line[17..21].strip
17
- @dv_agencia = line[22..22].strip
18
- @conta_corrente = line[23..34].strip
19
- @dv_conta = line[35..35].strip
20
- @dv_conta_agencia = line[36..36].strip
21
- @id_titulo = line[37..56].strip
22
- @carteira = line[57..57].strip
23
- @doc_cobranca = line[58..72].strip
24
- @vencimento = line[73..80].strip
25
- @valor_titulo = line[81..95].strip
26
- @banco_recebimento = line[96..98].strip
27
- @ag_recebimento = line[99..103].strip
28
- @dv_ag_recebimento = line[104..104].strip
29
- @id_titulo_empresa = line[105..129].strip
30
- @cod_moeda = line[130..131].strip
31
- @tipo_inscricao = line[132..132].strip
32
- @num_inscricao = line[133..147].strip
33
- @nome = line[148..187].strip
34
- @num_contrato = line[188..197].strip
35
- @tarifa = line[198..212].strip
36
- @motivo = line[213..222].strip
37
- @res_cnab2 = line[223..239].strip
9
+ @line = line
10
+ @definition = definition
38
11
  end
39
12
  end
40
13
  end
41
- end
14
+ end
@@ -3,34 +3,12 @@ module Cnab
3
3
  class SegmentoU
4
4
  include Helper
5
5
 
6
- def initialize(line)
6
+ def initialize(line, definition)
7
7
  raise Exceptions::LineNotParseable unless line.size == 242
8
8
 
9
- @banco = line[0..2].strip
10
- @lote = line[3..6].strip
11
- @tipo_registro = line[7..7].strip
12
- @num_registro = line[8..12].strip
13
- @segmento = line[13..13].strip
14
- @res_cnab1 = line[14..14].strip
15
- @cod_movimentacao = line[15..16].strip
16
- @acrescimos = line[17..31].strip
17
- @valor_desconto = line[32..46].strip
18
- @valor_abatimento = line[47..61].strip
19
- @valor_iof = line[62..76].strip
20
- @valor_pago = line[77..91].strip
21
- @valor_liquido = line[92..106].strip
22
- @outras_despesas = line[107..122].strip
23
- @outros_creditos = line[123..136].strip
24
- @data_ocorrencia = line[137..144].strip
25
- @data_credito = line[145..152].strip
26
- @cod_ocorrencia_sacado = line[153..156].strip
27
- @data_ocorrencia_sacado = line[157..164].strip
28
- @valor_ocorrencia_sacado = line[165..179].strip
29
- @compl_ocorrencia_sacado = line[180..209].strip
30
- @banco_compensacao = line[210..212].strip
31
- @banco_enviado = line[213..232].strip
32
- @res_cnab2 = line[233..239].strip
9
+ @line = line
10
+ @definition = definition
33
11
  end
34
12
  end
35
13
  end
36
- end
14
+ end
@@ -2,33 +2,11 @@ module Cnab
2
2
  class HeaderArquivo
3
3
  include Helper
4
4
 
5
- def initialize(line)
5
+ def initialize(line, definition)
6
6
  raise Exceptions::LineNotParseable unless line.size == 242
7
7
 
8
- @banco = line[0..2].strip
9
- @lote = line[3..6].strip
10
- @registro = line[7..7].strip
11
- @res_cnab1 = line[8..16].strip
12
- @tipo_empresa = line[17..17].strip
13
- @num_empresa = line[18..31].strip
14
- @convenio = line[32..51].strip
15
- @agencia = line[52..56].strip
16
- @dv_agencia = line[57..57].strip
17
- @conta_corrente = line[58..69].strip
18
- @dv_conta = line[70..70].strip
19
- @dv_conta_agencia = line[71..71].strip
20
- @nome_empresa = line[72..101].strip
21
- @nome_banco = line[102..131].strip
22
- @res_cnab2 = line[132..141].strip
23
- @cod_retorno = line[142..142].strip
24
- @data_geracao_arq = line[143..150].strip
25
- @hora_geracao_arq = line[151..156].strip
26
- @sequencia = line[157..162].strip
27
- @versao = line[163..165].strip
28
- @densidade = line[166..170].strip
29
- @res_banco = line[171..190].strip
30
- @res_empresa = line[191..210].strip
31
- @res_cnab3 = line[211..239].strip
8
+ @line = line
9
+ @definition = definition
32
10
  end
33
11
  end
34
12
  end
@@ -3,32 +3,11 @@ module Cnab
3
3
  class Cobranca
4
4
  include Helper
5
5
 
6
- def initialize(line)
6
+ def initialize(line, definition)
7
7
  raise Exceptions::LineNotParseable unless line.size == 242
8
8
 
9
- @banco = line[0..2].strip
10
- @lote = line[3..6].strip
11
- @registro = line[7..7].strip
12
- @tipo_operacao = line[8..8].strip
13
- @tipo_servico = line[9..10].strip
14
- @res_cnab1 = line[11..12].strip
15
- @layout_lote = line[13..15].strip
16
- @res_cnab2 = line[16..16].strip
17
- @tipo_empresa = line[17..17].strip
18
- @num_empresa = line[18..32].strip
19
- @convenio = line[33..52].strip
20
- @agencia = line[53..57].strip
21
- @dv_agencia = line[58..58].strip
22
- @conta_corrente = line[59..70].strip
23
- @dv_conta = line[71..71].strip
24
- @dv_conta_agencia = line[72..72].strip
25
- @nome_empresa = line[73..102].strip
26
- @informacao1 = line[103..142].strip
27
- @informacao2 = line[143..182].strip
28
- @numero_remessa = line[183..190].strip
29
- @data_gravacao = line[191..198].strip
30
- @data_credito = line[199..206].strip
31
- @res_cnab3 = line[207..239].strip
9
+ @line = line
10
+ @definition = definition
32
11
  end
33
12
  end
34
13
  end
@@ -1,11 +1,12 @@
1
1
  module Cnab
2
2
  module Helper
3
3
  def method_missing(method)
4
- instance_variable_get("@#{method}")
4
+ return instance_variable_get("@#{method}") if instance_variable_defined?("@#{method}")
5
+ instance_variable_set("@#{method}", @line[@definition.send(method)].strip)
5
6
  end
6
7
 
7
8
  def respond_to_missing?(method_name, include_private = false)
8
- return true unless instance_variable_get("@#{method_name}").nil?
9
+ return true unless definition.respond_to?(method_name)
9
10
  super
10
11
  end
11
12
 
@@ -2,17 +2,11 @@ module Cnab
2
2
  class TrailerArquivo
3
3
  include Helper
4
4
 
5
- def initialize(line)
5
+ def initialize(line, definition)
6
6
  raise Exceptions::LineNotParseable unless line.size == 242
7
7
 
8
- @banco = line[0..2].strip
9
- @lote = line[3..6].strip
10
- @registro = line[7..7].strip
11
- @res_cnab1 = line[8..16].strip
12
- @qtd_lotes = line[17..22].strip
13
- @qtd_registros = line[23..28].strip
14
- @qtd_contas = line[29..34].strip
15
- @res_cnab2 = line[35..239].strip
8
+ @line = line
9
+ @definition = definition
16
10
  end
17
11
  end
18
12
  end
@@ -3,24 +3,11 @@ module Cnab
3
3
  class Cobranca
4
4
  include Helper
5
5
 
6
- def initialize(line)
6
+ def initialize(line, definition)
7
7
  raise Exceptions::LineNotParseable unless line.size == 242
8
8
 
9
- @banco = line[0..2].strip
10
- @lote = line[3..6].strip
11
- @registro = line[7..7].strip
12
- @res_cnab1 = line[8..16].strip
13
- @qtd_registros = line[17..22].strip
14
- @qtd_titulos_simples = line[23..28].strip
15
- @valor_titulos_simples = line[29..45].strip
16
- @qtd_titulos_vinculada = line[46..51].strip
17
- @valor_titulos_simples = line[52..68].strip
18
- @qtd_titulos_caucionada = line[69..74].strip
19
- @valor_titulos_caucionada = line[75..91].strip
20
- @qtd_titulos_descontada = line[92..97].strip
21
- @valor_titulos_descontada = line[98..114].strip
22
- @num_aviso = line[115..122].strip
23
- @res_cnab3 = line[123..239].strip
9
+ @line = line
10
+ @definition = definition
24
11
  end
25
12
  end
26
13
  end
@@ -1,3 +1,3 @@
1
1
  module Cnab
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -0,0 +1,24 @@
1
+ banco: 0..2
2
+ lote: 3..6
3
+ registro: 7..7
4
+ res_cnab1: 8..16
5
+ tipo_empresa: 17..17
6
+ num_empresa: 18..31
7
+ convenio: 32..51
8
+ agencia: 52..56
9
+ dv_agencia: 57..57
10
+ conta_corrente: 58..69
11
+ dv_conta: 70..70
12
+ dv_conta_agencia: 71..71
13
+ nome_empresa: 72..101
14
+ nome_banco: 102..131
15
+ res_cnab2: 132..141
16
+ cod_retorno: 142..142
17
+ data_geracao_arq: 143..150
18
+ hora_geracao_arq: 151..156
19
+ sequencia: 157..162
20
+ versao: 163..165
21
+ densidade: 166..170
22
+ res_banco: 171..190
23
+ res_empresa: 191..210
24
+ res_cnab3: 211..239
@@ -0,0 +1,23 @@
1
+ banco: 0..2
2
+ lote: 3..6
3
+ registro: 7..7
4
+ tipo_operacao: 8..8
5
+ tipo_servico: 9..10
6
+ res_cnab1: 11..12
7
+ layout_lote: 13..15
8
+ res_cnab2: 16..16
9
+ tipo_empresa: 17..17
10
+ num_empresa: 18..32
11
+ convenio: 33..52
12
+ agencia: 53..57
13
+ dv_agencia: 58..58
14
+ conta_corrente: 59..70
15
+ dv_conta: 71..71
16
+ dv_conta_agencia: 72..72
17
+ nome_empresa: 73..102
18
+ informacao1: 103..142
19
+ informacao2: 143..182
20
+ numero_remessa: 183..190
21
+ data_gravacao: 191..198
22
+ data_credito: 199..206
23
+ res_cnab3: 207..239
@@ -0,0 +1,29 @@
1
+ banco: 0..2
2
+ lote: 3..6
3
+ tipo_registro: 7..7
4
+ num_registro: 8..12
5
+ segmento: 13..13
6
+ res_cnab1: 14..14
7
+ cod_movimentacao: 15..16
8
+ agencia: 17..21
9
+ dv_agencia: 22..22
10
+ conta_corrente: 23..34
11
+ dv_conta: 35..35
12
+ dv_conta_agencia: 36..36
13
+ id_titulo: 37..56
14
+ carteira: 57..57
15
+ doc_cobranca: 58..72
16
+ vencimento: 73..80
17
+ valor_titulo: 81..95
18
+ banco_recebimento: 96..98
19
+ ag_recebimento: 99..103
20
+ dv_ag_recebimento: 104..104
21
+ id_titulo_empresa: 105..129
22
+ cod_moeda: 130..131
23
+ tipo_inscricao: 132..132
24
+ num_inscricao: 133..147
25
+ nome: 148..187
26
+ num_contrato: 188..197
27
+ tarifa: 198..212
28
+ motivo: 213..222
29
+ res_cnab2: 223..239
@@ -0,0 +1,24 @@
1
+ banco: 0..2
2
+ lote: 3..6
3
+ tipo_registro: 7..7
4
+ num_registro: 8..12
5
+ segmento: 13..13
6
+ res_cnab1: 14..14
7
+ cod_movimentacao: 15..16
8
+ acrescimos: 17..31
9
+ valor_desconto: 32..46
10
+ valor_abatimento: 47..61
11
+ valor_iof: 62..76
12
+ valor_pago: 77..91
13
+ valor_liquido: 92..106
14
+ outras_despesas: 107..122
15
+ outros_creditos: 123..136
16
+ data_ocorrencia: 137..144
17
+ data_credito: 145..152
18
+ cod_ocorrencia_sacado: 153..156
19
+ data_ocorrencia_sacado: 157..164
20
+ valor_ocorrencia_sacado: 165..179
21
+ compl_ocorrencia_sacado: 180..209
22
+ banco_compensacao: 210..212
23
+ banco_enviado: 213..232
24
+ res_cnab2: 233..239
@@ -0,0 +1,8 @@
1
+ banco: 0..2
2
+ lote: 3..6
3
+ registro: 7..7
4
+ res_cnab1: 8..16
5
+ qtd_lotes: 17..22
6
+ qtd_registros: 23..28
7
+ qtd_contas: 29..34
8
+ res_cnab2: 35..239
@@ -0,0 +1,15 @@
1
+ banco: 0..2
2
+ lote: 3..6
3
+ registro: 7..7
4
+ res_cnab1: 8..16
5
+ qtd_registros: 17..22
6
+ qtd_titulos_simples: 23..28
7
+ valor_titulos_simples: 29..45
8
+ qtd_titulos_vinculada: 46..51
9
+ valor_titulos_simples: 52..68
10
+ qtd_titulos_caucionada: 69..74
11
+ valor_titulos_caucionada: 75..91
12
+ qtd_titulos_descontada: 92..97
13
+ valor_titulos_descontada: 98..114
14
+ num_aviso: 115..122
15
+ res_cnab3: 123..239
@@ -0,0 +1,6 @@
1
+ 012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
2
+ 012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
3
+ 0123456789012T4567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
4
+ 0123456789012U4567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
5
+ 0123456589012U4567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
6
+ 0123456589012U4567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe Cnab::Definition do
4
+ describe "#initialize" do
5
+ it "should initialize a header_arquivo instance" do
6
+ Cnab::Definition.new('08.7').header_arquivo.should be_an_instance_of(Cnab::Definitions::HeaderArquivo)
7
+ end
8
+
9
+ it "should initialize a header_lote instance" do
10
+ Cnab::Definition.new('08.7').header_lote.should be_an_instance_of(Cnab::Definitions::HeaderLote)
11
+ end
12
+
13
+ it "should initialize a segmento_t instance" do
14
+ Cnab::Definition.new('08.7').segmento_t.should be_an_instance_of(Cnab::Definitions::SegmentoT)
15
+ end
16
+
17
+ it "should initialize a segmento_u instance" do
18
+ Cnab::Definition.new('08.7').segmento_u.should be_an_instance_of(Cnab::Definitions::SegmentoU)
19
+ end
20
+
21
+ it "should initialize a trailer_lote instance" do
22
+ Cnab::Definition.new('08.7').trailer_lote.should be_an_instance_of(Cnab::Definitions::TrailerLote)
23
+ end
24
+
25
+ it "should initialize a trailer_arquivo instance" do
26
+ Cnab::Definition.new('08.7').trailer_arquivo.should be_an_instance_of(Cnab::Definitions::TrailerArquivo)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe Cnab::Definitions::HeaderArquivo do
4
+ let(:object) { Object.new }
5
+
6
+ describe "#initialize" do
7
+ it "should load header_arquivo.yml" do
8
+ Cnab::Definitions::HeaderArquivo.new('08.7').instance_variable_get("@definition").should be_an_instance_of(Hash)
9
+ end
10
+ end
11
+
12
+ describe "#method_missing" do
13
+ it "should return the value of the method as key in the hash" do
14
+ Cnab::Definitions::HeaderArquivo.new('08.7').banco.should == Range.new(0, 2)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe Cnab::Definitions::HeaderLote do
4
+ let(:object) { Object.new }
5
+
6
+ describe "#initialize" do
7
+ it "should load header_lote.yml" do
8
+ Cnab::Definitions::HeaderLote.new('08.7').instance_variable_get("@definition").should be_an_instance_of(Hash)
9
+ end
10
+ end
11
+
12
+ describe "#method_missing" do
13
+ it "should return the value of the method as key in the hash" do
14
+ Cnab::Definitions::HeaderLote.new('08.7').banco.should == Range.new(0, 2)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe Cnab::Definitions::SegmentoT do
4
+ let(:object) { Object.new }
5
+
6
+ describe "#initialize" do
7
+ it "should load segmento_t.yml" do
8
+ Cnab::Definitions::SegmentoT.new('08.7').instance_variable_get("@definition").should be_an_instance_of(Hash)
9
+ end
10
+ end
11
+
12
+ describe "#method_missing" do
13
+ it "should return the value of the method as key in the hash" do
14
+ Cnab::Definitions::SegmentoT.new('08.7').banco.should == Range.new(0, 2)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe Cnab::Definitions::SegmentoU do
4
+ let(:object) { Object.new }
5
+
6
+ describe "#initialize" do
7
+ it "should load segmento_u.yml" do
8
+ Cnab::Definitions::SegmentoU.new('08.7').instance_variable_get("@definition").should be_an_instance_of(Hash)
9
+ end
10
+ end
11
+
12
+ describe "#method_missing" do
13
+ it "should return the value of the method as key in the hash" do
14
+ Cnab::Definitions::SegmentoU.new('08.7').banco.should == Range.new(0, 2)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe Cnab::Definitions::TrailerArquivo do
4
+ let(:object) { Object.new }
5
+
6
+ describe "#initialize" do
7
+ it "should load trailer_arquivo.yml" do
8
+ Cnab::Definitions::TrailerArquivo.new('08.7').instance_variable_get("@definition").should be_an_instance_of(Hash)
9
+ end
10
+ end
11
+
12
+ describe "#method_missing" do
13
+ it "should return the value of the method as key in the hash" do
14
+ Cnab::Definitions::TrailerArquivo.new('08.7').banco.should == Range.new(0, 2)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe Cnab::Definitions::TrailerLote do
4
+ let(:object) { Object.new }
5
+
6
+ describe "#initialize" do
7
+ it "should load trailer_lote.yml" do
8
+ Cnab::Definitions::TrailerLote.new('08.7').instance_variable_get("@definition").should be_an_instance_of(Hash)
9
+ end
10
+ end
11
+
12
+ describe "#method_missing" do
13
+ it "should return the value of the method as key in the hash" do
14
+ Cnab::Definitions::TrailerLote.new('08.7').banco.should == Range.new(0, 2)
15
+ end
16
+ end
17
+ end
@@ -1,16 +1,20 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Cnab::Detalhe::SegmentoT do
4
+ before :each do
5
+ @definition = Cnab::Definitions::SegmentoT.new('08.7')
6
+ end
7
+
4
8
  describe "#initialize" do
5
9
  context "with a non valid line" do
6
10
  it "should raise an error" do
7
- lambda { Cnab::Detalhe::SegmentoT.new("12345") }.should raise_error(Cnab::Exceptions::LineNotParseable)
11
+ lambda { Cnab::Detalhe::SegmentoT.new("12345", @definition) }.should raise_error(Cnab::Exceptions::LineNotParseable)
8
12
  end
9
13
  end
10
14
 
11
15
  context "with a valid line" do
12
16
  before :each do
13
- @segmento_t = Cnab::Detalhe::SegmentoT.new(LINE)
17
+ @segmento_t = Cnab::Detalhe::SegmentoT.new(LINE, @definition)
14
18
  end
15
19
 
16
20
  it "should set #banco" do
@@ -1,8 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Cnab::Detalhe::SegmentoTU do
4
- let(:segmento_t) { Cnab::Detalhe::SegmentoT.new(LINE) }
5
- let(:segmento_u) { Cnab::Detalhe::SegmentoU.new(LINE) }
4
+ let(:definition_t) { Cnab::Definitions::SegmentoT.new('08.7') }
5
+ let(:definition_u) { Cnab::Definitions::SegmentoU.new('08.7') }
6
+ let(:segmento_t) { Cnab::Detalhe::SegmentoT.new(LINE, definition_t) }
7
+ let(:segmento_u) { Cnab::Detalhe::SegmentoU.new(LINE, definition_u) }
6
8
 
7
9
  describe "#method_missing" do
8
10
  before :each do
@@ -1,16 +1,20 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Cnab::Detalhe::SegmentoU do
4
+ before :each do
5
+ @definition = Cnab::Definitions::SegmentoU.new('08.7')
6
+ end
7
+
4
8
  describe "#initialize" do
5
9
  context "with a non valid line" do
6
10
  it "should raise an error" do
7
- lambda { Cnab::Detalhe::SegmentoU.new("12345") }.should raise_error(Cnab::Exceptions::LineNotParseable)
11
+ lambda { Cnab::Detalhe::SegmentoU.new("12345", @definition) }.should raise_error(Cnab::Exceptions::LineNotParseable)
8
12
  end
9
13
  end
10
14
 
11
15
  context "with a valid line" do
12
16
  before :each do
13
- @segmento_u = Cnab::Detalhe::SegmentoU.new(LINE)
17
+ @segmento_u = Cnab::Detalhe::SegmentoU.new(LINE, @definition)
14
18
  end
15
19
 
16
20
  it "should set #banco" do
@@ -1,6 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Cnab::Detalhe do
4
+ let(:definition) { Cnab::Definition.new('08.7') }
5
+
4
6
  describe "#parse" do
5
7
  context "with a line of segmento U" do
6
8
  before :each do
@@ -9,7 +11,7 @@ describe Cnab::Detalhe do
9
11
  end
10
12
 
11
13
  it "should return a instance of SegmentoU" do
12
- Cnab::Detalhe.parse(@line).should be_an_instance_of(Cnab::Detalhe::SegmentoU)
14
+ Cnab::Detalhe.parse(@line, definition).should be_an_instance_of(Cnab::Detalhe::SegmentoU)
13
15
  end
14
16
  end
15
17
 
@@ -20,25 +22,25 @@ describe Cnab::Detalhe do
20
22
  end
21
23
 
22
24
  it "should return a instance of SegmentoT" do
23
- Cnab::Detalhe.parse(@line).should be_an_instance_of(Cnab::Detalhe::SegmentoT)
25
+ Cnab::Detalhe.parse(@line, definition).should be_an_instance_of(Cnab::Detalhe::SegmentoT)
24
26
  end
25
27
  end
26
28
 
27
29
  context "with a line of any other segmento" do
28
30
  it "should raise an error" do
29
- lambda { Cnab::Detalhe.parse(LINE) }.should raise_error(Cnab::Exceptions::SegmentNotImplemented)
31
+ lambda { Cnab::Detalhe.parse(LINE, definition) }.should raise_error(Cnab::Exceptions::SegmentNotImplemented)
30
32
  end
31
33
  end
32
34
  end
33
35
 
34
36
  describe "#merge" do
35
37
  before :each do
36
- Cnab::Detalhe.stub(:parse).with("line1").and_return(Cnab::Detalhe::SegmentoT.new(LINE))
37
- Cnab::Detalhe.stub(:parse).with("line2").and_return(Cnab::Detalhe::SegmentoU.new(LINE))
38
+ @line = LINE.clone
39
+ @line[13] = "T"
38
40
  end
39
41
 
40
42
  it "should return a Cnab::Detalhe::SegmentoTU instance" do
41
- Cnab::Detalhe.merge("line1", "line2").should be_an_instance_of(Cnab::Detalhe::SegmentoTU)
43
+ Cnab::Detalhe.merge(@line, @line, definition).should be_an_instance_of(Cnab::Detalhe::SegmentoTU)
42
44
  end
43
45
  end
44
46
  end
@@ -1,16 +1,20 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Cnab::HeaderArquivo do
4
+ before :each do
5
+ @definition = Cnab::Definitions::HeaderArquivo.new('08.7')
6
+ end
7
+
4
8
  context "with a non valid line" do
5
9
  it "should raise an error" do
6
- lambda { Cnab::HeaderArquivo.new("12345") }.should raise_error(Cnab::Exceptions::LineNotParseable)
10
+ lambda { Cnab::HeaderArquivo.new("12345", @definition) }.should raise_error(Cnab::Exceptions::LineNotParseable)
7
11
  end
8
12
  end
9
13
 
10
14
  context "with a valid line" do
11
15
  describe "#initialize" do
12
16
  before :each do
13
- @header_arquivo = Cnab::HeaderArquivo.new(LINE)
17
+ @header_arquivo = Cnab::HeaderArquivo.new(LINE, @definition)
14
18
  end
15
19
 
16
20
  it "should set #banco" do
@@ -1,16 +1,20 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Cnab::HeaderLote::Cobranca do
4
+ before :each do
5
+ @definition = Cnab::Definitions::HeaderLote.new('08.7')
6
+ end
7
+
4
8
  describe "#initialize" do
5
9
  context "with a non valid line" do
6
10
  it "should raise an error" do
7
- lambda { Cnab::HeaderLote::Cobranca.new("12345") }.should raise_error(Cnab::Exceptions::LineNotParseable)
11
+ lambda { Cnab::HeaderLote::Cobranca.new("12345", @definition) }.should raise_error(Cnab::Exceptions::LineNotParseable)
8
12
  end
9
13
  end
10
14
 
11
15
  context "with a valid line" do
12
16
  before :each do
13
- @cobranca = Cnab::HeaderLote::Cobranca.new(LINE)
17
+ @cobranca = Cnab::HeaderLote::Cobranca.new(LINE, @definition)
14
18
  end
15
19
 
16
20
  it "should set #banco" do
@@ -1,16 +1,20 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Cnab::TrailerArquivo do
4
+ before :each do
5
+ @definition = Cnab::Definitions::TrailerArquivo.new('08.7')
6
+ end
7
+
4
8
  describe "#initialize" do
5
9
  context "with a non valid line" do
6
10
  it "should raise an error" do
7
- lambda { Cnab::TrailerArquivo.new("12345") }.should raise_error(Cnab::Exceptions::LineNotParseable)
11
+ lambda { Cnab::TrailerArquivo.new("12345", @definition) }.should raise_error(Cnab::Exceptions::LineNotParseable)
8
12
  end
9
13
  end
10
14
 
11
15
  context "with a valid line" do
12
16
  before :each do
13
- @trailer_arquivo = Cnab::TrailerArquivo.new(LINE)
17
+ @trailer_arquivo = Cnab::TrailerArquivo.new(LINE, @definition)
14
18
  end
15
19
 
16
20
  it "should set #banco" do
@@ -1,9 +1,8 @@
1
1
  require 'spec_helper'
2
- require 'fakefs'
3
2
 
4
3
  describe Cnab do
5
4
  describe "#parse" do
6
- context "withoud file" do
5
+ context "withouth file" do
7
6
  it "should raise an exception" do
8
7
  lambda { Cnab.parse }.should raise_error Cnab::Exceptions::NoFileGiven
9
8
  end
@@ -11,68 +10,38 @@ describe Cnab do
11
10
 
12
11
  context "with a file" do
13
12
  context "and merge equal false" do
14
- before :each do
15
- @line = LINE.clone
16
- @line[13] = "T"
17
-
18
- File.open("cnab.txt", 'w') do |f|
19
- f.write(@line)
20
- f.write(@line)
21
- f.write(@line)
22
- @line[7] = "5"
23
- f.write(@line)
24
- f.write(@line)
25
- end
26
- end
27
-
28
13
  it "should return a Retorno instance" do
29
- Cnab.parse("cnab.txt").should be_an_instance_of(Cnab::Retorno)
14
+ Cnab.parse("spec/cnab.txt").should be_an_instance_of(Cnab::Retorno)
30
15
  end
31
16
 
32
17
  it "should return a HeaderArquivo instance" do
33
- Cnab.parse("cnab.txt").header_arquivo.should be_an_instance_of(Cnab::HeaderArquivo)
18
+ Cnab.parse("spec/cnab.txt").header_arquivo.should be_an_instance_of(Cnab::HeaderArquivo)
34
19
  end
35
20
 
36
21
  it "should return a HeaderLote instance" do
37
- Cnab.parse("cnab.txt").header_lote.should be_an_instance_of(Cnab::HeaderLote::Cobranca)
22
+ Cnab.parse("spec/cnab.txt").header_lote.should be_an_instance_of(Cnab::HeaderLote::Cobranca)
38
23
  end
39
24
 
40
25
  it "should return an array of detalhes" do
41
- Cnab.parse("cnab.txt").detalhes.should be_an_instance_of(Array)
26
+ Cnab.parse("spec/cnab.txt").detalhes.should be_an_instance_of(Array)
42
27
  end
43
28
 
44
29
  it "should return an SegmentoT instance inside detalhes array" do
45
- Cnab.parse("cnab.txt").detalhes.first.should be_an_instance_of(Cnab::Detalhe::SegmentoT)
30
+ Cnab.parse("spec/cnab.txt").detalhes.first.should be_an_instance_of(Cnab::Detalhe::SegmentoT)
46
31
  end
47
32
 
48
33
  it "should return a TrailerLote instance" do
49
- Cnab.parse("cnab.txt").trailer_lote.should be_an_instance_of(Cnab::TrailerLote::Cobranca)
34
+ Cnab.parse("spec/cnab.txt").trailer_lote.should be_an_instance_of(Cnab::TrailerLote::Cobranca)
50
35
  end
51
36
 
52
37
  it "should return a TrailerArquivo instance" do
53
- Cnab.parse("cnab.txt").trailer_arquivo.should be_an_instance_of(Cnab::TrailerArquivo)
38
+ Cnab.parse("spec/cnab.txt").trailer_arquivo.should be_an_instance_of(Cnab::TrailerArquivo)
54
39
  end
55
40
  end
56
41
 
57
42
  context "and merge equal true" do
58
- before :each do
59
- @line = LINE.clone
60
-
61
- File.open("cnab.txt", 'w') do |f|
62
- f.write(@line)
63
- f.write(@line)
64
- @line[13] = "T"
65
- f.write(@line)
66
- @line[13] = "U"
67
- f.write(@line)
68
- @line[7] = "5"
69
- f.write(@line)
70
- f.write(@line)
71
- end
72
- end
73
-
74
43
  it "should return an SegmentoTU instance inside detalhes array" do
75
- Cnab.parse("cnab.txt", true).detalhes.first.should be_an_instance_of(Cnab::Detalhe::SegmentoTU)
44
+ Cnab.parse("spec/cnab.txt", true).detalhes.first.should be_an_instance_of(Cnab::Detalhe::SegmentoTU)
76
45
  end
77
46
  end
78
47
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cnab
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-03-27 00:00:00.000000000 Z
13
+ date: 2013-04-01 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake
@@ -44,22 +44,6 @@ dependencies:
44
44
  - - ! '>='
45
45
  - !ruby/object:Gem::Version
46
46
  version: '0'
47
- - !ruby/object:Gem::Dependency
48
- name: fakefs
49
- requirement: !ruby/object:Gem::Requirement
50
- none: false
51
- requirements:
52
- - - ! '>='
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- type: :development
56
- prerelease: false
57
- version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
- requirements:
60
- - - ! '>='
61
- - !ruby/object:Gem::Version
62
- version: '0'
63
47
  - !ruby/object:Gem::Dependency
64
48
  name: coveralls
65
49
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +78,14 @@ files:
94
78
  - Rakefile
95
79
  - cnab.gemspec
96
80
  - lib/cnab.rb
81
+ - lib/cnab/definition.rb
82
+ - lib/cnab/definitions.rb
83
+ - lib/cnab/definitions/header_arquivo.rb
84
+ - lib/cnab/definitions/header_lote.rb
85
+ - lib/cnab/definitions/segmento_t.rb
86
+ - lib/cnab/definitions/segmento_u.rb
87
+ - lib/cnab/definitions/trailer_arquivo.rb
88
+ - lib/cnab/definitions/trailer_lote.rb
97
89
  - lib/cnab/detalhe.rb
98
90
  - lib/cnab/detalhe/segmento_t.rb
99
91
  - lib/cnab/detalhe/segmento_t_u.rb
@@ -111,6 +103,20 @@ files:
111
103
  - lib/cnab/trailer_lote.rb
112
104
  - lib/cnab/trailer_lote/cobranca.rb
113
105
  - lib/cnab/version.rb
106
+ - lib/cnab/versions/08.7/header_arquivo.yml
107
+ - lib/cnab/versions/08.7/header_lote.yml
108
+ - lib/cnab/versions/08.7/segmento_t.yml
109
+ - lib/cnab/versions/08.7/segmento_u.yml
110
+ - lib/cnab/versions/08.7/trailer_arquivo.yml
111
+ - lib/cnab/versions/08.7/trailer_lote.yml
112
+ - spec/cnab.txt
113
+ - spec/cnab/definition_spec.rb
114
+ - spec/cnab/definitions/header_arquivo_spec.rb
115
+ - spec/cnab/definitions/header_lote_spec.rb
116
+ - spec/cnab/definitions/segmento_t_spec.rb
117
+ - spec/cnab/definitions/segmento_u_spec.rb
118
+ - spec/cnab/definitions/trailer_arquivo_spec.rb
119
+ - spec/cnab/definitions/trailer_lote_spec.rb
114
120
  - spec/cnab/detalhe/segmento_t_spec.rb
115
121
  - spec/cnab/detalhe/segmento_t_u_spec.rb
116
122
  - spec/cnab/detalhe/segmento_u_spec.rb
@@ -135,7 +141,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
135
141
  version: '0'
136
142
  segments:
137
143
  - 0
138
- hash: -1331239976461434073
144
+ hash: 3361106697882866932
139
145
  required_rubygems_version: !ruby/object:Gem::Requirement
140
146
  none: false
141
147
  requirements:
@@ -144,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
144
150
  version: '0'
145
151
  segments:
146
152
  - 0
147
- hash: -1331239976461434073
153
+ hash: 3361106697882866932
148
154
  requirements: []
149
155
  rubyforge_project:
150
156
  rubygems_version: 1.8.25
@@ -152,6 +158,14 @@ signing_key:
152
158
  specification_version: 3
153
159
  summary: It parse CNAB files
154
160
  test_files:
161
+ - spec/cnab.txt
162
+ - spec/cnab/definition_spec.rb
163
+ - spec/cnab/definitions/header_arquivo_spec.rb
164
+ - spec/cnab/definitions/header_lote_spec.rb
165
+ - spec/cnab/definitions/segmento_t_spec.rb
166
+ - spec/cnab/definitions/segmento_u_spec.rb
167
+ - spec/cnab/definitions/trailer_arquivo_spec.rb
168
+ - spec/cnab/definitions/trailer_lote_spec.rb
155
169
  - spec/cnab/detalhe/segmento_t_spec.rb
156
170
  - spec/cnab/detalhe/segmento_t_u_spec.rb
157
171
  - spec/cnab/detalhe/segmento_u_spec.rb