mt940_parser 1.3.0 → 1.4.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: d41138ff40dff2f7b248fbc62eb188432f77a704
4
- data.tar.gz: c3c18b52888bfd6b6d203383a0ffe9aa047af8b7
3
+ metadata.gz: 0f235b2d445bfb06eed8db5a7f82580d3a493c2d
4
+ data.tar.gz: 4020b7d563f4848e5444005a7368079f4b2b44fd
5
5
  SHA512:
6
- metadata.gz: 52f17eaaa04d97fa4fbdb66f506aef297f5235560fcc780a9ba24184d324810a84ce701c03923da978eb3a8c21b20846c422f48f6d55e2a87e0959ae989a5511
7
- data.tar.gz: 8023a530e57fc870f7c28c7e63ff416cdd3d4e5f47702c1df1b42666dde33d17b5c817ec5de4ab0df348df9f1571f2d3b73b911c45ee1b47bfc06fccac88ce9c
6
+ metadata.gz: f7771e18e4e0005a5ce95b71d4c3a601b237c14b01ff9bd322894182472ef7a8f927e57e22e591381c55c4f338ae519173558d0bc8bb06f60982ca03ada135a6
7
+ data.tar.gz: 0a4e1efc1502b343c0170fdaf15f993ec6d367918de6e0e35363c8d0e3c6ebde94218b691c6c04fa94401f065215a8bff88ef3bb4912ed14390bea0281ff24e2
data/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ .*.sw[pon]
2
+ .AppleDouble
3
+ .DS_Store
4
+ .bundle
5
+ .ruby-gemset
6
+ .ruby-version
7
+ .rvmrc
8
+ Gemfile.lock
9
+ coverage
10
+ pkg
data/Gemfile CHANGED
@@ -1,13 +1,7 @@
1
- source "http://rubygems.org"
2
- # Add dependencies required to use your gem here.
3
- # Example:
4
- # gem "activesupport", ">= 2.3.5"
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
5
4
 
6
- # Add dependencies to develop your gem here.
7
- # Include everything needed to run rake, tests, features, etc.
8
5
  group :development do
9
- gem "bundler"
10
- gem "jeweler"
11
- gem "test-unit"
12
6
  gem "byebug", platform: :mri
13
7
  end
data/Rakefile CHANGED
@@ -1,58 +1,28 @@
1
- require 'rubygems'
2
- require 'bundler'
3
- begin
4
- Bundler.setup(:default, :development)
5
- rescue Bundler::BundlerError => e
6
- $stderr.puts e.message
7
- $stderr.puts "Run `bundle install` to install missing gems"
8
- exit e.status_code
9
- end
10
- require 'rake'
1
+ # vim: set filetype=ruby et sw=2 ts=2:
11
2
 
12
- begin
13
- require 'jeweler'
14
- Jeweler::Tasks.new do |gem|
15
- gem.name = "mt940_parser"
16
- gem.summary = %Q{MT940 parses account statements in the SWIFT MT940 format.}
17
- gem.license = "MIT"
18
- gem.email = "developers@betterplace.org"
19
- gem.homepage = "http://github.com/betterplace/mt940_parser"
20
- gem.authors = ["Thies C. Arntzen", "Phillip Oertel"]
21
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
22
- end
23
- Jeweler::GemcutterTasks.new
24
- rescue LoadError
25
- puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
26
- end
3
+ require 'gem_hadar'
27
4
 
28
- require 'rake/testtask'
29
- Rake::TestTask.new(:test) do |test|
30
- test.libs << 'lib' << 'test'
31
- test.pattern = 'test/**/test_*.rb'
32
- test.verbose = true
33
- end
5
+ GemHadar do
6
+ name 'mt940_parser'
7
+ module_type :class
8
+ path_name 'mt940'
9
+ path_module 'MT940'
10
+ author [ "Thies C. Arntzen", "Phillip Oertel" ]
11
+ email 'developers@betterplace.org'
12
+ homepage "http://github.com/betterplace/mt940_parser"
13
+ summary 'MT940 parses account statements in the SWIFT MT940 format.'
14
+ description 'Ruby library that parses account statements in the SWIFT MT940 format.'
15
+ test_dir 'test'
16
+ test_files Dir['test/**/test_*.rb']
17
+ spec_dir 'spec'
18
+ ignore '.*.sw[pon]', 'pkg', 'Gemfile.lock', '.rvmrc', 'coverage',
19
+ '.DS_Store', '.ruby-gemset', '.ruby-version', '.bundle', '.AppleDouble'
20
+
21
+ readme 'README.rdoc'
22
+ licenses 'MIT'
34
23
 
35
- begin
36
- require 'rcov/rcovtask'
37
- Rcov::RcovTask.new do |test|
38
- test.libs << 'test'
39
- test.pattern = 'test/**/test_*.rb'
40
- test.verbose = true
41
- end
42
- rescue LoadError
43
- task :rcov do
44
- abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
45
- end
24
+ development_dependency 'test-unit'
25
+ development_dependency 'simplecov'
46
26
  end
47
27
 
48
28
  task :default => :test
49
-
50
- require 'rdoc/task'
51
- RDoc::Task.new do |rdoc|
52
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
53
-
54
- rdoc.rdoc_dir = 'rdoc'
55
- rdoc.title = "mt940 #{version}"
56
- rdoc.rdoc_files.include('README*')
57
- rdoc.rdoc_files.include('lib/**/*.rb')
58
- end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.4.0
@@ -2,7 +2,6 @@
2
2
  # MT940.parse command. use it in order to make dealing with
3
3
  # the data easier
4
4
  class MT940
5
-
6
5
  class CustomerStatementMessage
7
6
 
8
7
  attr_reader :statement_lines
@@ -37,15 +36,15 @@ class MT940
37
36
  private
38
37
 
39
38
  def ensure_is_info_line!(line)
40
- unless line.is_a?(MT940::StatementLineInformation)
41
- raise StandardError, "Unexpected Structure; expected StatementLineInformation, but was #{line.class}"
39
+ unless line.is_a? MT940::StatementLineInformation
40
+ raise MT940::UnexpectedStructureError,
41
+ "Unexpected Structure; expected StatementLineInformation, "\
42
+ "but was #{line.class}"
42
43
  end
43
44
  end
44
-
45
45
  end
46
46
 
47
47
  class StatementLineBundle
48
-
49
48
  METHOD_MAP = {
50
49
  :amount => :line,
51
50
  :funds_code => :line,
@@ -68,7 +67,5 @@ class MT940
68
67
  object = instance_variable_get("@#{METHOD_MAP[method.to_sym]}")
69
68
  object.send(method)
70
69
  end
71
-
72
70
  end
73
-
74
71
  end
@@ -0,0 +1,17 @@
1
+ class MT940
2
+ module Errors
3
+ class MT940Error < StandardError; end
4
+
5
+ class FieldNotImplementedError < MT940Error; end
6
+
7
+ class ParseError < MT940Error; end
8
+
9
+ class WrongLineFormatError < ParseError; end
10
+
11
+ class InvalidAmountFormatError < ParseError; end
12
+
13
+ class UnexpectedStructureError < ParseError; end
14
+ end
15
+
16
+ include Errors
17
+ end
@@ -0,0 +1,8 @@
1
+ class MT940
2
+ # MT940 version
3
+ VERSION = '1.4.0'
4
+ VERSION_ARRAY = VERSION.split('.').map(&:to_i) # :nodoc:
5
+ VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
+ VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
7
+ VERSION_BUILD = VERSION_ARRAY[2] # :nodoc:
8
+ end
data/lib/mt940.rb CHANGED
@@ -1,10 +1,13 @@
1
+ require 'mt940/version'
2
+ require 'mt940/errors'
1
3
  require 'mt940/customer_statement_message'
4
+ require 'bigdecimal'
2
5
 
3
6
  class MT940
4
7
  class Field
5
8
  attr_reader :modifier, :content
6
9
 
7
- DATE = /(\d{2})(\d{2})(\d{2})/
10
+ DATE = /(\d{2})(\d{2})(\d{2})/
8
11
  SHORT_DATE = /(\d{2})(\d{2})/
9
12
 
10
13
  class << self
@@ -23,42 +26,44 @@ class MT940
23
26
  '64' => ValutaBalance,
24
27
  '65' => FutureValutaBalance,
25
28
  '86' => StatementLineInformation
26
- }[number]
27
-
28
- raise StandardError, "Field #{number} is not implemented" unless klass
29
+ }.fetch(number) do
30
+ raise FieldNotImplementedError, "Field #{number} is not implemented"
31
+ end
29
32
 
30
33
  klass.new(modifier, content)
31
34
  else
32
- raise StandardError, "Wrong line format: #{line.dump}"
35
+ raise WrongLineFormatError, "Wrong line format: #{line.dump}"
33
36
  end
34
37
  end
35
38
  end
36
39
 
37
40
  def initialize(modifier, content)
38
41
  @modifier = modifier
39
- @content = content
42
+ @content = content
40
43
  parse_content(content)
41
44
  end
42
45
 
43
46
  private
44
- def parse_amount_in_cents(amount)
45
- # don't use Integer(amount) function, because amount can be "008" - interpreted as octal number ("010" = 8)
46
- amount.gsub(',', '').to_i
47
- end
48
47
 
49
- def parse_date(date)
50
- date.match(DATE)
51
- Date.new("20#{$1}".to_i, $2.to_i, $3.to_i)
52
- end
48
+ def parse_amount_in_cents(amount)
49
+ amount =~ /\A(\d+)(,\d*)?\z/ or
50
+ raise InvalidAmountFormatError, "invalid amount #{amount.inspect}"
51
+ (100 * BigDecimal.new(amount.sub(?,, ?.))).floor
52
+ end
53
53
 
54
- def parse_entry_date(raw_entry_date, value_date)
55
- raw_entry_date.match(SHORT_DATE)
56
- entry_date = Date.new(value_date.year, $1.to_i, $2.to_i)
57
- if (entry_date.year != value_date.year)
58
- raise "Unhandled case: value date and entry date are in different years"
59
- end
60
- entry_date
54
+ def parse_date(date)
55
+ date.match(DATE)
56
+ Date.new("20#{$1}".to_i, $2.to_i, $3.to_i)
57
+ end
58
+
59
+ def parse_entry_date(raw_entry_date, value_date)
60
+ raw_entry_date.match(SHORT_DATE)
61
+ entry_date = Date.new(value_date.year, $1.to_i, $2.to_i)
62
+ unless entry_date.year == value_date.year
63
+ raise "Unhandled case: value date and entry date are in different years"
61
64
  end
65
+ entry_date
66
+ end
62
67
  end
63
68
 
64
69
  # 20
@@ -111,30 +116,33 @@ class MT940
111
116
  def parse_content(content)
112
117
  content.match(CONTENT)
113
118
 
114
- @balance_type = case @modifier
119
+ @balance_type =
120
+ case @modifier
115
121
  when 'F'
116
122
  :start
117
123
  when 'M'
118
124
  :intermediate
119
- end
125
+ end
120
126
 
121
- @sign = case $1
127
+ @sign =
128
+ case $1
122
129
  when 'C'
123
130
  :credit
124
131
  when 'D'
125
132
  :debit
126
- end
133
+ end
127
134
 
128
- raw_date = $2
135
+ raw_date = $2
129
136
  @currency = $3
130
- @amount = parse_amount_in_cents($4)
137
+ @amount = parse_amount_in_cents($4)
131
138
 
132
- @date = case raw_date
139
+ @date =
140
+ case raw_date
133
141
  when 'ALT', '0'
134
142
  nil
135
143
  when DATE
136
144
  Date.new("20#{$1}".to_i, $2.to_i, $3.to_i)
137
- end
145
+ end
138
146
  end
139
147
  end
140
148
 
@@ -147,9 +155,10 @@ class MT940
147
155
  def parse_content(content)
148
156
  content.match(CONTENT)
149
157
 
150
- raw_date = $1
158
+ raw_date = $1
151
159
  raw_entry_date = $2
152
- @funds_code = case $3
160
+ @funds_code =
161
+ case $3
153
162
  when 'C'
154
163
  :credit
155
164
  when 'D'
@@ -158,7 +167,7 @@ class MT940
158
167
  :return_credit
159
168
  when 'RD'
160
169
  :return_debit
161
- end
170
+ end
162
171
 
163
172
  @amount = parse_amount_in_cents($4)
164
173
  @swift_code = $5
@@ -195,34 +204,36 @@ class MT940
195
204
  content.match(/^(\d{3})((.).*)$/)
196
205
  @code = $1.to_i
197
206
 
198
- details = []
207
+ details = []
199
208
  account_holder = []
200
209
 
201
210
  if seperator = $3
202
- sub_fields = $2.scan(/#{Regexp.escape(seperator)}(\d{2})([^#{Regexp.escape(seperator)}]*)/)
203
-
211
+ sub_fields = $2.scan(
212
+ /#{Regexp.escape(seperator)}(\d{2})([^#{Regexp.escape(seperator)}]*)/
213
+ )
204
214
 
205
215
  sub_fields.each do |(code, content)|
206
216
  case code.to_i
207
- when 0
208
- @transaction_description = content
209
- when 10
210
- @prima_nota = content
211
- when 20..29, 60..63
212
- details << content
213
- when 30
214
- @bank_code = content
215
- when 31
216
- @account_number = content
217
- when 32..33
218
- account_holder << content
219
- when 34
220
- @text_key_extension = content
217
+ when 0
218
+ @transaction_description = content
219
+ when 10
220
+ @prima_nota = content
221
+ when 20..29, 60..63
222
+ details << content
223
+ when 30
224
+ @bank_code = content
225
+ when 31
226
+ @account_number = content
227
+ when 32..33
228
+ account_holder << content
229
+ when 34
230
+ @text_key_extension = content
221
231
  else
222
232
  @not_implemented_fields ||= []
223
- @not_implemented_fields << [code, content]
224
- $stderr << "code not implemented: code:#{code} content: \"#{content}\"\n" if $DEBUG
225
-
233
+ @not_implemented_fields << [ code, content ]
234
+ if $DEBUG
235
+ warn "code not implemented: code:#{code} content: #{content.inspect}"
236
+ end
226
237
  end
227
238
  end
228
239
  end
@@ -232,22 +243,20 @@ class MT940
232
243
  end
233
244
  end
234
245
 
235
-
236
246
  class << self
237
247
  def parse(text)
238
- raise "Invalid encoding!" unless text.valid_encoding?
239
- new_text = text.encode('utf-8').strip
248
+ new_text = text.encode('UTF-8').strip
240
249
  new_text << "\r\n" if new_text[-1,1] == '-'
241
250
  raw_sheets = new_text.split(/^-\s*\r\n/).map { |sheet| sheet.gsub(/\r\n(?!:)/, '') }
242
251
  sheets = raw_sheets.map { |raw_sheet| parse_sheet(raw_sheet) }
243
252
  end
244
253
 
245
-
246
254
  private
247
- def parse_sheet(sheet)
248
- lines = sheet.split("\r\n")
249
- fields = lines.reject { |line| line.empty? }.map { |line| Field.for(line) }
250
- fields
251
- end
255
+
256
+ def parse_sheet(sheet)
257
+ lines = sheet.split("\r\n")
258
+ fields = lines.reject { |line| line.empty? }.map { |line| Field.for(line) }
259
+ fields
260
+ end
252
261
  end
253
262
  end
data/mt940_parser.gemspec CHANGED
@@ -1,86 +1,40 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
1
  # -*- encoding: utf-8 -*-
5
- # stub: mt940_parser 1.3.0 ruby lib
2
+ # stub: mt940_parser 1.4.0 ruby lib
6
3
 
7
4
  Gem::Specification.new do |s|
8
5
  s.name = "mt940_parser"
9
- s.version = "1.3.0"
6
+ s.version = "1.4.0"
10
7
 
11
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
9
  s.require_paths = ["lib"]
13
10
  s.authors = ["Thies C. Arntzen", "Phillip Oertel"]
14
- s.date = "2015-04-16"
11
+ s.date = "2015-05-11"
12
+ s.description = "Ruby library that parses account statements in the SWIFT MT940 format."
15
13
  s.email = "developers@betterplace.org"
16
- s.extra_rdoc_files = [
17
- "LICENSE",
18
- "README.rdoc"
19
- ]
20
- s.files = [
21
- ".document",
22
- ".specification",
23
- ".travis.yml",
24
- "Gemfile",
25
- "LICENSE",
26
- "README.rdoc",
27
- "Rakefile",
28
- "VERSION.yml",
29
- "docs/0E0Y00DNY.pdf",
30
- "docs/FinTS_4.0_Formals.pdf",
31
- "docs/FinTS_4.0_Messages_Finanzdatenformate.pdf",
32
- "docs/MT940_Deutschland_Structure2002.pdf",
33
- "docs/SEPA_20MT940__Schnittstellenbeschreibung.pdf",
34
- "docs/mt940.pdf",
35
- "docs/swift_mt940_942.pdf",
36
- "docs/uebersicht_der_geschaeftsvorfallcodes_und_buchungs_textschluessel.pdf",
37
- "lib/mt940.rb",
38
- "lib/mt940/customer_statement_message.rb",
39
- "mt940_parser.gemspec",
40
- "test/fixtures/currency_in_25.txt",
41
- "test/fixtures/currency_in_25.yml",
42
- "test/fixtures/empty_86.txt",
43
- "test/fixtures/empty_86.yml",
44
- "test/fixtures/empty_entry_date.txt",
45
- "test/fixtures/empty_entry_date.yml",
46
- "test/fixtures/empty_line.txt",
47
- "test/fixtures/empty_line.yml",
48
- "test/fixtures/missing_crlf_at_end.txt",
49
- "test/fixtures/missing_crlf_at_end.yml",
50
- "test/fixtures/sepa_mt9401.txt",
51
- "test/fixtures/sepa_mt9401.yml",
52
- "test/fixtures/sepa_snippet.txt",
53
- "test/fixtures/sepa_snippet_broken.txt",
54
- "test/fixtures/with_binary_character.txt",
55
- "test/fixtures/with_binary_character.yml",
56
- "test/helper.rb",
57
- "test/test_customer_statement_message.rb",
58
- "test/test_mt940.rb"
59
- ]
14
+ s.extra_rdoc_files = ["README.rdoc", "lib/mt940.rb", "lib/mt940/customer_statement_message.rb", "lib/mt940/errors.rb", "lib/mt940/version.rb"]
15
+ s.files = [".document", ".gitignore", ".specification", ".travis.yml", "Gemfile", "LICENSE", "README.rdoc", "Rakefile", "VERSION", "VERSION.yml", "docs/0E0Y00DNY.pdf", "docs/FinTS_4.0_Formals.pdf", "docs/FinTS_4.0_Messages_Finanzdatenformate.pdf", "docs/MT940_Deutschland_Structure2002.pdf", "docs/SEPA_20MT940__Schnittstellenbeschreibung.pdf", "docs/mt940.pdf", "docs/swift_mt940_942.pdf", "docs/uebersicht_der_geschaeftsvorfallcodes_und_buchungs_textschluessel.pdf", "lib/mt940.rb", "lib/mt940/customer_statement_message.rb", "lib/mt940/errors.rb", "lib/mt940/version.rb", "mt940_parser.gemspec", "test/fixtures/amount_formats.txt", "test/fixtures/amount_formats.yml", "test/fixtures/currency_in_25.txt", "test/fixtures/currency_in_25.yml", "test/fixtures/empty_86.txt", "test/fixtures/empty_86.yml", "test/fixtures/empty_entry_date.txt", "test/fixtures/empty_entry_date.yml", "test/fixtures/empty_line.txt", "test/fixtures/empty_line.yml", "test/fixtures/missing_crlf_at_end.txt", "test/fixtures/missing_crlf_at_end.yml", "test/fixtures/sepa_mt9401.txt", "test/fixtures/sepa_mt9401.yml", "test/fixtures/sepa_snippet.txt", "test/fixtures/sepa_snippet_broken.txt", "test/fixtures/with_binary_character.txt", "test/fixtures/with_binary_character.yml", "test/helper.rb", "test/test_customer_statement_message.rb", "test/test_mt940.rb"]
60
16
  s.homepage = "http://github.com/betterplace/mt940_parser"
61
17
  s.licenses = ["MIT"]
18
+ s.rdoc_options = ["--title", "Mt940Parser - MT940 parses account statements in the SWIFT MT940 format.", "--main", "README.rdoc"]
62
19
  s.rubygems_version = "2.4.6"
63
20
  s.summary = "MT940 parses account statements in the SWIFT MT940 format."
21
+ s.test_files = ["test/test_customer_statement_message.rb", "test/test_mt940.rb"]
64
22
 
65
23
  if s.respond_to? :specification_version then
66
24
  s.specification_version = 4
67
25
 
68
26
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
69
- s.add_development_dependency(%q<bundler>, [">= 0"])
70
- s.add_development_dependency(%q<jeweler>, [">= 0"])
27
+ s.add_development_dependency(%q<gem_hadar>, ["~> 1.2.1"])
71
28
  s.add_development_dependency(%q<test-unit>, [">= 0"])
72
- s.add_development_dependency(%q<byebug>, [">= 0"])
29
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
73
30
  else
74
- s.add_dependency(%q<bundler>, [">= 0"])
75
- s.add_dependency(%q<jeweler>, [">= 0"])
31
+ s.add_dependency(%q<gem_hadar>, ["~> 1.2.1"])
76
32
  s.add_dependency(%q<test-unit>, [">= 0"])
77
- s.add_dependency(%q<byebug>, [">= 0"])
33
+ s.add_dependency(%q<simplecov>, [">= 0"])
78
34
  end
79
35
  else
80
- s.add_dependency(%q<bundler>, [">= 0"])
81
- s.add_dependency(%q<jeweler>, [">= 0"])
36
+ s.add_dependency(%q<gem_hadar>, ["~> 1.2.1"])
82
37
  s.add_dependency(%q<test-unit>, [">= 0"])
83
- s.add_dependency(%q<byebug>, [">= 0"])
38
+ s.add_dependency(%q<simplecov>, [">= 0"])
84
39
  end
85
40
  end
86
-
@@ -0,0 +1,6 @@
1
+ :60F:C100318EUR380115,12
2
+ :60F:C100318EUR380115,1
3
+ :60F:C100318EUR380115,
4
+ :60F:C100318EUR0,12
5
+ :60F:C100318EUR00,12
6
+ :60F:C100318EUR001,12
@@ -0,0 +1,49 @@
1
+ ---
2
+ - - !ruby/object:MT940::AccountBalance
3
+ modifier: F
4
+ content: C100318EUR380115,12
5
+ balance_type: :start
6
+ sign: :credit
7
+ currency: EUR
8
+ amount: 38011512
9
+ date: 2010-03-18
10
+ - !ruby/object:MT940::AccountBalance
11
+ modifier: F
12
+ content: C100318EUR380115,1
13
+ balance_type: :start
14
+ sign: :credit
15
+ currency: EUR
16
+ amount: 38011510
17
+ date: 2010-03-18
18
+ - !ruby/object:MT940::AccountBalance
19
+ modifier: F
20
+ content: C100318EUR380115,
21
+ balance_type: :start
22
+ sign: :credit
23
+ currency: EUR
24
+ amount: 38011500
25
+ date: 2010-03-18
26
+ - !ruby/object:MT940::AccountBalance
27
+ modifier: F
28
+ content: C100318EUR0,12
29
+ balance_type: :start
30
+ sign: :credit
31
+ currency: EUR
32
+ amount: 12
33
+ date: 2010-03-18
34
+ - !ruby/object:MT940::AccountBalance
35
+ modifier: F
36
+ content: C100318EUR00,12
37
+ balance_type: :start
38
+ sign: :credit
39
+ currency: EUR
40
+ amount: 12
41
+ date: 2010-03-18
42
+ - !ruby/object:MT940::AccountBalance
43
+ modifier: F
44
+ content: C100318EUR001,12
45
+ balance_type: :start
46
+ sign: :credit
47
+ currency: EUR
48
+ amount: 112
49
+ date: 2010-03-18
@@ -26,7 +26,7 @@
26
26
  modifier:
27
27
  content: 0709040904CR300,NTRFTFNr 40005 MSGID//0724710345313905
28
28
  funds_code: :credit
29
- amount: 300
29
+ amount: 30000
30
30
  swift_code: NTRF
31
31
  reference: TFNr 40005 MSGID
32
32
  transaction_description: 0724710345313905
@@ -74,7 +74,7 @@
74
74
  modifier:
75
75
  content: 0709040904CR15000,NTRFTFNr 40005 MSGID//0724710345313900
76
76
  funds_code: :credit
77
- amount: 15000
77
+ amount: 1500000
78
78
  swift_code: NTRF
79
79
  reference: TFNr 40005 MSGID
80
80
  transaction_description: 0724710345313900
@@ -209,7 +209,7 @@
209
209
  balance_type: :start
210
210
  sign: :debit
211
211
  currency: EUR
212
- amount: 9704999
212
+ amount: 97049990
213
213
  date: 2007-09-03
214
214
  - !ruby/object:MT940::StatementLine
215
215
  modifier:
@@ -257,7 +257,7 @@
257
257
  modifier:
258
258
  content: 0709040904DR500250,NTRFKREF+//BD7CFA74485E7E69
259
259
  funds_code: :debit
260
- amount: 500250
260
+ amount: 50025000
261
261
  swift_code: NTRF
262
262
  reference: KREF+
263
263
  transaction_description: BD7CFA74485E7E69
@@ -500,7 +500,7 @@
500
500
  modifier:
501
501
  content: 0709040904CR250000,NTRFNONREF//0724710290628244
502
502
  funds_code: :credit
503
- amount: 250000
503
+ amount: 25000000
504
504
  swift_code: NTRF
505
505
  reference: NONREF
506
506
  transaction_description: 0724710290628244
@@ -531,7 +531,7 @@
531
531
  modifier:
532
532
  content: 0709040904CR300000,NTRFNONREF//0724710290631813
533
533
  funds_code: :credit
534
- amount: 300000
534
+ amount: 30000000
535
535
  swift_code: NTRF
536
536
  reference: NONREF
537
537
  transaction_description: 0724710290631813
@@ -560,7 +560,7 @@
560
560
  modifier:
561
561
  content: 0709040904CR500000,NTRFNONREF//0724710290630146
562
562
  funds_code: :credit
563
- amount: 500000
563
+ amount: 50000000
564
564
  swift_code: NTRF
565
565
  reference: NONREF
566
566
  transaction_description: 0724710290630146
@@ -713,7 +713,7 @@
713
713
  modifier:
714
714
  content: 0709040904DR500250,NTRFTFNr 01006 PayId//E87048E11B394C1E
715
715
  funds_code: :debit
716
- amount: 500250
716
+ amount: 50025000
717
717
  swift_code: NTRF
718
718
  reference: TFNr 01006 PayId
719
719
  transaction_description: E87048E11B394C1E
@@ -804,7 +804,7 @@
804
804
  balance_type: :start
805
805
  sign: :credit
806
806
  currency: EUR
807
- amount: 2039602
807
+ amount: 20396020
808
808
  date: 2007-09-04
809
809
  - !ruby/object:MT940::ValutaBalance
810
810
  modifier:
@@ -812,7 +812,7 @@
812
812
  balance_type:
813
813
  sign: :credit
814
814
  currency: EUR
815
- amount: 2039602
815
+ amount: 20396020
816
816
  date: 2007-09-04
817
817
  - - !ruby/object:MT940::Job
818
818
  modifier:
@@ -835,7 +835,7 @@
835
835
  balance_type: :start
836
836
  sign: :debit
837
837
  currency: EUR
838
- amount: 404322
838
+ amount: 4043220
839
839
  date: 2007-09-03
840
840
  - !ruby/object:MT940::StatementLine
841
841
  modifier:
@@ -1181,7 +1181,7 @@
1181
1181
  modifier:
1182
1182
  content: 0709040904CR50,NTRFTFNr 40016 MSGID//0724710324649377
1183
1183
  funds_code: :credit
1184
- amount: 50
1184
+ amount: 5000
1185
1185
  swift_code: NTRF
1186
1186
  reference: TFNr 40016 MSGID
1187
1187
  transaction_description: 0724710324649377
@@ -1307,7 +1307,7 @@
1307
1307
  modifier:
1308
1308
  content: 0709040904DR2550,NTRFKREF+//31408CF87AD5901E
1309
1309
  funds_code: :debit
1310
- amount: 2550
1310
+ amount: 255000
1311
1311
  swift_code: NTRF
1312
1312
  reference: KREF+
1313
1313
  transaction_description: 31408CF87AD5901E
@@ -1428,7 +1428,7 @@
1428
1428
  modifier:
1429
1429
  content: 0709040904DR402104,NTRFNONREF//57B4197CC644DE8F
1430
1430
  funds_code: :debit
1431
- amount: 402104
1431
+ amount: 40210400
1432
1432
  swift_code: NTRF
1433
1433
  reference: NONREF
1434
1434
  transaction_description: 57B4197CC644DE8F
@@ -2091,7 +2091,7 @@
2091
2091
  modifier:
2092
2092
  content: 0709040904DR342104,NTRFKREF+//A26B6D6B5E821EA9
2093
2093
  funds_code: :debit
2094
- amount: 342104
2094
+ amount: 34210400
2095
2095
  swift_code: NTRF
2096
2096
  reference: KREF+
2097
2097
  transaction_description: A26B6D6B5E821EA9
@@ -2111,7 +2111,7 @@
2111
2111
  modifier:
2112
2112
  content: 0709040904DR962104,NTRFKREF+//493189D221858097
2113
2113
  funds_code: :debit
2114
- amount: 962104
2114
+ amount: 96210400
2115
2115
  swift_code: NTRF
2116
2116
  reference: KREF+
2117
2117
  transaction_description: 493189D221858097
@@ -2135,7 +2135,7 @@
2135
2135
  modifier:
2136
2136
  content: 0709040904DR1522104,NTRFNONREF//75C62EC25E19D187
2137
2137
  funds_code: :debit
2138
- amount: 1522104
2138
+ amount: 152210400
2139
2139
  swift_code: NTRF
2140
2140
  reference: NONREF
2141
2141
  transaction_description: 75C62EC25E19D187
@@ -2231,7 +2231,7 @@
2231
2231
  balance_type: :start
2232
2232
  sign: :credit
2233
2233
  currency: EUR
2234
- amount: 279801
2234
+ amount: 2798010
2235
2235
  date: 2007-09-04
2236
2236
  - !ruby/object:MT940::ValutaBalance
2237
2237
  modifier:
@@ -2239,7 +2239,7 @@
2239
2239
  balance_type:
2240
2240
  sign: :credit
2241
2241
  currency: EUR
2242
- amount: 279801
2242
+ amount: 2798010
2243
2243
  date: 2007-09-04
2244
2244
  - - !ruby/object:MT940::Job
2245
2245
  modifier:
@@ -2617,7 +2617,7 @@
2617
2617
  modifier:
2618
2618
  content: 0709040904DR342104,NTRFKREF+//D4AF9E363A92E76F
2619
2619
  funds_code: :debit
2620
- amount: 342104
2620
+ amount: 34210400
2621
2621
  swift_code: NTRF
2622
2622
  reference: KREF+
2623
2623
  transaction_description: D4AF9E363A92E76F
@@ -2749,7 +2749,7 @@
2749
2749
  balance_type: :start
2750
2750
  sign: :credit
2751
2751
  currency: EUR
2752
- amount: 2039602
2752
+ amount: 20396020
2753
2753
  date: 2007-09-04
2754
2754
  - !ruby/object:MT940::ValutaBalance
2755
2755
  modifier:
@@ -2757,7 +2757,7 @@
2757
2757
  balance_type:
2758
2758
  sign: :credit
2759
2759
  currency: EUR
2760
- amount: 2039602
2760
+ amount: 20396020
2761
2761
  date: 2007-09-04
2762
2762
  - - !ruby/object:MT940::Job
2763
2763
  modifier:
@@ -3003,7 +3003,7 @@
3003
3003
  modifier:
3004
3004
  content: 0709040904DR1500,NTRFKREF+//536D80EFEC56ACF8
3005
3005
  funds_code: :debit
3006
- amount: 1500
3006
+ amount: 150000
3007
3007
  swift_code: NTRF
3008
3008
  reference: KREF+
3009
3009
  transaction_description: 536D80EFEC56ACF8
@@ -3029,7 +3029,7 @@
3029
3029
  balance_type: :start
3030
3030
  sign: :credit
3031
3031
  currency: EUR
3032
- amount: 11252504
3032
+ amount: 112525040
3033
3033
  date: 2007-09-04
3034
3034
  - !ruby/object:MT940::ValutaBalance
3035
3035
  modifier:
@@ -3066,7 +3066,7 @@
3066
3066
  modifier:
3067
3067
  content: 0709040904CR300,NTRFTFNr 40001 MSGID//0724710345316116
3068
3068
  funds_code: :credit
3069
- amount: 300
3069
+ amount: 30000
3070
3070
  swift_code: NTRF
3071
3071
  reference: TFNr 40001 MSGID
3072
3072
  transaction_description: '0724710345316116'
@@ -3114,7 +3114,7 @@
3114
3114
  modifier:
3115
3115
  content: 0709040904CR15000,NTRFTFNr 40001 MSGID//0724710345316110
3116
3116
  funds_code: :credit
3117
- amount: 15000
3117
+ amount: 1500000
3118
3118
  swift_code: NTRF
3119
3119
  reference: TFNr 40001 MSGID
3120
3120
  transaction_description: '0724710345316110'
@@ -3345,7 +3345,7 @@
3345
3345
  modifier:
3346
3346
  content: 0709040904DR125300,1NTRFKREF+//F2CA963F5C750549
3347
3347
  funds_code: :debit
3348
- amount: 1253001
3348
+ amount: 12530010
3349
3349
  swift_code: NTRF
3350
3350
  reference: KREF+
3351
3351
  transaction_description: F2CA963F5C750549
@@ -3402,13 +3402,13 @@
3402
3402
  balance_type: :start
3403
3403
  sign: :debit
3404
3404
  currency: EUR
3405
- amount: 450
3405
+ amount: 45000
3406
3406
  date: 2007-09-03
3407
3407
  - !ruby/object:MT940::StatementLine
3408
3408
  modifier:
3409
3409
  content: 0709040904DR150,NTRFKREF+//FFCD94B7601B6E06
3410
3410
  funds_code: :debit
3411
- amount: 150
3411
+ amount: 15000
3412
3412
  swift_code: NTRF
3413
3413
  reference: KREF+
3414
3414
  transaction_description: FFCD94B7601B6E06
@@ -3434,7 +3434,7 @@
3434
3434
  balance_type: :start
3435
3435
  sign: :debit
3436
3436
  currency: EUR
3437
- amount: 600
3437
+ amount: 60000
3438
3438
  date: 2007-09-04
3439
3439
  - !ruby/object:MT940::ValutaBalance
3440
3440
  modifier:
@@ -3442,7 +3442,7 @@
3442
3442
  balance_type:
3443
3443
  sign: :debit
3444
3444
  currency: EUR
3445
- amount: 600
3445
+ amount: 60000
3446
3446
  date: 2007-09-04
3447
3447
  - - !ruby/object:MT940::Job
3448
3448
  modifier:
@@ -3465,13 +3465,13 @@
3465
3465
  balance_type: :start
3466
3466
  sign: :debit
3467
3467
  currency: EUR
3468
- amount: 450
3468
+ amount: 45000
3469
3469
  date: 2007-09-03
3470
3470
  - !ruby/object:MT940::StatementLine
3471
3471
  modifier:
3472
3472
  content: 0709040904DR150,NTRFKREF+//DED4A9D0CA11033B
3473
3473
  funds_code: :debit
3474
- amount: 150
3474
+ amount: 15000
3475
3475
  swift_code: NTRF
3476
3476
  reference: KREF+
3477
3477
  transaction_description: DED4A9D0CA11033B
@@ -3497,7 +3497,7 @@
3497
3497
  balance_type: :start
3498
3498
  sign: :debit
3499
3499
  currency: EUR
3500
- amount: 600
3500
+ amount: 60000
3501
3501
  date: 2007-09-04
3502
3502
  - !ruby/object:MT940::ValutaBalance
3503
3503
  modifier:
@@ -3505,7 +3505,7 @@
3505
3505
  balance_type:
3506
3506
  sign: :debit
3507
3507
  currency: EUR
3508
- amount: 600
3508
+ amount: 60000
3509
3509
  date: 2007-09-04
3510
3510
  - - !ruby/object:MT940::Job
3511
3511
  modifier:
data/test/helper.rb CHANGED
@@ -1,3 +1,9 @@
1
+ if ENV['START_SIMPLECOV'].to_i == 1
2
+ require 'simplecov'
3
+ SimpleCov.start do
4
+ add_filter "#{File.basename(File.dirname(__FILE__))}/"
5
+ end
6
+ end
1
7
  require 'rubygems'
2
8
  require 'yaml'
3
9
  require 'test/unit'
@@ -76,7 +76,9 @@ class TestCustomerStatementMessage < Test::Unit::TestCase
76
76
 
77
77
  def test_parsing_a_file_with_broken_structure_should_raise_an_exception
78
78
  file = File.dirname(__FILE__) + "/fixtures/sepa_snippet_broken.txt"
79
- assert_raise(StandardError) { MT940::CustomerStatementMessage.parse_file(file) }
79
+ assert_raise(MT940::UnexpectedStructureError) do
80
+ MT940::CustomerStatementMessage.parse_file(file)
81
+ end
80
82
  end
81
83
 
82
84
  def test_should_raise_method_missing_when_asking_statement_lines_for_unknown_stuff
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mt940_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thies C. Arntzen
@@ -9,36 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-04-16 00:00:00.000000000 Z
12
+ date: 2015-05-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: bundler
15
+ name: gem_hadar
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ">="
18
+ - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '0'
20
+ version: 1.2.1
21
21
  type: :development
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - ">="
25
+ - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: '0'
28
- - !ruby/object:Gem::Dependency
29
- name: jeweler
30
- requirement: !ruby/object:Gem::Requirement
31
- requirements:
32
- - - ">="
33
- - !ruby/object:Gem::Version
34
- version: '0'
35
- type: :development
36
- prerelease: false
37
- version_requirements: !ruby/object:Gem::Requirement
38
- requirements:
39
- - - ">="
40
- - !ruby/object:Gem::Version
41
- version: '0'
27
+ version: 1.2.1
42
28
  - !ruby/object:Gem::Dependency
43
29
  name: test-unit
44
30
  requirement: !ruby/object:Gem::Requirement
@@ -54,7 +40,7 @@ dependencies:
54
40
  - !ruby/object:Gem::Version
55
41
  version: '0'
56
42
  - !ruby/object:Gem::Dependency
57
- name: byebug
43
+ name: simplecov
58
44
  requirement: !ruby/object:Gem::Requirement
59
45
  requirements:
60
46
  - - ">="
@@ -67,21 +53,26 @@ dependencies:
67
53
  - - ">="
68
54
  - !ruby/object:Gem::Version
69
55
  version: '0'
70
- description:
56
+ description: Ruby library that parses account statements in the SWIFT MT940 format.
71
57
  email: developers@betterplace.org
72
58
  executables: []
73
59
  extensions: []
74
60
  extra_rdoc_files:
75
- - LICENSE
76
61
  - README.rdoc
62
+ - lib/mt940.rb
63
+ - lib/mt940/customer_statement_message.rb
64
+ - lib/mt940/errors.rb
65
+ - lib/mt940/version.rb
77
66
  files:
78
67
  - ".document"
68
+ - ".gitignore"
79
69
  - ".specification"
80
70
  - ".travis.yml"
81
71
  - Gemfile
82
72
  - LICENSE
83
73
  - README.rdoc
84
74
  - Rakefile
75
+ - VERSION
85
76
  - VERSION.yml
86
77
  - docs/0E0Y00DNY.pdf
87
78
  - docs/FinTS_4.0_Formals.pdf
@@ -93,7 +84,11 @@ files:
93
84
  - docs/uebersicht_der_geschaeftsvorfallcodes_und_buchungs_textschluessel.pdf
94
85
  - lib/mt940.rb
95
86
  - lib/mt940/customer_statement_message.rb
87
+ - lib/mt940/errors.rb
88
+ - lib/mt940/version.rb
96
89
  - mt940_parser.gemspec
90
+ - test/fixtures/amount_formats.txt
91
+ - test/fixtures/amount_formats.yml
97
92
  - test/fixtures/currency_in_25.txt
98
93
  - test/fixtures/currency_in_25.yml
99
94
  - test/fixtures/empty_86.txt
@@ -118,7 +113,11 @@ licenses:
118
113
  - MIT
119
114
  metadata: {}
120
115
  post_install_message:
121
- rdoc_options: []
116
+ rdoc_options:
117
+ - "--title"
118
+ - Mt940Parser - MT940 parses account statements in the SWIFT MT940 format.
119
+ - "--main"
120
+ - README.rdoc
122
121
  require_paths:
123
122
  - lib
124
123
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -137,4 +136,6 @@ rubygems_version: 2.4.6
137
136
  signing_key:
138
137
  specification_version: 4
139
138
  summary: MT940 parses account statements in the SWIFT MT940 format.
140
- test_files: []
139
+ test_files:
140
+ - test/test_customer_statement_message.rb
141
+ - test/test_mt940.rb