total_in 0.5.1 → 1.0.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.
- checksums.yaml +4 -4
- data/README.md +1 -0
- data/lib/total_in/document.rb +6 -2
- data/lib/total_in/file_format_validator.rb +19 -0
- data/lib/total_in/line_handlers.rb +86 -22
- data/lib/total_in/line_parser.rb +1 -1
- data/lib/total_in/parser.rb +40 -17
- data/lib/total_in/typecaster.rb +4 -3
- data/lib/total_in/version.rb +1 -1
- data/spec/fixtures/{total_in_full.txt → total_in_full_latin_1.txt} +61 -61
- data/spec/full_file_parse_spec.rb +4 -2
- data/spec/total_in/document_spec.rb +16 -1
- data/spec/total_in/line_parsers/document_start_spec.rb +1 -1
- data/spec/total_in/parser_spec.rb +22 -0
- metadata +7 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 353b198563a1b0e9a48706e4c84a43a259cd4e05
|
4
|
+
data.tar.gz: 7b88983001ccc29990a62b3bae56c84995082aec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ea026300e106f9ed6f8b18fbd3f2882d68e87c26a51b3e2c66cd90cdb218c0da56badaf595bc0e552ba11c8ba51e135daa71962e205a5368cad954a8906de9c
|
7
|
+
data.tar.gz: 9a35cb35e78bae51be28b160e44625c756e902496d8c90462613a3e289b4f187bc707715db57d363129f0c512ee436d928d9b3e3d52d421f94c585cab6991c76
|
data/README.md
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
[](https://codeclimate.com/github/Oktavilla/total-in-ruby)
|
4
4
|
[](https://codeclimate.com/github/Oktavilla/total-in-ruby)
|
5
5
|
|
6
|
+
Parses transaction files in the [TotalIn format](http://www.nordea.se/Images/39-16101/postbeskrivning-total-in-eng.pdf).
|
6
7
|
|
7
8
|
## Usage
|
8
9
|
|
data/lib/total_in/document.rb
CHANGED
@@ -15,12 +15,16 @@ module TotalIn
|
|
15
15
|
@accounts ||= []
|
16
16
|
end
|
17
17
|
|
18
|
+
def transaction_date
|
19
|
+
accounts.map(&:date).compact.first
|
20
|
+
end
|
21
|
+
|
18
22
|
def payments
|
19
|
-
accounts.
|
23
|
+
accounts.flat_map(&:payments)
|
20
24
|
end
|
21
25
|
|
22
26
|
def deductions
|
23
|
-
accounts.
|
27
|
+
accounts.flat_map(&:deductions)
|
24
28
|
end
|
25
29
|
|
26
30
|
class Account
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "total_in/line_parser"
|
2
|
+
module TotalIn
|
3
|
+
class FileFormatValidator < LineParser
|
4
|
+
field :record_type, 0..1, :raw
|
5
|
+
field :file_type, 36..38
|
6
|
+
|
7
|
+
def valid?
|
8
|
+
errors.empty?
|
9
|
+
end
|
10
|
+
|
11
|
+
def errors
|
12
|
+
errors = []
|
13
|
+
errors << "Must start with 00 (was ”#{record_type}”)" if record_type != "00"
|
14
|
+
errors << "Must be of type TL1 (was ”#{file_type}”" if file_type != "TL1"
|
15
|
+
|
16
|
+
errors
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -3,33 +3,97 @@ require "total_in/line_processors"
|
|
3
3
|
|
4
4
|
module TotalIn
|
5
5
|
module LineHandlers
|
6
|
+
def self.mapping
|
7
|
+
{
|
8
|
+
"00" => self.document_start,
|
9
|
+
"99" => self.document_end,
|
10
|
+
"10" => self.account_start,
|
11
|
+
"90" => self.account_end,
|
12
|
+
"20" => self.payment_start,
|
13
|
+
"25" => self.deduction_start,
|
14
|
+
"30" => self.reference_numbers,
|
15
|
+
"40" => self.messages,
|
16
|
+
"50" => self.sender_names,
|
17
|
+
"51" => self.sender_address,
|
18
|
+
"52" => self.sender_locality,
|
19
|
+
"60" => self.sender_account_start,
|
20
|
+
"61" => self.sender_account_names,
|
21
|
+
"62" => self.sender_account_address,
|
22
|
+
"63" => self.sender_account_locality,
|
23
|
+
"70" => self.international
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.document_start
|
28
|
+
Handler.new LineParsers::DocumentStart, LineProcessors::DocumentStart
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.document_end
|
32
|
+
Handler.new LineParsers::DocumentEnd, LineProcessors::DocumentEnd
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.account_start
|
36
|
+
Handler.new LineParsers::AccountStart, LineProcessors::AccountStart
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.account_end
|
40
|
+
Handler.new LineParsers::AccountEnd, LineProcessors::AccountEnd
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.payment_start
|
44
|
+
Handler.new LineParsers::PaymentStart, LineProcessors::PaymentStart
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.deduction_start
|
48
|
+
Handler.new LineParsers::DeductionStart, LineProcessors::DeductionStart
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.reference_numbers
|
52
|
+
Handler.new LineParsers::ReferenceNumbers, LineProcessors::ReferenceNumbers
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.messages
|
56
|
+
Handler.new LineParsers::Messages, LineProcessors::Messages
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.sender_names
|
60
|
+
Handler.new LineParsers::Names, LineProcessors::Names.new(Document::Sender)
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.sender_address
|
64
|
+
Handler.new LineParsers::Addresses, LineProcessors::Addresses.new(Document::Sender)
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.sender_locality
|
68
|
+
Handler.new LineParsers::Locality, LineProcessors::Locality.new(Document::Sender)
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.sender_account_start
|
72
|
+
Handler.new LineParsers::SenderAccount, LineProcessors::SenderAccount
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.sender_account_names
|
76
|
+
Handler.new LineParsers::Names, LineProcessors::Names.new(Document::SenderAccount)
|
77
|
+
end
|
78
|
+
|
79
|
+
def self.sender_account_address
|
80
|
+
Handler.new LineParsers::Addresses, LineProcessors::Addresses.new(Document::SenderAccount)
|
81
|
+
end
|
82
|
+
|
83
|
+
def self.sender_account_locality
|
84
|
+
Handler.new LineParsers::Locality, LineProcessors::Locality.new(Document::SenderAccount)
|
85
|
+
end
|
86
|
+
|
87
|
+
def self.international
|
88
|
+
Handler.new LineParsers::International, LineProcessors::International
|
89
|
+
end
|
90
|
+
|
6
91
|
Handler = Struct.new :parser, :processor do
|
7
|
-
def
|
92
|
+
def process line, contexts
|
8
93
|
line_parser = self.parser.new(line)
|
9
94
|
|
10
95
|
processor.call line_parser, contexts
|
11
96
|
end
|
12
97
|
end
|
13
|
-
|
14
|
-
def self.all
|
15
|
-
{
|
16
|
-
"00" => Handler.new(LineParsers::DocumentStart, LineProcessors::DocumentStart),
|
17
|
-
"99" => Handler.new(LineParsers::DocumentEnd, LineProcessors::DocumentEnd),
|
18
|
-
"10" => Handler.new(LineParsers::AccountStart, LineProcessors::AccountStart),
|
19
|
-
"90" => Handler.new(LineParsers::AccountEnd, LineProcessors::AccountEnd),
|
20
|
-
"20" => Handler.new(LineParsers::PaymentStart, LineProcessors::PaymentStart),
|
21
|
-
"25" => Handler.new(LineParsers::DeductionStart, LineProcessors::DeductionStart),
|
22
|
-
"30" => Handler.new(LineParsers::ReferenceNumbers, LineProcessors::ReferenceNumbers),
|
23
|
-
"40" => Handler.new(LineParsers::Messages, LineProcessors::Messages),
|
24
|
-
"50" => Handler.new(LineParsers::Names, LineProcessors::Names.new(Document::Sender)),
|
25
|
-
"51" => Handler.new(LineParsers::Addresses, LineProcessors::Addresses.new(Document::Sender)),
|
26
|
-
"52" => Handler.new(LineParsers::Locality, LineProcessors::Locality.new(Document::Sender)),
|
27
|
-
"60" => Handler.new(LineParsers::SenderAccount, LineProcessors::SenderAccount),
|
28
|
-
"61" => Handler.new(LineParsers::Names, LineProcessors::Names.new(Document::SenderAccount)),
|
29
|
-
"62" => Handler.new(LineParsers::Addresses, LineProcessors::Addresses.new(Document::SenderAccount)),
|
30
|
-
"63" => Handler.new(LineParsers::Locality, LineProcessors::Locality.new(Document::SenderAccount)),
|
31
|
-
"70" => Handler.new(LineParsers::International, LineProcessors::International)
|
32
|
-
}
|
33
|
-
end
|
34
98
|
end
|
35
99
|
end
|
data/lib/total_in/line_parser.rb
CHANGED
data/lib/total_in/parser.rb
CHANGED
@@ -1,48 +1,71 @@
|
|
1
|
+
require "total_in/file_format_validator"
|
1
2
|
require "total_in/line_handlers"
|
2
3
|
require "total_in/contexts"
|
3
4
|
|
4
5
|
module TotalIn
|
6
|
+
class InvalidFileFormatError < ArgumentError; end;
|
7
|
+
|
5
8
|
class Parser
|
6
|
-
attr_reader :
|
9
|
+
attr_reader :file
|
7
10
|
|
8
|
-
|
9
|
-
|
11
|
+
# Parser.new accepts a File instance or a String
|
12
|
+
# A InvalidFileFormatError will be raised if file isn't in the TotalIn format
|
13
|
+
def initialize file
|
14
|
+
@file = file
|
15
|
+
validate_file_format
|
10
16
|
end
|
11
17
|
|
12
18
|
def result
|
13
|
-
|
19
|
+
parse_lines(Contexts.new).result
|
20
|
+
end
|
21
|
+
|
22
|
+
protected
|
14
23
|
|
15
|
-
|
24
|
+
def lines
|
25
|
+
@lines ||= file.each_line
|
16
26
|
end
|
17
27
|
|
18
28
|
private
|
19
29
|
|
20
|
-
def
|
21
|
-
|
22
|
-
|
23
|
-
|
30
|
+
def validate_file_format
|
31
|
+
validator = FileFormatValidator.new first_line
|
32
|
+
raise InvalidFileFormatError.new(validator.errors.join(", ")) unless validator.valid?
|
33
|
+
end
|
34
|
+
|
35
|
+
def parse_lines contexts
|
36
|
+
begin
|
37
|
+
parse_lines parse_line(self.lines.next, contexts)
|
38
|
+
rescue StopIteration
|
39
|
+
self.lines.rewind # Ensure we do not bomb out when calling result multiple times
|
24
40
|
contexts
|
25
41
|
end
|
26
42
|
end
|
27
43
|
|
44
|
+
# Look up a matching handler for the line and process it
|
45
|
+
# The process method on a handler always returns a Contexts object
|
28
46
|
def parse_line line, contexts
|
47
|
+
line = line.encode Encoding::UTF_8 if encode_lines?
|
48
|
+
|
29
49
|
handler = handler_for_line line
|
30
50
|
|
31
|
-
handler.
|
51
|
+
handler.process line, contexts
|
32
52
|
end
|
33
53
|
|
34
54
|
def handler_for_line line
|
35
|
-
|
55
|
+
LineHandlers.mapping.fetch line[0..1]
|
36
56
|
end
|
37
57
|
|
38
|
-
def
|
39
|
-
|
58
|
+
def encode_lines?
|
59
|
+
first_line.encoding != Encoding::UTF_8
|
40
60
|
end
|
41
61
|
|
42
|
-
def
|
43
|
-
@
|
44
|
-
|
62
|
+
def first_line
|
63
|
+
@first_line ||= begin
|
64
|
+
line = self.lines.peek
|
65
|
+
self.lines.rewind # peek seems to move the pointer when file is an actual File object
|
45
66
|
|
46
|
-
|
67
|
+
line
|
68
|
+
end
|
69
|
+
end
|
47
70
|
end
|
48
71
|
end
|
data/lib/total_in/typecaster.rb
CHANGED
@@ -9,9 +9,10 @@ module TotalIn
|
|
9
9
|
def self.casters
|
10
10
|
{
|
11
11
|
integer: ->(value) { value.to_i },
|
12
|
-
time: ->(value) { Time.
|
13
|
-
date: ->(value) { Date.
|
14
|
-
string: ->(value) { value unless value.match(/\A0+\Z/) }
|
12
|
+
time: ->(value) { Time.strptime(value, "%Y%m%d%H%M%S%N") },
|
13
|
+
date: ->(value) { Date.strptime(value, "%Y%m%d") },
|
14
|
+
string: ->(value) { value unless value.match(/\A0+\Z/) },
|
15
|
+
raw: ->(value) { value }
|
15
16
|
}
|
16
17
|
end
|
17
18
|
end
|
data/lib/total_in/version.rb
CHANGED
@@ -1,61 +1,61 @@
|
|
1
|
-
00TI222222 2011102504133012345601TL1TOTALIN
|
2
|
-
1010181 SEK20111024
|
3
|
-
2038952344444 00000000030255022222333334444451
|
4
|
-
3038952345678 38952145778
|
5
|
-
40FAKTURANR:38952344444 INTERN REF: 9780858
|
6
|
-
40FAKTURANR:38952345678 38952145778ABC
|
7
|
-
601234567 19999999999
|
8
|
-
61TESTBOLAGET AB
|
9
|
-
62GATAN 12
|
10
|
-
6312345 TESTSTAD
|
11
|
-
200000000000000000000000000 00000000042973522222333334444455
|
12
|
-
40TACK
|
13
|
-
50F
|
14
|
-
6099999999
|
15
|
-
61F
|
16
|
-
62GATAN 7
|
17
|
-
6388888 TESTORTEN
|
18
|
-
200000000000000000000000000 0000000002109002222233333444446734523455
|
19
|
-
40BETALNING
|
20
|
-
50TESTFABRIKEN AB
|
21
|
-
51GATAN 22
|
22
|
-
5211111 TESTVIKEN
|
23
|
-
6098765433 29999999999
|
24
|
-
61NORDEA BANK AB
|
25
|
-
6310571 STOCKHOLM
|
26
|
-
200000000000000000000000000 00000000014836522222333334444472
|
27
|
-
601222211 19999999999
|
28
|
-
2038952345555 00000000088000022222333334444423
|
29
|
-
40FAKT 38952345555,FAKTURANR
|
30
|
-
602232567 19999999999
|
31
|
-
70000000000000000 000000000100000EUR000000088000
|
32
|
-
25987654123 00000000005255022222333334444457
|
33
|
-
40FAKTURA NR: 987654123 ABC KUNDNR: 123
|
34
|
-
40
|
35
|
-
601234567 19999999999
|
36
|
-
61TESTBOLAGET AB
|
37
|
-
62GATAN 12
|
38
|
-
6312345 TESTSTAD
|
39
|
-
90000000060000000000191900020111024001
|
40
|
-
109690017 SEK20111024
|
41
|
-
200000000000000000000000000 00000000092343411111222223333344
|
42
|
-
40BETALNING AVSEENDE
|
43
|
-
601234567 19999999999
|
44
|
-
61TESTBOLAGET AB
|
45
|
-
62GATAN 12
|
46
|
-
6312345 TESTSTAD
|
47
|
-
2038952678900 00000000001050022222333334444477
|
48
|
-
50TESTF
|
49
|
-
6054321 19999999999
|
50
|
-
61TESTF
|
51
|
-
62TESTV 55
|
52
|
-
6312345 TESTSTAD
|
53
|
-
2038952678888 00000000002050022222333334444422
|
54
|
-
3038952345999
|
55
|
-
40FAKTNR=38952348888 OCH FAKTNR=38952345999
|
56
|
-
6098765555 19999999999
|
57
|
-
61TESTER AB
|
58
|
-
62V
|
59
|
-
6388888 TESTORTEN
|
60
|
-
90000000030000000000095443420111024001
|
61
|
-
99000000000000061
|
1
|
+
00TI222222 2011102504133012345601TL1TOTALIN
|
2
|
+
1010181 SEK20111024
|
3
|
+
2038952344444 00000000030255022222333334444451
|
4
|
+
3038952345678 38952145778
|
5
|
+
40FAKTURANR:38952344444 INTERN REF: 9780858
|
6
|
+
40FAKTURANR:38952345678 38952145778ABC
|
7
|
+
601234567 19999999999
|
8
|
+
61TESTBOLAGET AB
|
9
|
+
62GATAN 12
|
10
|
+
6312345 TESTSTAD
|
11
|
+
200000000000000000000000000 00000000042973522222333334444455
|
12
|
+
40TACK F�R L�NET
|
13
|
+
50F�RETAGET AB FRISKV�RDAVD.
|
14
|
+
6099999999
|
15
|
+
61F�RETAGET AB
|
16
|
+
62GATAN 7
|
17
|
+
6388888 TESTORTEN
|
18
|
+
200000000000000000000000000 0000000002109002222233333444446734523455
|
19
|
+
40BETALNING F�R VARA 123
|
20
|
+
50TESTFABRIKEN AB
|
21
|
+
51GATAN 22
|
22
|
+
5211111 TESTVIKEN
|
23
|
+
6098765433 29999999999
|
24
|
+
61NORDEA BANK AB
|
25
|
+
6310571 STOCKHOLM
|
26
|
+
200000000000000000000000000 00000000014836522222333334444472
|
27
|
+
601222211 19999999999
|
28
|
+
2038952345555 00000000088000022222333334444423
|
29
|
+
40FAKT 38952345555,FAKTURANR
|
30
|
+
602232567 19999999999
|
31
|
+
70000000000000000 000000000100000EUR000000088000
|
32
|
+
25987654123 00000000005255022222333334444457
|
33
|
+
40FAKTURA NR: 987654123 ABC KUNDNR: 123
|
34
|
+
40�TERBETALNING
|
35
|
+
601234567 19999999999
|
36
|
+
61TESTBOLAGET AB
|
37
|
+
62GATAN 12
|
38
|
+
6312345 TESTSTAD
|
39
|
+
90000000060000000000191900020111024001
|
40
|
+
109690017 SEK20111024
|
41
|
+
200000000000000000000000000 00000000092343411111222223333344
|
42
|
+
40BETALNING AVSEENDE K�P 110902
|
43
|
+
601234567 19999999999
|
44
|
+
61TESTBOLAGET AB
|
45
|
+
62GATAN 12
|
46
|
+
6312345 TESTSTAD
|
47
|
+
2038952678900 00000000001050022222333334444477
|
48
|
+
50TESTF�RETAG ENHET 2.A
|
49
|
+
6054321 19999999999
|
50
|
+
61TESTF�RETAG
|
51
|
+
62TESTV 55
|
52
|
+
6312345 TESTSTAD
|
53
|
+
2038952678888 00000000002050022222333334444422
|
54
|
+
3038952345999
|
55
|
+
40FAKTNR=38952348888 OCH FAKTNR=38952345999
|
56
|
+
6098765555 19999999999
|
57
|
+
61TESTER AB
|
58
|
+
62V�GEN 1
|
59
|
+
6388888 TESTORTEN
|
60
|
+
90000000030000000000095443420111024001
|
61
|
+
99000000000000061
|
@@ -3,7 +3,9 @@ require "total_in"
|
|
3
3
|
RSpec.describe TotalIn do
|
4
4
|
describe "parse" do
|
5
5
|
before :all do
|
6
|
-
|
6
|
+
File.open File.join(__dir__, "fixtures/total_in_full_latin_1.txt"), encoding: "iso-8859-1" do |file|
|
7
|
+
@document = TotalIn.parse file
|
8
|
+
end
|
7
9
|
end
|
8
10
|
|
9
11
|
let :document do
|
@@ -12,7 +14,7 @@ RSpec.describe TotalIn do
|
|
12
14
|
|
13
15
|
it "find the document meta data" do
|
14
16
|
expect(document.id).to eq "TI222222"
|
15
|
-
expect(document.created_at.strftime("%Y-%m-%d %H:%M:%S")).to eq "2011-10-25
|
17
|
+
expect(document.created_at.strftime("%Y-%m-%d %H:%M:%S")).to eq "2011-10-25 04:13:30"
|
16
18
|
expect(document.delivery_number).to eq 1
|
17
19
|
expect(document.file_type).to eq "TL1"
|
18
20
|
expect(document.name).to eq "TOTALIN"
|
@@ -1,5 +1,21 @@
|
|
1
|
+
require "total_in/document"
|
2
|
+
|
1
3
|
module TotalIn
|
2
4
|
RSpec.describe Document do
|
5
|
+
describe "#transaction_date" do
|
6
|
+
it "delegates to the first account date it finds" do
|
7
|
+
document = Document.new
|
8
|
+
document.accounts << Document::Account.new
|
9
|
+
document.accounts << Document::Account.new(date: "some date")
|
10
|
+
|
11
|
+
expect(document.transaction_date).to eq "some date"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "returns nil if there are no account dates" do
|
15
|
+
expect(Document.new.transaction_date).to be nil
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
3
19
|
describe "#payments" do
|
4
20
|
it "returns payments from all accounts" do
|
5
21
|
document = Document.new
|
@@ -33,7 +49,6 @@ module TotalIn
|
|
33
49
|
document.accounts << account_two
|
34
50
|
|
35
51
|
expect(document.deductions).to eq [deduction_one, deduction_two]
|
36
|
-
|
37
52
|
end
|
38
53
|
end
|
39
54
|
end
|
@@ -13,7 +13,7 @@ module TotalIn
|
|
13
13
|
|
14
14
|
it "extracts the created at timestamp" do
|
15
15
|
expect(document_start.created_at).to be_a Time
|
16
|
-
expect(document_start.created_at.strftime("%Y-%m-%d %H:%M:%S")).to eq "2011-10-25
|
16
|
+
expect(document_start.created_at.strftime("%Y-%m-%d %H:%M:%S")).to eq "2011-10-25 04:13:30"
|
17
17
|
end
|
18
18
|
|
19
19
|
it "parses the deliver number" do
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require "total_in/parser"
|
2
|
+
|
3
|
+
module TotalIn
|
4
|
+
RSpec.describe Parser do
|
5
|
+
describe "ensuring the file is valid" do
|
6
|
+
it "accepts a valid file" do
|
7
|
+
valid_file = "00TI222222 2011102504133012345601TL1TOTALIN "
|
8
|
+
expect{ Parser.new(valid_file) }.to_not raise_error
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should start with 00" do
|
12
|
+
invalid_file = "99TI222222 2011102504133012345601TL1TOTALIN "
|
13
|
+
expect{ Parser.new(invalid_file) }.to raise_error{ TotalIn::InvalidFileFormatError }
|
14
|
+
end
|
15
|
+
|
16
|
+
it "expects the TL1 file type indicator" do
|
17
|
+
invalid_file = "00TI222222 2011102504133012345601TL2TOTALIN "
|
18
|
+
expect{ Parser.new(invalid_file) }.to raise_error{ TotalIn::InvalidFileFormatError }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: total_in
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joel Junström
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -71,6 +71,7 @@ files:
|
|
71
71
|
- lib/total_in/attribute_methods.rb
|
72
72
|
- lib/total_in/contexts.rb
|
73
73
|
- lib/total_in/document.rb
|
74
|
+
- lib/total_in/file_format_validator.rb
|
74
75
|
- lib/total_in/line_handlers.rb
|
75
76
|
- lib/total_in/line_parser.rb
|
76
77
|
- lib/total_in/line_parsers.rb
|
@@ -79,7 +80,7 @@ files:
|
|
79
80
|
- lib/total_in/string_helpers.rb
|
80
81
|
- lib/total_in/typecaster.rb
|
81
82
|
- lib/total_in/version.rb
|
82
|
-
- spec/fixtures/
|
83
|
+
- spec/fixtures/total_in_full_latin_1.txt
|
83
84
|
- spec/full_file_parse_spec.rb
|
84
85
|
- spec/spec_helper.rb
|
85
86
|
- spec/support/shared_examples_for_values_line_parsers.rb
|
@@ -110,6 +111,7 @@ files:
|
|
110
111
|
- spec/total_in/line_processors/payment_start_spec.rb
|
111
112
|
- spec/total_in/line_processors/reference_numbers_spec.rb
|
112
113
|
- spec/total_in/line_processors/sender_account_spec.rb
|
114
|
+
- spec/total_in/parser_spec.rb
|
113
115
|
- spec/total_in_spec.rb
|
114
116
|
- total-in.gemspec
|
115
117
|
homepage: https://github.com/Oktavilla/total-in-ruby
|
@@ -137,7 +139,7 @@ signing_key:
|
|
137
139
|
specification_version: 4
|
138
140
|
summary: Parses Nordea Total-IN and Total-IN Basic files
|
139
141
|
test_files:
|
140
|
-
- spec/fixtures/
|
142
|
+
- spec/fixtures/total_in_full_latin_1.txt
|
141
143
|
- spec/full_file_parse_spec.rb
|
142
144
|
- spec/spec_helper.rb
|
143
145
|
- spec/support/shared_examples_for_values_line_parsers.rb
|
@@ -168,4 +170,5 @@ test_files:
|
|
168
170
|
- spec/total_in/line_processors/payment_start_spec.rb
|
169
171
|
- spec/total_in/line_processors/reference_numbers_spec.rb
|
170
172
|
- spec/total_in/line_processors/sender_account_spec.rb
|
173
|
+
- spec/total_in/parser_spec.rb
|
171
174
|
- spec/total_in_spec.rb
|