total_in 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +20 -0
  3. data/.rspec +3 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +9 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE +22 -0
  8. data/README.md +21 -0
  9. data/Rakefile +1 -0
  10. data/lib/total_in/attribute_methods.rb +62 -0
  11. data/lib/total_in/contexts.rb +54 -0
  12. data/lib/total_in/document.rb +114 -0
  13. data/lib/total_in/line_handlers.rb +35 -0
  14. data/lib/total_in/line_parser.rb +42 -0
  15. data/lib/total_in/line_parsers.rb +80 -0
  16. data/lib/total_in/line_processors.rb +138 -0
  17. data/lib/total_in/parser.rb +48 -0
  18. data/lib/total_in/string_helpers.rb +10 -0
  19. data/lib/total_in/typecaster.rb +18 -0
  20. data/lib/total_in/version.rb +3 -0
  21. data/lib/total_in.rb +8 -0
  22. data/spec/fixtures/total_in_full.txt +61 -0
  23. data/spec/full_file_parse_spec.rb +501 -0
  24. data/spec/spec_helper.rb +20 -0
  25. data/spec/support/shared_examples_for_values_line_parsers.rb +15 -0
  26. data/spec/total_in/line_parsers/account_end_spec.rb +23 -0
  27. data/spec/total_in/line_parsers/account_start_spec.rb +24 -0
  28. data/spec/total_in/line_parsers/addresses_spec.rb +10 -0
  29. data/spec/total_in/line_parsers/deduction_start_spec.rb +50 -0
  30. data/spec/total_in/line_parsers/document_end_spec.rb +15 -0
  31. data/spec/total_in/line_parsers/document_start_spec.rb +32 -0
  32. data/spec/total_in/line_parsers/international_spec.rb +32 -0
  33. data/spec/total_in/line_parsers/locality_spec.rb +23 -0
  34. data/spec/total_in/line_parsers/messages_spec.rb +10 -0
  35. data/spec/total_in/line_parsers/names_spec.rb +11 -0
  36. data/spec/total_in/line_parsers/payment_start_spec.rb +45 -0
  37. data/spec/total_in/line_parsers/reference_numbers_spec.rb +11 -0
  38. data/spec/total_in/line_parsers/sender_account_spec.rb +23 -0
  39. data/spec/total_in/line_processors/account_end_spec.rb +35 -0
  40. data/spec/total_in/line_processors/account_start_spec.rb +50 -0
  41. data/spec/total_in/line_processors/addresses_spec.rb +44 -0
  42. data/spec/total_in/line_processors/deduction_start_spec.rb +54 -0
  43. data/spec/total_in/line_processors/document_end_spec.rb +32 -0
  44. data/spec/total_in/line_processors/document_start_spec.rb +29 -0
  45. data/spec/total_in/line_processors/international_spec.rb +46 -0
  46. data/spec/total_in/line_processors/locality_spec.rb +46 -0
  47. data/spec/total_in/line_processors/messages_spec.rb +25 -0
  48. data/spec/total_in/line_processors/names_spec.rb +45 -0
  49. data/spec/total_in/line_processors/payment_start_spec.rb +53 -0
  50. data/spec/total_in/line_processors/reference_numbers_spec.rb +24 -0
  51. data/spec/total_in/line_processors/sender_account_spec.rb +46 -0
  52. data/spec/total_in_spec.rb +13 -0
  53. data/total-in.gemspec +25 -0
  54. metadata +169 -0
@@ -0,0 +1,53 @@
1
+ require "total_in/contexts"
2
+ require "total_in/line_processors"
3
+
4
+ module TotalIn
5
+ module LineProcessors
6
+ RSpec.describe "PaymentStart" do
7
+ let :line do
8
+ double "Line", attributes: {}, reference_number: "1234567890"
9
+ end
10
+
11
+ let :account do
12
+ Document::Account.new
13
+ end
14
+
15
+ let! :contexts do
16
+ Contexts.new [Document.new, account, Document::Payment.new]
17
+ end
18
+
19
+ it "adds a new payment to the nearest account" do
20
+ payment = Document::Payment.new
21
+ allow(Document::Payment).to receive(:new) { payment }
22
+
23
+ PaymentStart.call line, contexts
24
+
25
+ expect(account.payments).to include payment
26
+ end
27
+
28
+ it "sets the payment as the current context" do
29
+ payment = Document::Payment.new
30
+ allow(Document::Payment).to receive(:new) { payment }
31
+
32
+ new_contexts = PaymentStart.call line, contexts
33
+
34
+ expect(new_contexts.current).to be payment
35
+ end
36
+
37
+ it "assigns the line attributes to the account" do
38
+ payment = Document::Payment.new
39
+ allow(Document::Payment).to receive(:new) { payment }
40
+
41
+ PaymentStart.call line, contexts
42
+
43
+ expect(Document::Payment).to have_received(:new).with(line.attributes)
44
+ end
45
+
46
+ it "adds the line reference number to the payment" do
47
+ new_contexts = PaymentStart.call line, contexts
48
+
49
+ expect(new_contexts.current.reference_numbers).to include "1234567890"
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,24 @@
1
+ require "total_in/contexts"
2
+ require "total_in/line_processors"
3
+
4
+ module TotalIn
5
+ module LineProcessors
6
+ RSpec.describe "ReferenceNumbers" do
7
+ let :line do
8
+ double "Line", values: ["one", "two"]
9
+ end
10
+
11
+ let :current_context do
12
+ double "SomeContext", reference_numbers: ["original"]
13
+ end
14
+
15
+ it "adds the line values to the current context's reference_numbers" do
16
+ contexts = Contexts.new current_context
17
+
18
+ ReferenceNumbers.call line, contexts
19
+
20
+ expect(contexts.current.reference_numbers).to eq ["original", "one", "two"]
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,46 @@
1
+ require "total_in/contexts"
2
+ require "total_in/line_processors"
3
+
4
+ module TotalIn
5
+ module LineProcessors
6
+ RSpec.describe "SenderAccount" do
7
+ let :line do
8
+ double "Line", attributes: {}
9
+ end
10
+
11
+ describe "when the current context is a Document::SenderAccount" do
12
+ it "adds the line values to the sender as name" do
13
+ sender_account = Document::SenderAccount.new
14
+ contexts = Contexts.new sender_account
15
+ allow(sender_account).to receive(:assign_attributes)
16
+
17
+ SenderAccount.call line, contexts
18
+
19
+ expect(sender_account).to have_received(:assign_attributes).with line.attributes
20
+ end
21
+ end
22
+
23
+ describe "when the current context is something else" do
24
+ let! :sender_account do
25
+ Document::SenderAccount.new
26
+ end
27
+
28
+ before do
29
+ allow(Document::SenderAccount).to receive(:new) { sender_account }
30
+ end
31
+
32
+ it "adds a new Document::SenderAccount to the nearest transaction and appends it to the contexts" do
33
+ transaction = Document::Transaction.new
34
+ contexts = Contexts.new transaction
35
+ allow(sender_account).to receive(:assign_attributes)
36
+
37
+ new_contexts = SenderAccount.call line, contexts
38
+
39
+ expect(transaction.sender_account).to eq sender_account
40
+ expect(new_contexts.current).to be sender_account
41
+ expect(sender_account).to have_received(:assign_attributes).with line.attributes
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,13 @@
1
+ require "total_in"
2
+
3
+ RSpec.describe TotalIn do
4
+ describe "#parse" do
5
+ it "returns the parser results" do
6
+ text = "some total-in text"
7
+ parser = double "Parser", result: "result"
8
+ expect(TotalIn::Parser).to receive(:new).with(text) { parser }
9
+
10
+ expect(TotalIn.parse(text)).to eq "result"
11
+ end
12
+ end
13
+ end
data/total-in.gemspec ADDED
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "total_in/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "total_in"
8
+ spec.version = TotalIn::VERSION
9
+ spec.authors = ["Joel Junström"]
10
+ spec.email = ["joel.junstrom@oktavilla.se"]
11
+ spec.summary = %q{Parses Nordea Total-IN and Total-IN Basic files}
12
+ spec.homepage = "https://github.com/Oktavilla/total-in-ruby"
13
+ spec.license = "MIT"
14
+
15
+ spec.required_ruby_version = "~> 2.0"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0")
18
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_development_dependency "bundler", "~> 1.5"
23
+ spec.add_development_dependency "rake"
24
+ spec.add_development_dependency "rspec"
25
+ end
metadata ADDED
@@ -0,0 +1,169 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: total_in
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.0
5
+ platform: ruby
6
+ authors:
7
+ - Joel Junström
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.5'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description:
56
+ email:
57
+ - joel.junstrom@oktavilla.se
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - ".rspec"
64
+ - ".ruby-version"
65
+ - ".travis.yml"
66
+ - Gemfile
67
+ - LICENSE
68
+ - README.md
69
+ - Rakefile
70
+ - lib/total_in.rb
71
+ - lib/total_in/attribute_methods.rb
72
+ - lib/total_in/contexts.rb
73
+ - lib/total_in/document.rb
74
+ - lib/total_in/line_handlers.rb
75
+ - lib/total_in/line_parser.rb
76
+ - lib/total_in/line_parsers.rb
77
+ - lib/total_in/line_processors.rb
78
+ - lib/total_in/parser.rb
79
+ - lib/total_in/string_helpers.rb
80
+ - lib/total_in/typecaster.rb
81
+ - lib/total_in/version.rb
82
+ - spec/fixtures/total_in_full.txt
83
+ - spec/full_file_parse_spec.rb
84
+ - spec/spec_helper.rb
85
+ - spec/support/shared_examples_for_values_line_parsers.rb
86
+ - spec/total_in/line_parsers/account_end_spec.rb
87
+ - spec/total_in/line_parsers/account_start_spec.rb
88
+ - spec/total_in/line_parsers/addresses_spec.rb
89
+ - spec/total_in/line_parsers/deduction_start_spec.rb
90
+ - spec/total_in/line_parsers/document_end_spec.rb
91
+ - spec/total_in/line_parsers/document_start_spec.rb
92
+ - spec/total_in/line_parsers/international_spec.rb
93
+ - spec/total_in/line_parsers/locality_spec.rb
94
+ - spec/total_in/line_parsers/messages_spec.rb
95
+ - spec/total_in/line_parsers/names_spec.rb
96
+ - spec/total_in/line_parsers/payment_start_spec.rb
97
+ - spec/total_in/line_parsers/reference_numbers_spec.rb
98
+ - spec/total_in/line_parsers/sender_account_spec.rb
99
+ - spec/total_in/line_processors/account_end_spec.rb
100
+ - spec/total_in/line_processors/account_start_spec.rb
101
+ - spec/total_in/line_processors/addresses_spec.rb
102
+ - spec/total_in/line_processors/deduction_start_spec.rb
103
+ - spec/total_in/line_processors/document_end_spec.rb
104
+ - spec/total_in/line_processors/document_start_spec.rb
105
+ - spec/total_in/line_processors/international_spec.rb
106
+ - spec/total_in/line_processors/locality_spec.rb
107
+ - spec/total_in/line_processors/messages_spec.rb
108
+ - spec/total_in/line_processors/names_spec.rb
109
+ - spec/total_in/line_processors/payment_start_spec.rb
110
+ - spec/total_in/line_processors/reference_numbers_spec.rb
111
+ - spec/total_in/line_processors/sender_account_spec.rb
112
+ - spec/total_in_spec.rb
113
+ - total-in.gemspec
114
+ homepage: https://github.com/Oktavilla/total-in-ruby
115
+ licenses:
116
+ - MIT
117
+ metadata: {}
118
+ post_install_message:
119
+ rdoc_options: []
120
+ require_paths:
121
+ - lib
122
+ required_ruby_version: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - "~>"
125
+ - !ruby/object:Gem::Version
126
+ version: '2.0'
127
+ required_rubygems_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ requirements: []
133
+ rubyforge_project:
134
+ rubygems_version: 2.2.2
135
+ signing_key:
136
+ specification_version: 4
137
+ summary: Parses Nordea Total-IN and Total-IN Basic files
138
+ test_files:
139
+ - spec/fixtures/total_in_full.txt
140
+ - spec/full_file_parse_spec.rb
141
+ - spec/spec_helper.rb
142
+ - spec/support/shared_examples_for_values_line_parsers.rb
143
+ - spec/total_in/line_parsers/account_end_spec.rb
144
+ - spec/total_in/line_parsers/account_start_spec.rb
145
+ - spec/total_in/line_parsers/addresses_spec.rb
146
+ - spec/total_in/line_parsers/deduction_start_spec.rb
147
+ - spec/total_in/line_parsers/document_end_spec.rb
148
+ - spec/total_in/line_parsers/document_start_spec.rb
149
+ - spec/total_in/line_parsers/international_spec.rb
150
+ - spec/total_in/line_parsers/locality_spec.rb
151
+ - spec/total_in/line_parsers/messages_spec.rb
152
+ - spec/total_in/line_parsers/names_spec.rb
153
+ - spec/total_in/line_parsers/payment_start_spec.rb
154
+ - spec/total_in/line_parsers/reference_numbers_spec.rb
155
+ - spec/total_in/line_parsers/sender_account_spec.rb
156
+ - spec/total_in/line_processors/account_end_spec.rb
157
+ - spec/total_in/line_processors/account_start_spec.rb
158
+ - spec/total_in/line_processors/addresses_spec.rb
159
+ - spec/total_in/line_processors/deduction_start_spec.rb
160
+ - spec/total_in/line_processors/document_end_spec.rb
161
+ - spec/total_in/line_processors/document_start_spec.rb
162
+ - spec/total_in/line_processors/international_spec.rb
163
+ - spec/total_in/line_processors/locality_spec.rb
164
+ - spec/total_in/line_processors/messages_spec.rb
165
+ - spec/total_in/line_processors/names_spec.rb
166
+ - spec/total_in/line_processors/payment_start_spec.rb
167
+ - spec/total_in/line_processors/reference_numbers_spec.rb
168
+ - spec/total_in/line_processors/sender_account_spec.rb
169
+ - spec/total_in_spec.rb