mt940_parser 1.0.1 → 1.0.2

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.
data/VERSION.yml CHANGED
@@ -1,5 +1,5 @@
1
- ---
2
- :patch: 1
3
- :build:
1
+ ---
4
2
  :major: 1
5
3
  :minor: 0
4
+ :patch: 2
5
+ :build:
data/lib/mt940.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  require 'mt940/customer_statement_message'
2
3
 
3
4
  class MT940
@@ -76,9 +77,11 @@ class MT940
76
77
  # 25
77
78
  class Account < Field
78
79
  attr_reader :bank_code, :account_number, :account_currency
79
-
80
+
81
+ CONTENT = /^(.{8,11})\/(\d{0,23})([A-Z]{3})?$/
82
+
80
83
  def parse_content(content)
81
- content.match(/^(.{8,11})\/(\d{0,23})([A-Z]{3})?$/)
84
+ content.match(CONTENT)
82
85
  @bank_code, @account_number, @account_currency = $1, $2, $3
83
86
  end
84
87
  end
@@ -86,9 +89,11 @@ class MT940
86
89
  # 28
87
90
  class Statement < Field
88
91
  attr_reader :number, :sheet
92
+
93
+ CONTENT = /^(0|(\d{5,5})\/(\d{2,5}))$/
89
94
 
90
95
  def parse_content(content)
91
- content.match(/^(0|(\d{5,5})\/(\d{2,5}))$/)
96
+ content.match(CONTENT)
92
97
  if $1 == '0'
93
98
  @number = @sheet = 0
94
99
  else
@@ -100,9 +105,11 @@ class MT940
100
105
  # 60
101
106
  class AccountBalance < Field
102
107
  attr_reader :balance_type, :sign, :currency, :amount, :date
108
+
109
+ CONTENT = /^(C|D)(\w{6})(\w{3})(\d{1,12},\d{0,2})$/
103
110
 
104
111
  def parse_content(content)
105
- content.match(/^(C|D)(\w{6})(\w{3})(\d{1,12},\d{0,2})$/)
112
+ content.match(CONTENT)
106
113
 
107
114
  @balance_type = case @modifier
108
115
  when 'F'
@@ -135,8 +142,10 @@ class MT940
135
142
  class StatementLine < Field
136
143
  attr_reader :date, :entry_date, :funds_code, :amount, :swift_code, :reference, :transaction_description
137
144
 
145
+ CONTENT = /^(\d{6})(\d{4})?(C|D|RC|RD)\D?(\d{1,12},\d{0,2})((?:N|F).{3})(NONREF|.{0,16})(?:$|\/\/)(.*)/
146
+
138
147
  def parse_content(content)
139
- content.match(/^(\d{6})(\d{4})?(C|D|RC|RD)\D?(\d{1,12},\d{0,2})((?:N|F).{3})(NONREF|.{0,16})(?:$|\/\/)(.*)/).to_a
148
+ content.match(CONTENT)
140
149
 
141
150
  raw_date = $1
142
151
  raw_entry_date = $2
@@ -157,7 +166,7 @@ class MT940
157
166
  @transaction_description = $7
158
167
 
159
168
  @date = parse_date(raw_date)
160
- @entry_date = parse_entry_date(raw_entry_date, @date)
169
+ @entry_date = parse_entry_date(raw_entry_date, @date) if raw_entry_date
161
170
  end
162
171
 
163
172
  def value_date
@@ -224,6 +233,15 @@ class MT940
224
233
 
225
234
  class << self
226
235
  def parse(text)
236
+ new_text = text.clone.force_encoding("ISO-8859-1")
237
+ if !new_text.valid_encoding?
238
+ warn "Your data is not in binary format"
239
+ new_text = text.clone.encode("ISO-8859-1")
240
+ if !new_text.valid_encoding?
241
+ puts "WOOOOT WHAT IS THE RIGHT ENCODING?"
242
+ end
243
+ end
244
+ text = new_text # WOOOT refactor?
227
245
  text << "\r\n" if text[-1,1] == '-'
228
246
  raw_sheets = text.split(/^-\r\n/).map { |sheet| sheet.gsub(/\r\n(?!:)/, '') }
229
247
  sheets = raw_sheets.map { |raw_sheet| parse_sheet(raw_sheet) }
data/mt940_parser.gemspec CHANGED
@@ -4,13 +4,13 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{mt940_parser}
8
- s.version = "1.0.1"
7
+ s.name = "mt940_parser"
8
+ s.version = "1.0.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Thies C. Arntzen", "Phillip Oertel"]
12
- s.date = %q{2011-02-28}
13
- s.email = %q{developers@betterplace.org}
12
+ s.date = "2012-04-18"
13
+ s.email = "developers@betterplace.org"
14
14
  s.extra_rdoc_files = [
15
15
  "LICENSE",
16
16
  "README.rdoc"
@@ -39,6 +39,8 @@ Gem::Specification.new do |s|
39
39
  "test/fixtures/currency_in_25.yml",
40
40
  "test/fixtures/empty_86.txt",
41
41
  "test/fixtures/empty_86.yml",
42
+ "test/fixtures/empty_entry_date.txt",
43
+ "test/fixtures/empty_entry_date.yml",
42
44
  "test/fixtures/empty_line.txt",
43
45
  "test/fixtures/empty_line.yml",
44
46
  "test/fixtures/missing_crlf_at_end.txt",
@@ -47,15 +49,17 @@ Gem::Specification.new do |s|
47
49
  "test/fixtures/sepa_mt9401.yml",
48
50
  "test/fixtures/sepa_snippet.txt",
49
51
  "test/fixtures/sepa_snippet_broken.txt",
52
+ "test/fixtures/with_binary_character.txt",
53
+ "test/fixtures/with_binary_character.yml",
50
54
  "test/helper.rb",
51
55
  "test/test_customer_statement_message.rb",
52
56
  "test/test_mt940.rb"
53
57
  ]
54
- s.homepage = %q{http://github.com/betterplace/mt940_parser}
58
+ s.homepage = "http://github.com/betterplace/mt940_parser"
55
59
  s.licenses = ["MIT"]
56
60
  s.require_paths = ["lib"]
57
- s.rubygems_version = %q{1.3.7}
58
- s.summary = %q{MT940 parses account statements in the SWIFT MT940 format.}
61
+ s.rubygems_version = "1.8.21"
62
+ s.summary = "MT940 parses account statements in the SWIFT MT940 format."
59
63
  s.test_files = [
60
64
  "test/helper.rb",
61
65
  "test/test_customer_statement_message.rb",
@@ -63,7 +67,6 @@ Gem::Specification.new do |s|
63
67
  ]
64
68
 
65
69
  if s.respond_to? :specification_version then
66
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
67
70
  s.specification_version = 3
68
71
 
69
72
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
@@ -0,0 +1,2 @@
1
+ :61:110701CN50,00NZ10NONREF
2
+ -
@@ -0,0 +1,9 @@
1
+ ---
2
+ - - !ruby/object:MT940::StatementLine
3
+ amount: 5000
4
+ date: 2011-07-01
5
+ funds_code: :credit
6
+ modifier:
7
+ reference: NONREF
8
+ swift_code: NZ10
9
+ transaction_description: ""