mt940parser 0.1.0 → 0.2.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.
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
- # Mt940parser
1
+ # MT940Parser
2
2
 
3
- TODO: Write a gem description
3
+ A parser written in Treetop for handling files in MT940 format. The format is widely used in
4
+ Europe by banks and it contains information about client account statements for a given time period.
4
5
 
5
6
  ## Installation
6
7
 
@@ -18,7 +19,17 @@ Or install it yourself as:
18
19
 
19
20
  ## Usage
20
21
 
21
- TODO: Write usage instructions here
22
+ result = MT940::Parser.parse(string)
23
+
24
+ Now you can do some cool stuff like list all records:
25
+
26
+ result.elements #=>
27
+
28
+ Or list all transactions for a given record:
29
+
30
+ result.elements.first.transactions
31
+
32
+ More to come
22
33
 
23
34
  ## Contributing
24
35
 
@@ -19,7 +19,6 @@ grammar Document
19
19
 
20
20
  rule statement_number
21
21
  codess (!(nl) .)* nl <NotImplemented>
22
- # (":28:" / ":28C:") (!(nl) .)* <NotImplemented>
23
22
  end
24
23
 
25
24
  rule initial_balance #:60F:
@@ -1,30 +1,27 @@
1
1
  module Document
2
2
 
3
3
  class Transaction < Treetop::Runtime::SyntaxNode
4
- def details
5
- elements.last.elements.last.text_value
6
- end
7
-
8
- def policy_numbers
9
- details.scan(/\d{3,}/)
4
+ def to_hash
5
+ base.to_hash.merge(statement.to_hash)
10
6
  end
11
7
  end
12
8
 
13
9
  class All < Treetop::Runtime::SyntaxNode
14
- def all_transactions
15
- elements.map(&:t).map(&:elements).flatten
10
+
11
+ def to_hash
12
+ elements.map(&:to_hash)
16
13
  end
17
14
 
18
- def all_policy_numbers
19
- all_transactions.map(&:policy_numbers).reject(&:empty?)
15
+ def transactions
16
+ elements.flat_map(&:to_hash)
20
17
  end
21
18
 
22
- def all_credit
23
- all_transactions.select { |t| t.base.type.text_value == "C" }
19
+ def transactions_credit
20
+ transactions.select{ |t| t[:type] == :credit}
24
21
  end
25
22
 
26
- def all_debit
27
- all_transactions.select { |t| t.base.type.text_value == "D" }
23
+ def transactions_debit
24
+ transactions.select{ |t| t[:type] == :debit }
28
25
  end
29
26
 
30
27
  # Utility
@@ -33,16 +30,27 @@ module Document
33
30
  end
34
31
  end
35
32
  class Transactions < Treetop::Runtime::SyntaxNode
33
+ def to_hash
34
+ elements.flat_map(&:to_hash)
35
+ end
36
36
  end
37
37
  class Statement < Treetop::Runtime::SyntaxNode
38
38
  end
39
39
  class Record < Treetop::Runtime::SyntaxNode
40
- def t
41
- elements.last
40
+ def to_hash
41
+ elements.select{ |e| e.class == Document::Transactions }.flat_map(&:to_hash)
42
42
  end
43
43
  end
44
44
 
45
45
  class Base < Treetop::Runtime::SyntaxNode
46
+ def to_hash
47
+ {
48
+ valor: valor.text_value,
49
+ account_date: account_date.text_value,
50
+ type: type.val,
51
+ amount: amount.val
52
+ }
53
+ end
46
54
  end
47
55
  class Digit < Treetop::Runtime::SyntaxNode
48
56
  end
@@ -55,6 +63,9 @@ module Document
55
63
  class AccountDate < Treetop::Runtime::SyntaxNode
56
64
  end
57
65
  class Type < Treetop::Runtime::SyntaxNode
66
+ def val
67
+ text_value == 'C' ? :credit : :debit
68
+ end
58
69
  end
59
70
  class Amount < Treetop::Runtime::SyntaxNode
60
71
  def val
@@ -62,11 +73,18 @@ module Document
62
73
  end
63
74
  end
64
75
  class NotImplemented < Treetop::Runtime::SyntaxNode
76
+ def to_hash
77
+ {}
78
+ end
65
79
  end
66
80
  class NewLine < Treetop::Runtime::SyntaxNode
67
81
  end
68
82
 
69
83
  class Date < Treetop::Runtime::SyntaxNode
84
+ def to_hash
85
+ {}
86
+ end
87
+
70
88
  def val
71
89
  text_value.strip[4..-1]
72
90
  end
@@ -80,12 +98,25 @@ module R86
80
98
  class Mark < Treetop::Runtime::SyntaxNode
81
99
  end
82
100
  class Description < Treetop::Runtime::SyntaxNode
101
+ def val
102
+ text_value.strip[3..-1]
103
+ end
83
104
  end
84
105
  class Details < Treetop::Runtime::SyntaxNode
106
+ def val
107
+ text_value.strip[3..-1]
108
+ end
85
109
  end
86
110
  class Detail < Treetop::Runtime::SyntaxNode
87
111
  end
88
112
  class Statement < Treetop::Runtime::SyntaxNode
113
+ def to_hash
114
+ {
115
+ code: code.text_value,
116
+ description: description.val,
117
+ details: details.val
118
+ }
119
+ end
89
120
  end
90
121
  class Code < Treetop::Runtime::SyntaxNode
91
122
  end
@@ -29,7 +29,7 @@ module MT940
29
29
  def self.clean_tree(root_node)
30
30
  return if(root_node.elements.nil?)
31
31
  root_node.elements.delete_if{|node| node.class.name == "Treetop::Runtime::SyntaxNode" }
32
- root_node.elements.delete_if{|node| node.class.name == "Mt940::NewLine" } #remove nls
32
+ root_node.elements.delete_if{|node| node.class.name == "Document::NewLine" } #remove nls
33
33
  root_node.elements.delete_if{|node| node.class.name == "R86::Blank" } #remove nls
34
34
  root_node.elements.each {|node| self.clean_tree(node) }
35
35
  end
@@ -1,3 +1,3 @@
1
1
  module MT940
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
data/mt940parser.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.version = MT940::VERSION
9
9
  spec.authors = ["Georgi Mitrev"]
10
10
  spec.email = ["gvmitrev@gmail.com"]
11
- spec.description = %q{MT940 parser}
11
+ spec.description = %q{(SWIFT)MT940 file parser}
12
12
  spec.summary = %q{Parser for the (SWIFT)-MT940 format}
13
13
  spec.homepage = ""
14
14
  spec.license = "MIT"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mt940parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-08-02 00:00:00.000000000 Z
12
+ date: 2013-08-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: treetop
@@ -75,7 +75,7 @@ dependencies:
75
75
  - - ! '>='
76
76
  - !ruby/object:Gem::Version
77
77
  version: '0'
78
- description: MT940 parser
78
+ description: (SWIFT)MT940 file parser
79
79
  email:
80
80
  - gvmitrev@gmail.com
81
81
  executables: []