cnab240 0.0.1 → 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.
data/.travis.yml CHANGED
@@ -1,8 +1,4 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 1.8.7
4
- - 1.9.3
5
- - jruby-18mode
6
- - jruby-19mode
7
- - rbx-18mode
8
- - rbx-19mode
4
+ - 1.9.3
@@ -0,0 +1,57 @@
1
+ module Cnab240
2
+ class Lote
3
+ attr_accessor :header
4
+ attr_accessor :segmentos
5
+ attr_accessor :trailer
6
+ attr_accessor :operacao
7
+
8
+ def initialize(op = nil)
9
+ @segmentos = {}
10
+
11
+ unless @operacao = op
12
+ return
13
+ end
14
+
15
+ estrutura = ESTRUTURA[operacao]
16
+
17
+ @header = estrutura[:header].new
18
+ @trailer = estrutura[:trailer].new
19
+
20
+ estrutura[:segmentos].each do |s|
21
+ self << s
22
+ end
23
+ end
24
+
25
+ def <<(s)
26
+ segmentos[s] = eval("Segmento#{s.to_s.upcase}.new")
27
+ add_segmento_accessors(s)
28
+ end
29
+
30
+ def linhas
31
+ seg_array = Array.new
32
+ estrutura = ESTRUTURA[operacao]
33
+ estrutura[:segmentos].each do |s|
34
+ seg_array << @segmentos[s].linha
35
+ end
36
+ seg_array
37
+ end
38
+
39
+ def string
40
+ linhas.join("\n")
41
+ end
42
+
43
+ private
44
+
45
+ def add_segmento_accessors(segmento)
46
+ instance_eval <<-RUBY, __FILE__, __LINE__ + 1
47
+ def segmento_#{segmento.to_s.downcase}
48
+ segmentos[:#{segmento.to_s.downcase}]
49
+ end
50
+ def segmento_#{segmento.to_s.downcase}=(s)
51
+ segmentos[:#{segmento.to_s.downcase}] = s
52
+ end
53
+ RUBY
54
+ end
55
+
56
+ end
57
+ end
@@ -1,6 +1,7 @@
1
1
  module BinData
2
2
  class Record < BinData::Struct
3
3
  def linha # lulz
4
+ self.auto_fill if self.respond_to?(:auto_fill)
4
5
  s = StringIO.new
5
6
  self.write(s)
6
7
  s.string
@@ -37,5 +37,11 @@ module Cnab240::Pagamentos
37
37
  string :indicativo_forma_pagamento, :length => 2
38
38
  string :cnab_g004_2, :length => 6
39
39
  string :ocorrencias, :length => 10
40
+
41
+ private
42
+
43
+ def auto_fill
44
+
45
+ end
40
46
  end
41
47
  end
@@ -1,4 +1,4 @@
1
1
  module Cnab240
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
4
4
 
data/lib/cnab240.rb CHANGED
@@ -6,6 +6,8 @@ require "cnab240/core_ext/attribute_accessors"
6
6
  require "cnab240/core_ext/bindata"
7
7
  require "cnab240/core_ext/default_mixin"
8
8
 
9
+ require "cnab240/arquivo/lote"
10
+
9
11
  require "cnab240/segmentos/segmento_a"
10
12
  require "cnab240/segmentos/segmento_b"
11
13
  require "cnab240/segmentos/segmento_c"
@@ -16,11 +18,18 @@ require "cnab240/arquivo/trailer"
16
18
 
17
19
  require "cnab240/pagamentos/header"
18
20
  require "cnab240/pagamentos/trailer"
19
- require "cnab240/pagamentos/lote"
20
21
 
21
22
 
22
23
  module Cnab240
23
24
 
25
+ ESTRUTURA = {
26
+ :pagamento => {
27
+ :header => Cnab240::Pagamentos::Header,
28
+ :trailer => Cnab240::Pagamentos::Trailer,
29
+ :segmentos => [:a, :b, :c]
30
+ }
31
+ }
32
+
24
33
  mod_attr_accessor :defaults
25
34
  @@defaults = {}
26
35
 
@@ -15,8 +15,8 @@ describe Arquivo do
15
15
  arquivo.should respond_to(:lotes)
16
16
 
17
17
  (1..10).each do |n|
18
- lote = Cnab240::Pagamentos::Lote.new
19
- lote.should be_an_instance_of(Cnab240::Pagamentos::Lote)
18
+ lote = Cnab240::Lote.new(:pagamento)
19
+ lote.should be_an_instance_of(Cnab240::Lote)
20
20
  arquivo.lotes << lote
21
21
  arquivo.lotes.length.should be(n)
22
22
  end
@@ -27,8 +27,8 @@ describe Arquivo do
27
27
  arquivo.should respond_to(:lotes)
28
28
 
29
29
  (1..10).each do |n|
30
- lote = Cnab240::Pagamentos::Lote.new
31
- lote.should be_an_instance_of(Cnab240::Pagamentos::Lote)
30
+ lote = Cnab240::Lote.new(:pagamento)
31
+ lote.should be_an_instance_of(Cnab240::Lote)
32
32
  arquivo.lotes << lote
33
33
  end
34
34
 
@@ -3,9 +3,7 @@ require 'spec_helper'
3
3
  describe Cnab240::Pagamentos::Header do
4
4
 
5
5
  it "deve conter campos header" do
6
- lote = Cnab240::Pagamentos::Lote.new
7
-
8
- header = lote.header
6
+ header = Cnab240::Pagamentos::Header.new
9
7
 
10
8
  header.should respond_to(:controle_banco)
11
9
  header.should respond_to(:controle_lote)
@@ -48,8 +46,8 @@ describe Cnab240::Pagamentos::Header do
48
46
 
49
47
 
50
48
  it "header deve ter 240 caracteres" do
51
- lote = Cnab240::Pagamentos::Lote.new
52
- lote.header.linha.length.should be(240)
49
+ header = Cnab240::Pagamentos::Header.new
50
+ header.linha.length.should be(240)
53
51
  end
54
52
 
55
53
  end
@@ -1,26 +1,34 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Cnab240::Pagamentos::Lote do
3
+ describe Cnab240::Lote do
4
4
 
5
5
  it "deve conter trailer e header" do
6
- lote = Cnab240::Pagamentos::Lote.new
6
+ lote = Cnab240::Lote.new(:pagamento)
7
7
  lote.header.should be_an_instance_of(Cnab240::Pagamentos::Header)
8
8
  lote.trailer.should be_an_instance_of(Cnab240::Pagamentos::Trailer)
9
9
  end
10
10
 
11
11
  it "deve conter segmento a" do
12
- lote = Cnab240::Pagamentos::Lote.new
12
+ lote = Cnab240::Lote.new(:pagamento)
13
13
  lote.segmento_a.should be_an_instance_of(Cnab240::SegmentoA)
14
14
  end
15
15
 
16
16
  it "deve conter segmento b" do
17
- lote = Cnab240::Pagamentos::Lote.new
17
+ lote = Cnab240::Lote.new(:pagamento)
18
18
  lote.segmento_b.should be_an_instance_of(Cnab240::SegmentoB)
19
19
  end
20
20
 
21
21
  it "pode conter segmento c" do
22
- lote = Cnab240::Pagamentos::Lote.new
22
+ lote = Cnab240::Lote.new(:pagamento)
23
23
  lote.should respond_to(:segmento_c)
24
24
  end
25
25
 
26
+ it "linhas devem ter 240" do
27
+ lote = Cnab240::Lote.new(:pagamento)
28
+ lote.linhas.each do |linha|
29
+ linha.length.should be(240)
30
+ end
31
+ end
32
+
33
+
26
34
  end
@@ -3,9 +3,7 @@ require 'spec_helper'
3
3
  describe Cnab240::Pagamentos::Trailer do
4
4
 
5
5
  it "deve conter campos trailer" do
6
- lote = Cnab240::Pagamentos::Lote.new
7
-
8
- trailer = lote.trailer
6
+ trailer = Cnab240::Pagamentos::Trailer.new
9
7
 
10
8
  trailer.should respond_to(:controle_banco)
11
9
  trailer.should respond_to(:controle_lote)
@@ -25,8 +23,8 @@ describe Cnab240::Pagamentos::Trailer do
25
23
  end
26
24
 
27
25
  it "trailer deve ter 240 caracteres" do
28
- lote = Cnab240::Pagamentos::Lote.new
29
- lote.trailer.linha.length.should be(240)
26
+ trailer = Cnab240::Pagamentos::Trailer.new
27
+ trailer.linha.length.should be(240)
30
28
  end
31
29
 
32
30
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cnab240
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -61,12 +61,12 @@ files:
61
61
  - lib/cnab240.rb
62
62
  - lib/cnab240/arquivo/arquivo.rb
63
63
  - lib/cnab240/arquivo/header.rb
64
+ - lib/cnab240/arquivo/lote.rb
64
65
  - lib/cnab240/arquivo/trailer.rb
65
66
  - lib/cnab240/core_ext/attribute_accessors.rb
66
67
  - lib/cnab240/core_ext/bindata.rb
67
68
  - lib/cnab240/core_ext/default_mixin.rb
68
69
  - lib/cnab240/pagamentos/header.rb
69
- - lib/cnab240/pagamentos/lote.rb
70
70
  - lib/cnab240/pagamentos/trailer.rb
71
71
  - lib/cnab240/segmentos/segmento_a.rb
72
72
  - lib/cnab240/segmentos/segmento_b.rb
@@ -97,7 +97,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
97
97
  version: '0'
98
98
  segments:
99
99
  - 0
100
- hash: -3092847186393092884
100
+ hash: -2630031989102335816
101
101
  required_rubygems_version: !ruby/object:Gem::Requirement
102
102
  none: false
103
103
  requirements:
@@ -106,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
106
  version: '0'
107
107
  segments:
108
108
  - 0
109
- hash: -3092847186393092884
109
+ hash: -2630031989102335816
110
110
  requirements: []
111
111
  rubyforge_project: cnab240
112
112
  rubygems_version: 1.8.24
@@ -1,25 +0,0 @@
1
- module Cnab240::Pagamentos
2
- class Lote
3
- attr_accessor :header
4
- attr_accessor :segmento_a
5
- attr_accessor :segmento_b
6
- attr_accessor :segmento_c
7
- attr_accessor :trailer
8
-
9
- def initialize
10
- @header = Header.new
11
- @segmento_a = SegmentoA.new
12
- @segmento_b = SegmentoB.new
13
- @trailer = Trailer.new
14
- end
15
-
16
- def linhas
17
- @segmento_c.nil? ? [@header, @segmento_a, @segmento_b, @trailer] : [@header, @segmento_a, @segmento_b, @segmento_c, @trailer]
18
- end
19
-
20
- def string
21
- linhas.join("\n")
22
- end
23
-
24
- end
25
- end