cnab240 0.0.1 → 0.0.2

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