norma43_parser 1.0.1 → 3.0.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 (50) hide show
  1. checksums.yaml +5 -5
  2. data/.github/ISSUE_TEMPLATE.md +13 -0
  3. data/.github/PULL_REQUEST_TEMPLATE.md +5 -0
  4. data/.github/workflows/ci.yml +22 -0
  5. data/.rubocop.yml +234 -0
  6. data/CHANGELOG.md +43 -0
  7. data/Gemfile +7 -1
  8. data/Gemfile.lock +72 -0
  9. data/README.md +6 -4
  10. data/Rakefile +2 -0
  11. data/lib/norma43/line_handlers.rb +2 -3
  12. data/lib/norma43/line_parsers/account_end.rb +18 -0
  13. data/lib/norma43/line_parsers/account_start.rb +18 -0
  14. data/lib/norma43/line_parsers/additional_currency.rb +12 -0
  15. data/lib/norma43/line_parsers/additional_item.rb +11 -0
  16. data/lib/norma43/line_parsers/document_end.rb +9 -0
  17. data/lib/norma43/line_parsers/document_start.rb +13 -0
  18. data/lib/norma43/line_parsers/file_format_validator.rb +15 -12
  19. data/lib/norma43/line_parsers/line_parser.rb +29 -28
  20. data/lib/norma43/line_parsers/transaction.rb +18 -0
  21. data/lib/norma43/line_processors.rb +2 -2
  22. data/lib/norma43/models.rb +5 -4
  23. data/lib/norma43/parser.rb +38 -42
  24. data/lib/norma43/utils/contexts.rb +40 -37
  25. data/lib/norma43/utils/string_helpers.rb +10 -6
  26. data/lib/norma43/utils/typecaster.rb +16 -12
  27. data/lib/norma43/version.rb +3 -1
  28. data/lib/norma43.rb +9 -3
  29. data/norma43_parser.gemspec +10 -10
  30. data/spec/example1_parse_spec.rb +12 -11
  31. data/spec/norma43/line_parsers/account_end_spec.rb +1 -1
  32. data/spec/norma43/line_parsers/account_start_spec.rb +1 -2
  33. data/spec/norma43/line_parsers/additional_currency_spec.rb +1 -1
  34. data/spec/norma43/line_parsers/additional_items_spec.rb +1 -1
  35. data/spec/norma43/line_parsers/document_end_spec.rb +1 -2
  36. data/spec/norma43/line_parsers/document_start_spec.rb +1 -1
  37. data/spec/norma43/line_parsers/transaction_spec.rb +1 -3
  38. data/spec/norma43/line_processors/account_end_spec.rb +6 -8
  39. data/spec/norma43/line_processors/account_start_spec.rb +8 -9
  40. data/spec/norma43/line_processors/additional_currency_spec.rb +6 -7
  41. data/spec/norma43/line_processors/additional_items_spec.rb +6 -7
  42. data/spec/norma43/line_processors/document_end_spec.rb +5 -6
  43. data/spec/norma43/line_processors/document_start_spec.rb +3 -4
  44. data/spec/norma43/line_processors/transaction_spec.rb +6 -7
  45. data/spec/norma43/parser_spec.rb +5 -4
  46. data/spec/norma43_spec.rb +2 -0
  47. data/spec/spec_helper.rb +1 -4
  48. data/spec/support/shared_examples_for_values_line_parsers.rb +2 -0
  49. metadata +41 -44
  50. data/lib/norma43/line_parsers/line_parsers.rb +0 -69
@@ -1,5 +1,4 @@
1
- require "norma43/utils/contexts"
2
- require "norma43/line_processors"
1
+ # frozen_string_literal: true
3
2
 
4
3
  module Norma43
5
4
  module LineProcessors
@@ -10,8 +9,8 @@ module Norma43
10
9
  let(:line) { double "Line", record_number: 35 }
11
10
 
12
11
  it "moves to the nearest document context" do
13
- document = Models::Document.new
14
- contexts = Contexts.new [Thing.new, document, Thing.new, Thing.new]
12
+ document = Norma43::Models::Document.new
13
+ contexts = Norma43::Utils::Contexts.new [Thing.new, document, Thing.new, Thing.new]
15
14
 
16
15
  DocumentEnd.call line, contexts
17
16
 
@@ -19,9 +18,9 @@ module Norma43
19
18
  end
20
19
 
21
20
  it "sets the number of lines on the document" do
22
- document = Models::Document.new
21
+ document = Norma43::Models::Document.new
23
22
 
24
- DocumentEnd.call line, Contexts.new(document)
23
+ DocumentEnd.call line, Norma43::Utils::Contexts.new(document)
25
24
 
26
25
  expect(document.number_of_lines).to eq 35
27
26
  end
@@ -1,5 +1,4 @@
1
- require "norma43/utils/contexts"
2
- require "norma43/line_processors"
1
+ # frozen_string_literal: true
3
2
 
4
3
  module Norma43
5
4
  module LineProcessors
@@ -9,7 +8,7 @@ module Norma43
9
8
  it "instantiates a new document with the line attributes" do
10
9
  allow(Models::Document).to receive :new
11
10
 
12
- DocumentStart.call line, Contexts.new
11
+ DocumentStart.call line, Norma43::Utils::Contexts.new
13
12
 
14
13
  expect(Models::Document).to have_received(:new).with line.attributes
15
14
  end
@@ -18,7 +17,7 @@ module Norma43
18
17
  fake_document = double "Models::Document"
19
18
  allow(Models::Document).to receive(:new) { fake_document }
20
19
 
21
- contexts = DocumentStart.call line, Contexts.new
20
+ contexts = DocumentStart.call line, Norma43::Utils::Contexts.new
22
21
 
23
22
  expect(contexts.current).to be fake_document
24
23
  end
@@ -1,16 +1,15 @@
1
- require "norma43/utils/contexts"
2
- require "norma43/line_processors"
1
+ # frozen_string_literal: true
3
2
 
4
3
  module Norma43
5
4
  module LineProcessors
6
5
  RSpec.describe "Transaction" do
7
- let(:line){ double "Line", attributes: {} }
8
- let(:account){ Models::Account.new }
9
- let(:contexts){ Contexts.new(
6
+ let(:line) { double "Line", attributes: {} }
7
+ let(:account) { Norma43::Models::Account.new }
8
+ let(:contexts) { Norma43::Utils::Contexts.new(
10
9
  [
11
- Models::Document.new ,
10
+ Norma43::Models::Document.new,
12
11
  account,
13
- Models::Transaction.new
12
+ Norma43::Models::Transaction.new
14
13
  ])
15
14
  }
16
15
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "norma43/parser"
2
4
 
3
5
  module Norma43
@@ -5,18 +7,17 @@ module Norma43
5
7
  describe "ensuring the file is valid" do
6
8
  it "accepts a valid file starting with document" do
7
9
  valid_file = "00TI222222 2011102504133012345601TL1Norma43 "
8
- expect{ Parser.new(valid_file) }.to_not raise_error
10
+ expect { Parser.new(valid_file) }.to_not raise_error
9
11
  end
10
12
 
11
13
  it "accepts a valid file starting with an account" do
12
-
13
14
  valid_file = "119999111101234567890408040409052000000001234569783MY ACCOUNT "
14
- expect{ Parser.new(valid_file) }.to_not raise_error
15
+ expect { Parser.new(valid_file) }.to_not raise_error
15
16
  end
16
17
 
17
18
  it "should start with 00 or 11" do
18
19
  invalid_file = "99TI222222 2011102504133012345601TL1Norma43 "
19
- expect{ Parser.new(invalid_file) }.to raise_error{ Norma43::InvalidFileFormatError }
20
+ expect { Parser.new(invalid_file) }.to raise_error { Norma43::InvalidFileFormatError }
20
21
  end
21
22
  end
22
23
  end
data/spec/norma43_spec.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "norma43"
2
4
 
3
5
  RSpec.describe Norma43 do
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,4 @@
1
- if ENV["CI"]
2
- require "codeclimate-test-reporter"
3
- CodeClimate::TestReporter.start
4
- end
1
+ # frozen_string_literal: true
5
2
 
6
3
  RSpec.configure do |config|
7
4
  config.order = :random
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RSpec.shared_examples "a values line parser" do
2
4
  describe "#values" do
3
5
  it "finds first value" do
metadata CHANGED
@@ -1,93 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: norma43_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sequra engineering
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-11 00:00:00.000000000 Z
11
+ date: 2022-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: virtus
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.5'
20
- type: :development
19
+ version: '1.0'
20
+ type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.5'
26
+ version: '1.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
28
+ name: zeitwerk
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
33
+ version: '2.0'
34
+ type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '2.0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: byebug
42
+ name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '13.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '13.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '3.0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: virtus
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :runtime
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
66
+ - - "~>"
81
67
  - !ruby/object:Gem::Version
82
- version: '0'
83
- description:
68
+ version: '3.0'
69
+ description:
84
70
  email:
85
71
  - dev@sequra.es
86
72
  executables: []
87
73
  extensions: []
88
74
  extra_rdoc_files: []
89
75
  files:
76
+ - ".github/ISSUE_TEMPLATE.md"
77
+ - ".github/PULL_REQUEST_TEMPLATE.md"
78
+ - ".github/workflows/ci.yml"
79
+ - ".rubocop.yml"
80
+ - CHANGELOG.md
90
81
  - Gemfile
82
+ - Gemfile.lock
91
83
  - LICENSE
92
84
  - README.md
93
85
  - Rakefile
@@ -95,9 +87,15 @@ files:
95
87
  - doc/cuaderno_43_-_junio_2012.pdf
96
88
  - lib/norma43.rb
97
89
  - lib/norma43/line_handlers.rb
90
+ - lib/norma43/line_parsers/account_end.rb
91
+ - lib/norma43/line_parsers/account_start.rb
92
+ - lib/norma43/line_parsers/additional_currency.rb
93
+ - lib/norma43/line_parsers/additional_item.rb
94
+ - lib/norma43/line_parsers/document_end.rb
95
+ - lib/norma43/line_parsers/document_start.rb
98
96
  - lib/norma43/line_parsers/file_format_validator.rb
99
97
  - lib/norma43/line_parsers/line_parser.rb
100
- - lib/norma43/line_parsers/line_parsers.rb
98
+ - lib/norma43/line_parsers/transaction.rb
101
99
  - lib/norma43/line_processors.rb
102
100
  - lib/norma43/models.rb
103
101
  - lib/norma43/parser.rb
@@ -130,24 +128,23 @@ homepage: https://github.com/sequra/norma43_parser
130
128
  licenses:
131
129
  - MIT
132
130
  metadata: {}
133
- post_install_message:
131
+ post_install_message:
134
132
  rdoc_options: []
135
133
  require_paths:
136
134
  - lib
137
135
  required_ruby_version: !ruby/object:Gem::Requirement
138
136
  requirements:
139
- - - "~>"
137
+ - - ">="
140
138
  - !ruby/object:Gem::Version
141
- version: '2.0'
139
+ version: '2.6'
142
140
  required_rubygems_version: !ruby/object:Gem::Requirement
143
141
  requirements:
144
142
  - - ">="
145
143
  - !ruby/object:Gem::Version
146
144
  version: '0'
147
145
  requirements: []
148
- rubyforge_project:
149
- rubygems_version: 2.4.6
150
- signing_key:
146
+ rubygems_version: 3.2.32
147
+ signing_key:
151
148
  specification_version: 4
152
149
  summary: Parses banks transactions files specified in rule 43
153
150
  test_files:
@@ -1,69 +0,0 @@
1
- require "norma43/line_parsers/line_parser"
2
-
3
- module Norma43
4
- module LineParsers
5
- class DocumentStart < LineParser
6
- field :id, 2..13
7
- field :created_at, 14..33, :time
8
- field :delivery_number, 34..35, :integer
9
- field :file_type, 36..38
10
- field :name, 39..48
11
- end
12
-
13
- class DocumentEnd < LineParser
14
- field :record_number, 20..25, :integer
15
- end
16
-
17
- class AccountStart < LineParser
18
- field :bank_code, 2..5, :integer
19
- field :branch_code, 6..9, :integer
20
- field :account_number, 10..19, :integer
21
- field :start_date, 20..25, :date
22
- field :end_date, 26..31, :date
23
- field :balance_code, 32, :integer
24
- field :balance_amount, 33..46, :integer
25
- field :currency_code, 47..49, :integer
26
- field :information_mode_code, 50, :integer
27
- field :abbreviated_name, 51..76
28
- end
29
-
30
- class AccountEnd < LineParser
31
- field :bank_code, 2..5, :integer
32
- field :branch_code, 6..9, :integer
33
- field :account_number, 10..19, :integer
34
- field :debit_entries, 20..24, :integer
35
- field :debit_amount, 25..38, :integer
36
- field :credit_entries, 39..43, :integer
37
- field :credit_amount, 44..57, :integer
38
- field :balance_code, 58, :integer
39
- field :balance_amount, 59..72, :integer
40
- field :currency_code, 73..75, :integer
41
- end
42
-
43
- class Transaction < LineParser
44
- field :origin_branch_code, 6..9, :integer
45
- field :transaction_date, 10..15, :date
46
- field :value_date, 16..21, :date
47
- field :shared_item, 22..23, :integer
48
- field :own_item, 24..26, :integer
49
- field :amount_code, 27, :integer
50
- field :amount, 28..41, :integer
51
- field :document_number, 42..51, :integer
52
- field :reference_1, 52..63, :integer
53
- field :reference_2, 64..79
54
- end
55
-
56
- class AdditionalItem < LineParser
57
- field :data_code, 2..3, :integer
58
- field :item_1, 4..41
59
- field :item_2, 42..79
60
- end
61
-
62
- class AdditionalCurrency < LineParser
63
- field :data_code, 2..3, :integer
64
- field :currency_code, 4..6, :integer
65
- field :amount, 7..20, :integer
66
- field :free, 21..79
67
- end
68
- end
69
- end