cnab150 1.1.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a4031bb0e08749ff15d5fa2bb5cc5dbd3c19ade1
4
- data.tar.gz: 18c0864d488bb07341d8ffe78123196a36d0a903
3
+ metadata.gz: 0972689330a76ce6424c08cdacabf44b2b0c0e5e
4
+ data.tar.gz: bd3b712996e0dce6bffdf32d857a57dbc19eed80
5
5
  SHA512:
6
- metadata.gz: 2c00ea7b91dc235c45c894208ed4e8d4f8a13cb48f2038cd45f55f35c15dc9ae436ed0257779b5c58076d65b3d9dc974f0b1db23d7df44335c3545eb7420a8e9
7
- data.tar.gz: 33fe44caa56db463a4dfd5e84a4e0c20e3b8c44a3dfff53619140d85c71aeaf567b6d9ffd456427d501ead7877a15175b7358cbfaac0798ef666eebfd80959a5
6
+ metadata.gz: 32d33ed99e126b56c4d245a5e74c28f1da9e77fb2af249601ed8a4a8bf3d26b01a80c5471e278e1ffa66ca2949709b6b486a5340202828501f70203ce808f362
7
+ data.tar.gz: 975fcdadcc6d1fcbddf99715f33cd4c2250018167d3e2c4446443b8b4dc038c90115eed4e8f33fa0ea38325512ecdfebaa925e522d2d032634297fa0ecb31408
@@ -0,0 +1,12 @@
1
+ # Change Log
2
+ All notable changes to this project will be documented in this file.
3
+ This project adheres to [Semantic Versioning](http://semver.org/).
4
+
5
+ ## [Unreleased]
6
+
7
+ ## [1.3.0] - 2016-01-12
8
+ ### ADDED
9
+ - Option to overried the default layouts
10
+
11
+ ### CHANGED
12
+ - Layouts are now yaml file
data/README.md CHANGED
@@ -27,33 +27,109 @@ Or install it yourself as:
27
27
  $ gem install cnab150
28
28
 
29
29
  ## Usage
30
+
31
+ * The examples are using these registries
32
+
30
33
  ```
31
- > registries = ['A20000111111111 PREF MUN XXXXXX-XYZ 341BANCO ITAU S.A. 2015101600131203 ',
32
- > 'G982300210019 20151015201510168166000000005092477201510160000000000000007500000000050900000803120000701594 2 ',
33
- > 'G982300210019 20151015201510168169000000023012477201510310201200230228200100000000230100000803120001183477 2 ',
34
- > 'Z00000400000000001533612 ']
34
+ string_cnab150 = ['A20000111111111 PREF MUN XXXXXX-XYZ 341BANCO ITAU S.A. 2015101600131203 ',
35
+ 'G982300210019 20151015201510168166000000005092477201510160000000000000007500000000050900000803120000701594 2 ',
36
+ 'G982300210019 20151015201510168169000000023012477201510310201200230228200100000000230100000803120001183477 2 ',
37
+ 'Z00000400000000001533612 ']
35
38
 
36
- > cnabs = Cnab150.parse_registries(registries)
39
+ ```
37
40
 
38
- > h = Cnab150.header(cnabs)
41
+ * The parser_registries method needs an array os strings, it'll return an array of Cnab150::Registry
42
+ ```
43
+ > registries = Cnab150.parse_registries(string_cnab150)
44
+ => [ Cnab150::Registry, Cnab150::Registry, Cnab150::Registry, Cnab150::Registry ]
45
+ ```
39
46
 
40
- > h.to_hash
41
- => {registry_code: 'A', registry_type: '2', agreement: '0000111111111', organization: 'PREF MUN XXXXXX-XYZ', bank_code: '341', bank_name: 'BANCO ITAU S.A.', file_date: '20151016', file_number: '001312', version: '03', service: '', filler: ''}
47
+ * To select a kind of registry, call the select method with the type and an array os strings
48
+ ```
49
+ > g_registries = Cnab150.select(:g, string_cnab150)
50
+ => [
51
+ { registry_code: 'G',
52
+ account: '982300210019',
53
+ payment_date: '20151015',
54
+ credit_date: '20151016',
55
+ barcode: '81660000000050924772015101600000000000000075',
56
+ value: '000000000509',
57
+ service_value: '0000080',
58
+ registry_number: '31200007',
59
+ agency: '0159',
60
+ channel: '4',
61
+ authentication: ' 2',
62
+ payment_type: '',
63
+ filler: '' },
64
+ { registry_code: 'G',
65
+ account: '982300210019',
66
+ payment_date: '20151015',
67
+ credit_date: '20151016',
68
+ barcode: '81690000000230124772015103102012002302282001',
69
+ value: '000000002301',
70
+ service_value: '0000080',
71
+ registry_number: '31200011',
72
+ agency: '8347',
73
+ channel: '7',
74
+ authentication: ' 2',
75
+ payment_type: '',
76
+ filler: '' },
77
+ ]
78
+ ```
79
+
80
+ * There is methods to select just the Header, Trailer and Details registries This method will return a Cnab150::Registry. The detail method return any other registries diferent from Header and Trailer
81
+
82
+ ```
83
+ > h = Cnab150.header(registries)
42
84
 
43
85
  > h.registry_code
44
86
  => 'A'
45
87
 
46
88
  > h.registry_type
47
89
  => '2'
90
+ ```
91
+
92
+
93
+ * To change the keys to hash
94
+ ```
95
+ > h = Cnab150.header(registries)
96
+ > h.to_hash
97
+ => {:registry_code=>"A",
98
+ :registry_type=>"2",
99
+ :agreement=>"0000111111111",
100
+ :organization=>"PREF MUN XXXXXX-XYZ",
101
+ :bank_code=>"341",
102
+ :bank_name=>"BANCO ITAU S.A.",
103
+ :file_date=>"20151016",
104
+ :file_number=>"001312",
105
+ :version=>"03",
106
+ :service=>"",
107
+ :filler=>""}
108
+ ```
48
109
 
49
- > cnabs.to_hash
50
- #=> [
51
- # { registry_code: 'A', registry_type: '2', agreement: '0000111111111', organization: 'PREF MUN XXXXXX-XYZ', bank_code: '341', bank_name: 'BANCO ITAU S.A.', file_date: '20151016', file_number: '001312', version: '03', service: '', filler: '' },
52
- # { registry_code: 'G', account: '982300210019', payment_date: '20151015', credit_date: '20151016', barcode: '81660000000050924772015101600000000000000075', value: '000000000509', service_value: '0000080', registry_number: '31200007', agency: '0159', channel: '4', authentication: ' 2', payment_type: '', filler: '' },
53
- # { registry_code: 'G', account: '982300210019', payment_date: '20151015', credit_date: '20151016', barcode: '81690000000230124772015103102012002302282001', value: '000000002301', service_value: '0000080', registry_number: '31200011', agency: '8347', channel: '7', authentication: ' 2', payment_type: '', filler: '' },
54
- # { registry_code: 'Z', rows: '000004', total: '00000000001533612', filler: ' ' }
55
- # ]
110
+ * To create a new layout add a YML file with the column names and positions
56
111
 
112
+ ```
113
+ cnab150:
114
+ a:
115
+ registry_code: 1
116
+ registry_type: 1
117
+ agreement: 20
118
+ organization: 20
119
+ bank_code: 3
120
+ bank_name: 20
121
+ file_date: 8
122
+ file_number: 6
123
+ version: 2
124
+ service: 17
125
+ filler: 52
126
+ ```
127
+ And override the default layout by setting the layout_path_file in the configure
128
+
129
+ ```
130
+ Cnab150.configure do |config|
131
+ config.layout_file_path = 'absolute/path/to/your/layout.yml'
132
+ end
57
133
  ```
58
134
 
59
135
  ## Development
@@ -9,8 +9,8 @@ Gem::Specification.new do |s|
9
9
  s.authors = ['Marco Moura']
10
10
  s.email = ['marco.moura@gmail.com']
11
11
 
12
- s.summary = 'Return File CNAB 150.'
13
- s.description = 'Return File CNAB 150.'
12
+ s.summary = 'Parser to Return File CNAB 150.'
13
+ s.description = 'Parser to Return File CNAB 150.'
14
14
  s.homepage = 'https://github.com/marcomoura/cnab150'
15
15
 
16
16
  s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(spec)/}) }
@@ -0,0 +1,32 @@
1
+ cnab150:
2
+ a:
3
+ registry_code: 1
4
+ registry_type: 1
5
+ agreement: 20
6
+ organization: 20
7
+ bank_code: 3
8
+ bank_name: 20
9
+ file_date: 8
10
+ file_number: 6
11
+ version: 2
12
+ service: 17
13
+ filler: 52
14
+ g:
15
+ registry_code: 1
16
+ account: 20
17
+ payment_date: 8
18
+ credit_date: 8
19
+ barcode: 44
20
+ value: 12
21
+ service_value: 7
22
+ registry_number: 8
23
+ agency: 4
24
+ channel: 1
25
+ authentication: 26
26
+ payment_type: 5
27
+ filler: 1
28
+ z:
29
+ registry_code: 1
30
+ rows: 6
31
+ total: 17
32
+ filler: 126
@@ -1,44 +1,47 @@
1
- require 'cnab150/version'
1
+ require 'cnab150/configuration'
2
2
  require 'cnab150/registry'
3
3
  require 'cnab150/parser'
4
4
  require 'cnab150/layout'
5
5
  require 'cnab150/errors'
6
+ require 'cnab150/version'
6
7
 
7
8
  # The public interface of gem
8
9
  module Cnab150
9
- def self.parse_registries(registries)
10
- registries.each_with_object([]) do |r, a|
11
- a << parse_registry(r)
10
+ class << self
11
+ def parse_registries(registries)
12
+ registries.each_with_object([]) do |r, a|
13
+ a << parse_registry(r)
14
+ end
12
15
  end
13
- end
14
16
 
15
- def self.parse_registry(registry)
16
- type = Cnab150::Layout.build(registry.chars.first)
17
- Cnab150::Registry.new(registry, type)
18
- end
17
+ def parse_registry(registry)
18
+ type = Cnab150::Layout.build(registry.chars.first)
19
+ Cnab150::Registry.new(registry, type)
20
+ end
19
21
 
20
- def self.header(registries)
21
- find(registries, 'A')
22
- end
22
+ def header(registries)
23
+ find(registries, 'A')
24
+ end
23
25
 
24
- def self.trailer(registries)
25
- find(registries, 'Z')
26
- end
26
+ def trailer(registries)
27
+ find(registries, 'Z')
28
+ end
27
29
 
28
- def self.details(registries)
29
- registries.select do |r|
30
- !(r.registry_code.eql?('A') || r.registry_code.eql?('Z'))
30
+ def details(registries)
31
+ registries.select do |r|
32
+ !(r.registry_code.eql?('A') || r.registry_code.eql?('Z'))
33
+ end
31
34
  end
32
- end
33
35
 
34
- def self.select(type, raw)
35
- registries = parse_registries(raw)
36
- registries.select do |r|
37
- r.registry_code.eql?(type.to_s.upcase)
36
+ def select(type, raw)
37
+ registries = parse_registries(raw)
38
+ registries.select do |r|
39
+ r.registry_code.eql?(type.to_s.upcase)
40
+ end
38
41
  end
39
- end
40
42
 
41
- def self.find(registries, type)
42
- registries.find { |r| r.registry_code.eql?(type) }
43
+ def find(registries, type)
44
+ registries.find { |r| r.registry_code.eql?(type) }
45
+ end
43
46
  end
44
47
  end
@@ -0,0 +1,29 @@
1
+ module Cnab150 #:nodoc:
2
+ class << self
3
+ # Configures global settings
4
+ # Cnab150.configure do |config|
5
+ # config.default_per_page = 10
6
+ # end
7
+ def configure
8
+ yield(@config)
9
+ end
10
+
11
+ # Global settings
12
+ def config
13
+ @config ||= Cnab150::Configuration.new
14
+ end
15
+ end
16
+
17
+ class Configuration #:nodoc:
18
+ attr_accessor :layout_file_path
19
+
20
+ def initialize
21
+ @layout_file_path = "#{File.dirname(__dir__)}/../config/layout.yml"
22
+ end
23
+
24
+ # The layouts method load the layouts from the yml file.
25
+ def layouts
26
+ @_ ||= YAML.load_file(@layout_file_path)['cnab150']
27
+ end
28
+ end
29
+ end
@@ -1,12 +1,25 @@
1
- Dir[File.dirname(__FILE__) + '/layout/*.rb'].each { |file| require file }
1
+ require 'yaml'
2
2
 
3
3
  module Cnab150
4
4
  # The Layout module is responsible of build the appropriate layout.
5
- module Layout
5
+ class Layout
6
6
  def self.build(type)
7
- Cnab150::Layout.const_get(type.upcase).new
8
- rescue NameError
9
- raise Cnab150::Errors::LayoutNotImplementedError
7
+ fail Cnab150::Errors::LayoutNotImplementedError unless
8
+ Cnab150.config.layouts.include?(type.downcase)
9
+
10
+ new Cnab150.config.layouts[type.downcase]
11
+ end
12
+
13
+ def initialize(layout)
14
+ @layout = layout
15
+ end
16
+
17
+ def keys
18
+ @layout.keys.map(&:to_sym)
19
+ end
20
+
21
+ def layout
22
+ 'A' + @layout.values.join('A')
10
23
  end
11
24
  end
12
25
  end
@@ -1,4 +1,4 @@
1
1
  # The version of gem
2
2
  module Cnab150
3
- VERSION = '1.1.0'
3
+ VERSION = '1.3.0'
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cnab150
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marco Moura
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-11-07 00:00:00.000000000 Z
11
+ date: 2016-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,7 +52,7 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- description: Return File CNAB 150.
55
+ description: Parser to Return File CNAB 150.
56
56
  email:
57
57
  - marco.moura@gmail.com
58
58
  executables: []
@@ -62,18 +62,18 @@ files:
62
62
  - ".coveralls.yml"
63
63
  - ".gitignore"
64
64
  - ".travis.yml"
65
+ - CHANGELOG.md
65
66
  - Gemfile
66
67
  - README.md
67
68
  - Rakefile
68
69
  - bin/console
69
70
  - bin/setup
70
71
  - cnab150.gemspec
72
+ - config/layout.yml
71
73
  - lib/cnab150.rb
74
+ - lib/cnab150/configuration.rb
72
75
  - lib/cnab150/errors.rb
73
76
  - lib/cnab150/layout.rb
74
- - lib/cnab150/layout/a.rb
75
- - lib/cnab150/layout/g.rb
76
- - lib/cnab150/layout/z.rb
77
77
  - lib/cnab150/parser.rb
78
78
  - lib/cnab150/registry.rb
79
79
  - lib/cnab150/version.rb
@@ -99,5 +99,5 @@ rubyforge_project:
99
99
  rubygems_version: 2.4.5.1
100
100
  signing_key:
101
101
  specification_version: 4
102
- summary: Return File CNAB 150.
102
+ summary: Parser to Return File CNAB 150.
103
103
  test_files: []
@@ -1,18 +0,0 @@
1
- module Cnab150
2
- module Layout
3
- # Layout of Register A
4
- # This is a HEADER registry type
5
- class A
6
- def keys
7
- [:registry_code, :registry_type, :agreement,
8
- :organization, :bank_code, :bank_name,
9
- :file_date, :file_number, :version,
10
- :service, :filler]
11
- end
12
-
13
- def layout
14
- 'A' + [1, 1, 20, 20, 3, 20, 8, 6, 2, 17, 52].join('A')
15
- end
16
- end
17
- end
18
- end
@@ -1,18 +0,0 @@
1
- module Cnab150
2
- module Layout
3
- # Layout of Register G
4
- # Return of collections identified by barcode
5
- class G
6
- def keys
7
- [:registry_code, :account, :payment_date, :credit_date,
8
- :barcode, :value, :service_value, :registry_number,
9
- :agency, :channel, :authentication, :payment_type,
10
- :filler]
11
- end
12
-
13
- def layout
14
- 'A' + [1, 20, 8, 8, 44, 12, 7, 8, 4, 1, 26, 5, 1].join('A')
15
- end
16
- end
17
- end
18
- end
@@ -1,15 +0,0 @@
1
- module Cnab150
2
- module Layout
3
- # Layout of Register Z
4
- # This is a TRAILER registry
5
- class Z
6
- def keys
7
- [:registry_code, :rows, :total, :filler]
8
- end
9
-
10
- def layout
11
- 'A' + [1, 6, 17, 126].join('A')
12
- end
13
- end
14
- end
15
- end