cremul-parser 0.8.0 → 0.9.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6f5e18fc594f98b2ceb5cb96264dfe9108b0e25f
4
- data.tar.gz: da574cd070d87a669b0cb77718bcdcf976c7bf66
3
+ metadata.gz: c8b899dbadb7e1c564cd1156b647acf50fb818f4
4
+ data.tar.gz: c9f86c8f677051c98481a91b1a751cb3193d654e
5
5
  SHA512:
6
- metadata.gz: 539817f1790d87fb42e0f6457aca4854e1dbb2f4380c70a9206ec01f35f4ac1a2289d12ee0f873f47699f386fd7739132460254d606ea6c0d2cd58fb9b7affc7
7
- data.tar.gz: c58ae3f7e2ca77b2ed3312d298595e22387877b9037dd72331b5fe4914869a6d091d6e06f774e89ef420becae5170ced80df975bc6b33797f206e7204252ca69
6
+ metadata.gz: 4adb22742847f7ef5f75588f51a837e0b3606a089f21a93907626b2f930169f0cbe37b726d8fc101802184bc8c2ae9a6ae5cde2d51317d06ed93bad36e7a1abe
7
+ data.tar.gz: e3633e40dd71dc802aeb77af7669e24f84d8447bec993835c2d2d5c31e364e13d4ad8901de329b292249c593706ae5937c652bcbe77e2daa26ca774292b3ca32
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.9.0
4
+
5
+ Added index numbers to CremulMessage, CremulLine and CremulPaymentTx. The hash of the file +
6
+ the index numbers can be used to create unique ids for each payment transaction. This can be
7
+ useful for instance when importing a large Cremul file into a database when you want to make
8
+ sure that none of the transactions have already been imported.
9
+
3
10
  ## 0.8.0
4
11
 
5
12
  Bumped to version 0.8.0 to indicate that it is getting close to finished as a 1.0 version.
data/README.md CHANGED
@@ -36,14 +36,23 @@ f = File.open(<CREMUL-file>)
36
36
  parser = CremulParser.new
37
37
  parser.parse(f)
38
38
  f.close
39
+ ```
39
40
 
40
- # or if the file is not utf-8 encoded
41
+ or if the file is not utf-8 encoded
41
42
 
43
+ ```
42
44
  f = File.open(<CREMUL-file>)
43
45
  parser = CremulParser.new
44
46
  parser.parse(f, <encoding>) # for instance 'ISO-8859-1'
45
47
  f.close
48
+ ```
46
49
 
50
+ A file may contain one or more Cremul messages. A Cremul message consists of 'message segments'.
51
+ Each segment starts with a Cremul keyword. A group of segments make up a logical element of the
52
+ Cremul message. The overall logical structure of a Cremul file is as follows:
53
+
54
+ ```
55
+ [ Cremul file ] 1 --- * [ Cremul message ] 1 --- * [ Line ] 1 --- * [ Payment TX ]
47
56
  ```
48
57
 
49
58
  See the `parser_test.rb` file for more details.
@@ -8,7 +8,7 @@ Gem::Specification.new do |gem|
8
8
  gem.version = Cremul::VERSION
9
9
  gem.platform = Gem::Platform::RUBY
10
10
  gem.authors = ["Per Spilling"]
11
- gem.email = ["per@kodemaker.no"]
11
+ gem.email = ["per@perspilling.net"]
12
12
  gem.summary = %q{A parser for CREMUL payment transaction files}
13
13
  gem.description = %q{A parser for CREMUL payment transaction files. It parses the CREMUL file and creates a Ruby object structure corresponding to the elements in the file.}
14
14
  gem.homepage = "https://github.com/perspilling/cremul-parser"
@@ -9,9 +9,10 @@ require_relative 'cremul_payment_tx'
9
9
  class CremulLine
10
10
  include Cremul::ParserHelper
11
11
 
12
- attr_reader :posting_date, :money, :reference, :bf_account_number, :transactions
12
+ attr_reader :line_index, :posting_date, :money, :reference, :bf_account_number, :transactions
13
13
 
14
- def initialize(segments, line_segment_pos)
14
+ def initialize(line_index, segments, line_segment_pos)
15
+ @line_index = line_index
15
16
  d = segments[next_date_segment_index(segments, line_segment_pos)].split(':')
16
17
  @posting_date = Date.parse(d[1])
17
18
 
@@ -23,8 +24,9 @@ class CremulLine
23
24
  @transactions = []
24
25
  n = number_of_transactions_in_line(segments, line_segment_pos)
25
26
  tx_index = next_tx_sequence_segment_index(segments, line_segment_pos)
26
- n.times do
27
- @transactions << CremulPaymentTx.new(segments, tx_index)
27
+
28
+ n.times do |i|
29
+ @transactions << CremulPaymentTx.new(i+1, segments, tx_index)
28
30
  tx_index = next_tx_sequence_segment_index(segments, tx_index+1)
29
31
  end
30
32
 
@@ -5,17 +5,19 @@ require_relative 'parser_helper'
5
5
  class CremulMessage
6
6
  include Cremul::ParserHelper
7
7
 
8
- attr_reader :header, :number_of_lines, :lines
8
+ # The message_index is the index number of the Cremul message in the file.
9
+ attr_reader :message_index, :header, :number_of_lines, :lines
9
10
 
10
- def initialize(segments)
11
+ def initialize(message_number, segments)
12
+ @message_index = message_number
11
13
  @header = CremulHeader.new(segments)
12
14
  @lines = []
13
15
  @number_of_lines = number_of_lines_in_message(segments)
14
16
 
15
17
  # instantiate the line items
16
18
  line_segment_pos = next_line_segment_index(segments, 0)
17
- @number_of_lines.times do
18
- @lines << CremulLine.new(segments, line_segment_pos)
19
+ @number_of_lines.times do |n|
20
+ @lines << CremulLine.new(n+1, segments, line_segment_pos)
19
21
  line_segment_pos = next_line_segment_index(segments, line_segment_pos+1)
20
22
  end
21
23
 
@@ -20,10 +20,11 @@ class CremulPaymentTx
20
20
  REF_TYPE_INVOICE_NUMBER = 380
21
21
 
22
22
  attr_reader :posting_date, :money, :references, :invoice_ref_type, :invoice_ref, :free_text
23
- attr_reader :payer_account_number, :payer_nad, :beneficiary_nad
23
+ attr_reader :payer_account_number, :payer_nad, :beneficiary_nad, :tx_index
24
24
 
25
25
 
26
- def initialize(segments, tx_segment_pos)
26
+ def initialize(tx_index, segments, tx_segment_pos)
27
+ @tx_index = tx_index # the index number of this tx within it's parent line
27
28
  s = segments[next_date_segment_index(segments, tx_segment_pos)].split(':')
28
29
  @posting_date = Date.parse(s[1])
29
30
 
@@ -4,9 +4,9 @@ require_relative 'parser_helper'
4
4
  # Represents a reference (RFF) segment in a CREMUL message.
5
5
  # Type may be:
6
6
  # - :ACK - Bank reference - KID in Norwegian
7
- # - :AII - Bank’s reference number allocated by the bank to different underlaying individual transactions
7
+ # - :AII - Bank’s reference number allocated by the bank to different underlying individual transactions
8
8
  # - :CT - AutoGiro agreement ID
9
- # - :ABO - Originator´s reference – for excample SWIFT reference senders bank
9
+ # - :ABO - Originator´s reference – for example SWIFT reference senders bank
10
10
  # - :ACD - Bank reference = Archive reference
11
11
  # - :AEK - Payment order number
12
12
  # - :AFO - Beneficiary’s reference
@@ -183,7 +183,7 @@ module Cremul
183
183
  n
184
184
  end
185
185
 
186
- def number_of_messages_in_file(segments)
186
+ def get_messages_in_file(segments)
187
187
  m = {}
188
188
  n = 0
189
189
  segments.each_index do |i|
@@ -1,3 +1,3 @@
1
1
  module Cremul
2
- VERSION = '0.8.0'
2
+ VERSION = '0.9.1'
3
3
  end
data/lib/cremul_parser.rb CHANGED
@@ -3,6 +3,14 @@
3
3
  require_relative 'cremul/parser_helper'
4
4
  require_relative 'cremul/cremul_message'
5
5
 
6
+
7
+ #
8
+ # A file may contain one or more Cremul messages. A Cremul message consists of 'message segments'.
9
+ # Each segment starts with a Cremul keyword. A group of segments make up a logical element of the
10
+ # Cremul message. The overall logical structure of a Cremul message is as follows:
11
+ #
12
+ # [ Cremul message ] 1 --- * [ Line ] 1 --- * [ Payment TX ]
13
+ #
6
14
  class CremulParser
7
15
  include Cremul::ParserHelper
8
16
 
@@ -12,6 +20,7 @@ class CremulParser
12
20
  @messages = []
13
21
  end
14
22
 
23
+ # noinspection RubyResolve
15
24
  def parse(file, file_encoding='utf-8')
16
25
  file_as_a_string = ''
17
26
  file.each do |line|
@@ -27,15 +36,15 @@ class CremulParser
27
36
  @segments = @segments.slice(0, @segments.size-1)
28
37
  end
29
38
 
30
- m = number_of_messages_in_file(@segments)
39
+ m = get_messages_in_file(@segments)
31
40
  if m.size == 0
32
41
  raise 'No CREMUL message found in file'
33
42
  end
34
43
  m.each do |n, start_index|
35
44
  if n < m.size
36
- @messages << CremulMessage.new(@segments[start_index, m[n+1] - start_index])
45
+ @messages << CremulMessage.new(n, @segments[start_index, m[n+1] - start_index])
37
46
  else
38
- @messages << CremulMessage.new(@segments[start_index, @segments.size - start_index])
47
+ @messages << CremulMessage.new(n, @segments[start_index, @segments.size - start_index])
39
48
  end
40
49
  end
41
50
  end
@@ -17,6 +17,7 @@ describe CremulParser do
17
17
  d2014_03_12 = Date.new(2014,3,12)
18
18
 
19
19
  msg = @parser.messages[0]
20
+ msg.message_index.must_equal 1
20
21
  msg.header.must_be_instance_of CremulHeader
21
22
  msg.header.msg_id.must_include 'CREMUL'
22
23
  msg.header.created_date.must_equal d2014_03_12
@@ -26,6 +27,7 @@ describe CremulParser do
26
27
 
27
28
  line = msg.lines[0]
28
29
  line.must_be_instance_of CremulLine
30
+ line.line_index.must_equal 1
29
31
  line.posting_date.must_equal d2014_03_12
30
32
  line.bf_account_number.must_equal '12121212121'
31
33
  line.money.must_be_instance_of CremulMoney
@@ -40,6 +42,7 @@ describe CremulParser do
40
42
  line.transactions.size.must_equal 1
41
43
  tx = line.transactions[0]
42
44
  tx.must_be_instance_of CremulPaymentTx
45
+ tx.tx_index.must_equal 1
43
46
  tx.posting_date.must_equal d2014_03_12
44
47
  tx.money.amount.must_equal 1394.to_f
45
48
  tx.money.currency.must_equal :NOK
@@ -213,6 +216,7 @@ describe CremulParser do
213
216
  braekstad_tx = msg.lines[2].transactions[0]
214
217
  braekstad_tx.invoice_ref.must_equal '20140453869'
215
218
  end
219
+ =end
216
220
 
217
221
 
218
222
  it 'should parse a multi-message file' do
@@ -223,7 +227,6 @@ describe CremulParser do
223
227
 
224
228
  #write_segments_to_file(@parser.segments, File.open('files/CREMUL_multi_message_segments.txt', 'w'))
225
229
  end
226
- =end
227
230
 
228
231
  def write_segments_to_file(msg, file)
229
232
  begin
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cremul-parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Per Spilling
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-24 00:00:00.000000000 Z
11
+ date: 2015-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -41,7 +41,7 @@ dependencies:
41
41
  description: A parser for CREMUL payment transaction files. It parses the CREMUL file
42
42
  and creates a Ruby object structure corresponding to the elements in the file.
43
43
  email:
44
- - per@kodemaker.no
44
+ - per@perspilling.net
45
45
  executables: []
46
46
  extensions: []
47
47
  extra_rdoc_files: []