ynab_convert 1.0.3 → 1.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/Gemfile.lock +1 -1
- data/bin/ynab_convert +0 -1
- data/lib/ynab_convert/processor/base.rb +6 -5
- data/lib/ynab_convert/processor/n26.rb +0 -15
- data/lib/ynab_convert/processor/ubs_chequing.rb +16 -2
- data/lib/ynab_convert/version.rb +1 -1
- data/lib/ynab_convert.rb +0 -1
- data/ynab_convert.gemspec +15 -0
- metadata +12 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 697f0d80eaec169e83bea48407e9d00c1b000a362aaa6147160be65bafef72a7
|
4
|
+
data.tar.gz: 8e45ffa5ec9094c54057ebba3f241c00764fc0e256ec19bdfa0d9395f590a156
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8150a18508c46b6267b38ccf56ff6b542e82df49100c4fff164959a24445a36e8271cfca6bd07abbc583f76d372bfc77f9ab830a88dd9e37eb5d95af15ab6ef5
|
7
|
+
data.tar.gz: 7490a9741e4bf27fd21e526fe4aff6c777cca8882f64a9558ceb698f16b7c080f92ae24ebf136a21c3768f5e76077c4ccbe6536a81cdc0cd0dec1453e279a40d
|
data/.travis.yml
CHANGED
@@ -3,12 +3,12 @@ language: ruby
|
|
3
3
|
cache: bundler
|
4
4
|
rvm:
|
5
5
|
- 2.6
|
6
|
+
- 2.7
|
6
7
|
before_install: gem install bundler
|
7
8
|
|
8
9
|
jobs:
|
9
10
|
include:
|
10
11
|
- stage: test
|
11
|
-
rvm: 2.6
|
12
12
|
script: echo "Running tests for $(ruby -v)..." && bundle exec rake ci
|
13
13
|
- stage: gem release
|
14
14
|
rvm: 2.6
|
data/Gemfile.lock
CHANGED
data/bin/ynab_convert
CHANGED
@@ -5,7 +5,8 @@ require 'csv'
|
|
5
5
|
require 'ynab_convert/logger'
|
6
6
|
|
7
7
|
module Processor
|
8
|
-
# Base class for a Processor, all processors must inherit from it
|
8
|
+
# Base class for a Processor, all processors must inherit from it.
|
9
|
+
|
9
10
|
# rubocop:disable Metrics/ClassLength
|
10
11
|
class Base
|
11
12
|
include YnabLogger
|
@@ -13,8 +14,8 @@ module Processor
|
|
13
14
|
|
14
15
|
attr_reader :loader_options
|
15
16
|
|
16
|
-
# @option
|
17
|
-
# @option
|
17
|
+
# @option options [String] :file Path to the CSV file to process
|
18
|
+
# @option options [Symbol] :format YNAB4 format to use, one of :flows or
|
18
19
|
# :amounts. :flows is useful for CSVs with separate debit and credit
|
19
20
|
# columns, :amounts is for CSVs with only one amount columns and +/-
|
20
21
|
# numbers. See
|
@@ -140,8 +141,8 @@ module Processor
|
|
140
141
|
logger.debug "Will write to `#{temp_filename}'"
|
141
142
|
|
142
143
|
logger.debug(loader_options)
|
143
|
-
CSV.open(temp_filename, 'wb', output_options) do |converted|
|
144
|
-
CSV.foreach(@file, 'rb', loader_options) do |row|
|
144
|
+
CSV.open(temp_filename, 'wb', **output_options) do |converted|
|
145
|
+
CSV.foreach(@file, 'rb', **loader_options) do |row|
|
145
146
|
logger.debug "Parsing row: `#{row.to_h}'"
|
146
147
|
# Some rows don't contain valid or useful data
|
147
148
|
catch :skip_row do
|
@@ -2,21 +2,6 @@
|
|
2
2
|
|
3
3
|
module Processor
|
4
4
|
# Processes CSV files from N26
|
5
|
-
#
|
6
|
-
# An example of how to implement a custom processor
|
7
|
-
# Processes CSV files with this format:
|
8
|
-
# <<~ROWS
|
9
|
-
# "Date","Payee","Memo","Outflow","Inflow"
|
10
|
-
# "23/12/2019","coaxial","","1000000.00",""
|
11
|
-
# "30/12/2019","Santa","","50000.00",""
|
12
|
-
# "02/02/2020","Someone Else","","45.00",""
|
13
|
-
# ROWS
|
14
|
-
# The file name for the processor should be the institution name in
|
15
|
-
# camel case. It's ok to skip "Bank" or "Credit Union" when naming the file
|
16
|
-
# if it's redundant. For instance, this parser is for "Example Bank" but it's
|
17
|
-
# named "example.rb", its corresponding spec is
|
18
|
-
# "spec/example_processor_spec.rb" and its fixture would be
|
19
|
-
# "spec/fixtures/example.csv"
|
20
5
|
class N26 < Processor::Base
|
21
6
|
# @option options [String] :file Path to the CSV file to process
|
22
7
|
def initialize(options)
|
@@ -59,12 +59,26 @@ module Processor
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def transaction_payee(row)
|
62
|
-
# Transaction description is spread over 3 columns
|
62
|
+
# Transaction description is spread over 3 columns.
|
63
|
+
# Moreover, UBS thought wise to append a bunch of junk information after
|
64
|
+
# the transaction details within the third description field. *Most* of
|
65
|
+
# this junk starts after the meaningful data and starts with ", OF",
|
66
|
+
# ", ON", ", ESR", ", QRR", two digits then five groups of five digits
|
67
|
+
# then ", TN" so we discard it; YNAB4 being unable to automatically
|
68
|
+
# categorize new transactions at the same store/payee because the payee
|
69
|
+
# always looks different (thanks to the variable nature of the appended
|
70
|
+
# junk).
|
71
|
+
# See `spec/fixtures/ubs_chequing/statement.csv` L2 and L18--22
|
72
|
+
|
73
|
+
# rubocop:disable Metrics/LineLength
|
74
|
+
junk_desc_regex = /, (O[FN]|ESR|QRR|\d{2} \d{5} \d{5} \d{5} \d{5} \d{5}, TN)/
|
75
|
+
# rubocop:enable Metrics/LineLength
|
76
|
+
|
63
77
|
[
|
64
78
|
row[headers[:payee_line_1]],
|
65
79
|
row[headers[:payee_line_2]],
|
66
80
|
row[headers[:payee_line_3]]
|
67
|
-
].join(' ')
|
81
|
+
].join(' ').split(junk_desc_regex).first
|
68
82
|
end
|
69
83
|
|
70
84
|
def register_custom_converters
|
data/lib/ynab_convert/version.rb
CHANGED
data/lib/ynab_convert.rb
CHANGED
data/ynab_convert.gemspec
CHANGED
@@ -13,6 +13,21 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.summary = 'Convert online banking CSV files to YNAB 4 format.'
|
14
14
|
spec.homepage = 'https://github.com/coaxial/ynab_convert'
|
15
15
|
spec.license = 'MIT'
|
16
|
+
spec.description = <<~DESC
|
17
|
+
Utility to convert CSV statements into the YNAB4 format for easier
|
18
|
+
transation import. Supports several banks and can easily be extended to
|
19
|
+
add more.
|
20
|
+
DESC
|
21
|
+
|
22
|
+
spec.required_ruby_version = '~> 2.6'
|
23
|
+
|
24
|
+
spec.metadata = {
|
25
|
+
'bug_tracker_uri' => 'https://github.com/coaxial/ynab_convert/issues',
|
26
|
+
'documentation_uri' => 'https://rubydoc.info/github/coaxial/ynab_convert/master',
|
27
|
+
'homepage_uri' => 'https://github.com/coaxial/ynab_convert',
|
28
|
+
'source_code_uri' => 'https://github.com/coaxial/ynab_convert'
|
29
|
+
}
|
30
|
+
spec.post_install_message = 'Happy budgetting!'
|
16
31
|
|
17
32
|
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
18
33
|
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ynab_convert
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- coaxial
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-03-
|
11
|
+
date: 2022-03-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -192,7 +192,10 @@ dependencies:
|
|
192
192
|
- - ">="
|
193
193
|
- !ruby/object:Gem::Version
|
194
194
|
version: '0'
|
195
|
-
description:
|
195
|
+
description: |
|
196
|
+
Utility to convert CSV statements into the YNAB4 format for easier
|
197
|
+
transation import. Supports several banks and can easily be extended to
|
198
|
+
add more.
|
196
199
|
email:
|
197
200
|
- hi@64b.it
|
198
201
|
executables:
|
@@ -236,18 +239,20 @@ homepage: https://github.com/coaxial/ynab_convert
|
|
236
239
|
licenses:
|
237
240
|
- MIT
|
238
241
|
metadata:
|
239
|
-
|
242
|
+
bug_tracker_uri: https://github.com/coaxial/ynab_convert/issues
|
243
|
+
documentation_uri: https://rubydoc.info/github/coaxial/ynab_convert/master
|
240
244
|
homepage_uri: https://github.com/coaxial/ynab_convert
|
241
245
|
source_code_uri: https://github.com/coaxial/ynab_convert
|
242
|
-
|
246
|
+
allowed_push_host: https://rubygems.org
|
247
|
+
post_install_message: Happy budgetting!
|
243
248
|
rdoc_options: []
|
244
249
|
require_paths:
|
245
250
|
- lib
|
246
251
|
required_ruby_version: !ruby/object:Gem::Requirement
|
247
252
|
requirements:
|
248
|
-
- - "
|
253
|
+
- - "~>"
|
249
254
|
- !ruby/object:Gem::Version
|
250
|
-
version: '
|
255
|
+
version: '2.6'
|
251
256
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
252
257
|
requirements:
|
253
258
|
- - ">="
|