cfonb 1.0.0 → 1.1.1

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
  SHA256:
3
- metadata.gz: f80902862080f864dd6e69edc2f15d1d07d863fef754f47eb70bf052d4628cc2
4
- data.tar.gz: 3258fdf0214ee434a09643ce033cc4fbf56500ad5d3633b3e424ed36f0d0a93d
3
+ metadata.gz: '09ba2c778bfad0f2b60f224bd4e13a67b9cb15d3f02062036c0a9ae7ed407b9e'
4
+ data.tar.gz: 13430b0b63638d05fc0127780b767bc746cdd5caaa65a671d017c4339111e63d
5
5
  SHA512:
6
- metadata.gz: f0b35b9c4d7aa76957195c087e26f9777dad59308fcdb12a02c77da031d86798c726b3dc90e9fb9756c995414d34ce92f7d35638bed80fe10f5ff5c64e332659
7
- data.tar.gz: b55fa730f6659cd878fa46a965a832bc3eb3b26e0fca3182a43af4b04bb4827995d73bfee61c7c1cb39674f01074f31a255ab060caf3fd0b3c0dc05a9c563f46
6
+ metadata.gz: '097f4da9225e785f732dbedcd31e2465c2794a9533dbbaa4dd64d70f11cac80d2e57dbcc9f1346c72d055c351884649ded431b49114b4da4a9156155ac2d2eae'
7
+ data.tar.gz: eb270fd78d5cbbf9c1a05779f876859544687891099ecbf9236e42a7230da8f7b6b2c0ab4831495279e137919adcb8273d9a755b0b68e8d6440c02d5ab846c56
@@ -7,10 +7,23 @@ module CFONB
7
7
  base.singleton_class.prepend(
8
8
  Module.new do
9
9
  def apply(details, line)
10
- details.instance_variable_set(:"@#{line.detail_code}", line.detail)
10
+ code = :"@#{line.detail_code.gsub(' ', '_')}"
11
+ details.instance_variable_set(code, instance_value(details, line, code))
11
12
 
12
13
  super
13
14
  end
15
+
16
+ private
17
+
18
+ def append_detail?(details, line, code)
19
+ details.instance_variable_defined?(code) && line.detail.is_a?(String)
20
+ end
21
+
22
+ def instance_value(details, line, code)
23
+ return line.detail unless append_detail?(details, line, code)
24
+
25
+ details.instance_variable_get(code) + "\n#{line.detail}"
26
+ end
14
27
  end,
15
28
  )
16
29
  end
@@ -7,7 +7,7 @@ module CFONB
7
7
 
8
8
  def self.apply(details, line)
9
9
  details.creditor_identifier = line.detail[0..34].strip
10
- details.creditor_identifier_type = line.detail[35..-1].strip
10
+ details.creditor_identifier_type = line.detail[35..-1]&.strip
11
11
  end
12
12
 
13
13
  CFONB::OperationDetails.register('IBE', self)
@@ -7,7 +7,7 @@ module CFONB
7
7
 
8
8
  def self.apply(details, line)
9
9
  details.debtor_identifier = line.detail[0..34].strip
10
- details.debtor_identifier_type = line.detail[35..-1].strip
10
+ details.debtor_identifier_type = line.detail[35..-1]&.strip
11
11
  end
12
12
 
13
13
  CFONB::OperationDetails.register('IPY', self)
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CFONB
4
+ module OperationDetails
5
+ class Unknown < Base
6
+ ATTRIBUTES = %i[unknown].freeze
7
+
8
+ def self.apply(details, line)
9
+ details.unknown ||= {}
10
+ code = line.detail_code.gsub(' ', '_')
11
+
12
+ details.unknown[code] =
13
+ if details.unknown[code] && line.detail.is_a?(String)
14
+ details.unknown[code] + "\n#{line.detail}"
15
+ else
16
+ line.detail
17
+ end
18
+ end
19
+
20
+ CFONB::OperationDetails.register('Unknown', self)
21
+ end
22
+ end
23
+ end
@@ -15,7 +15,9 @@ module CFONB
15
15
  end
16
16
 
17
17
  def self.for(line)
18
- @details[line.detail_code]
18
+ return unless line.respond_to?(:detail_code) && line.detail_code != ''
19
+
20
+ @details[line.detail_code] || Unknown
19
21
  end
20
22
  end
21
23
  end
data/lib/cfonb.rb CHANGED
@@ -32,6 +32,7 @@ require_relative 'cfonb/operation_details/fee'
32
32
  require_relative 'cfonb/operation_details/ibe'
33
33
  require_relative 'cfonb/operation_details/npo'
34
34
  require_relative 'cfonb/operation_details/nbu'
35
+ require_relative 'cfonb/operation_details/unknown'
35
36
 
36
37
  module CFONB
37
38
  def self.parse(input, optimistic: false)
@@ -272,6 +272,40 @@ describe CFONB::Operation do
272
272
  expect(operation.details.ultimate_creditor).to eq('Patrick')
273
273
  end
274
274
  end
275
+
276
+ context 'with an unknown detail' do
277
+ let(:detail) do
278
+ OpenStruct.new(
279
+ body: '0530004411001871EUR2 0001016255614090823 A AEUR200000000000740',
280
+ detail_code: 'A A',
281
+ detail: 'EUR200000000000740',
282
+ )
283
+ end
284
+
285
+ it 'adds the detail to the unknown details hash' do
286
+ operation.merge_detail(detail)
287
+
288
+ expect(operation.details.unknown).to eq({ 'A_A' => 'EUR200000000000740' })
289
+ end
290
+
291
+ it 'updates the current details in case of duplicated codes' do
292
+ operation.merge_detail(detail)
293
+ operation.merge_detail(detail)
294
+
295
+ expect(operation.details.unknown).to eq({ 'A_A' => "EUR200000000000740\nEUR200000000000740" })
296
+ end
297
+
298
+ it 'does not add any detail if they are empty' do
299
+ detail = OpenStruct.new(
300
+ body: '0530004411001871EUR2 0001016255614090823',
301
+ detail_code: '',
302
+ detail: 'EUR200000000000740',
303
+ )
304
+ operation.merge_detail(detail)
305
+
306
+ expect(operation.details.unknown).to be_nil
307
+ end
308
+ end
275
309
  end
276
310
 
277
311
  describe '#type_code' do
@@ -43,12 +43,18 @@ describe CFONB::Parser do
43
43
  reference: '',
44
44
  )
45
45
  expect(statements[0].operations[0].details).to have_attributes(
46
- free_label: 'MENSUEAUHTR13133',
46
+ free_label: "MENSUEAUHTR13133\nMENSUEAUHTR13DUP",
47
47
  original_currency: nil,
48
48
  original_amount: nil,
49
49
  exchange_rate: nil,
50
50
  purpose: 'PURPOSE',
51
51
  debtor: 'INTERNET SFR',
52
+ unknown: {
53
+ 'AAA' => "INTERNETA AAA\nINTERNETA ABB",
54
+ 'BBB' => 'INTERNETE BBB',
55
+ 'CCC' => 'INTERNETI CCC',
56
+ 'N_Y' => 'EXAMPLE WITH EMPTY SPACE',
57
+ },
52
58
  )
53
59
 
54
60
  expect(statements[0].operations[1]).to have_attributes(
@@ -272,7 +278,7 @@ describe CFONB::Parser do
272
278
 
273
279
  expect(statements[0].operations[0].details).to have_attributes(
274
280
  operation_reference: 'REFERENCE',
275
- free_label: 'MENSUEAUHTR13133',
281
+ free_label: "MENSUEAUHTR13133\nMENSUEAUHTR13DUP",
276
282
  debtor: 'INTERNET SFR',
277
283
  client_reference: 'OTHER REFERENCE',
278
284
  original_currency: nil,
@@ -705,7 +711,7 @@ describe CFONB::Parser do
705
711
  expect(operation.details).to have_attributes(
706
712
  operation_reference: 'REFERENCE',
707
713
  client_reference: 'OTHER REFERENCE',
708
- free_label: "MENSUEAUHTR13133\nP051928612 22793301700040",
714
+ free_label: "MENSUEAUHTR13133\nMENSUEAUHTR13DUP\nP051928612 22793301700040",
709
715
  debtor: 'ELEC ERDF',
710
716
  original_currency: nil,
711
717
  original_amount: nil,
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cfonb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Johan Le Bray
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2024-11-15 00:00:00.000000000 Z
12
+ date: 2024-12-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: license_finder
@@ -112,6 +112,7 @@ files:
112
112
  - lib/cfonb/operation_details/npy.rb
113
113
  - lib/cfonb/operation_details/rcn.rb
114
114
  - lib/cfonb/operation_details/ref.rb
115
+ - lib/cfonb/operation_details/unknown.rb
115
116
  - lib/cfonb/parser.rb
116
117
  - lib/cfonb/refinements/strings.rb
117
118
  - lib/cfonb/statement.rb