ynab_convert 1.0.8 → 2.0.3

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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/publish.yml +36 -0
  3. data/.github/workflows/test.yml +31 -0
  4. data/.gitignore +2 -0
  5. data/.rubocop.yml +10 -2
  6. data/Gemfile.lock +39 -14
  7. data/Guardfile +1 -29
  8. data/README.md +82 -7
  9. data/lib/ynab_convert/api_clients/api_client.rb +24 -0
  10. data/lib/ynab_convert/api_clients/currency_api.rb +66 -0
  11. data/lib/ynab_convert/documents/statements/example_statement.rb +16 -0
  12. data/lib/ynab_convert/documents/statements/n26_statement.rb +24 -0
  13. data/lib/ynab_convert/documents/statements/statement.rb +39 -0
  14. data/lib/ynab_convert/documents/statements/ubs_chequing_statement.rb +20 -0
  15. data/lib/ynab_convert/documents/statements/ubs_credit_statement.rb +19 -0
  16. data/lib/ynab_convert/documents/statements/wise_statement.rb +17 -0
  17. data/lib/ynab_convert/documents/ynab4_files/ynab4_file.rb +58 -0
  18. data/lib/ynab_convert/documents.rb +17 -0
  19. data/lib/ynab_convert/logger.rb +1 -1
  20. data/lib/ynab_convert/processors/example_processor.rb +24 -0
  21. data/lib/ynab_convert/processors/n26_processor.rb +26 -0
  22. data/lib/ynab_convert/processors/processor.rb +75 -0
  23. data/lib/ynab_convert/processors/ubs_chequing_processor.rb +21 -0
  24. data/lib/ynab_convert/processors/ubs_credit_processor.rb +17 -0
  25. data/lib/ynab_convert/processors/wise_processor.rb +19 -0
  26. data/lib/ynab_convert/processors.rb +2 -2
  27. data/lib/ynab_convert/transformers/cleaners/cleaner.rb +17 -0
  28. data/lib/ynab_convert/transformers/cleaners/n26_cleaner.rb +13 -0
  29. data/lib/ynab_convert/transformers/cleaners/ubs_chequing_cleaner.rb +98 -0
  30. data/lib/ynab_convert/transformers/cleaners/ubs_credit_cleaner.rb +45 -0
  31. data/lib/ynab_convert/transformers/cleaners/wise_cleaner.rb +39 -0
  32. data/lib/ynab_convert/transformers/enhancers/enhancer.rb +20 -0
  33. data/lib/ynab_convert/transformers/enhancers/n26_enhancer.rb +74 -0
  34. data/lib/ynab_convert/transformers/enhancers/wise_enhancer.rb +87 -0
  35. data/lib/ynab_convert/transformers/formatters/example_formatter.rb +12 -0
  36. data/lib/ynab_convert/transformers/formatters/formatter.rb +91 -0
  37. data/lib/ynab_convert/transformers/formatters/n26_formatter.rb +19 -0
  38. data/lib/ynab_convert/transformers/formatters/ubs_chequing_formatter.rb +12 -0
  39. data/lib/ynab_convert/transformers/formatters/ubs_credit_formatter.rb +12 -0
  40. data/lib/ynab_convert/transformers/formatters/wise_formatter.rb +35 -0
  41. data/lib/ynab_convert/transformers.rb +18 -0
  42. data/lib/ynab_convert/validators/ynab4_row_validator.rb +83 -0
  43. data/lib/ynab_convert/validators.rb +9 -0
  44. data/lib/ynab_convert/version.rb +1 -1
  45. data/lib/ynab_convert.rb +22 -3
  46. data/ynab_convert.gemspec +4 -0
  47. metadata +94 -10
  48. data/.travis.yml +0 -20
  49. data/lib/ynab_convert/processor/base.rb +0 -226
  50. data/lib/ynab_convert/processor/example.rb +0 -124
  51. data/lib/ynab_convert/processor/n26.rb +0 -70
  52. data/lib/ynab_convert/processor/revolut.rb +0 -103
  53. data/lib/ynab_convert/processor/ubs_chequing.rb +0 -137
  54. data/lib/ynab_convert/processor/ubs_credit.rb +0 -83
@@ -1,83 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Processor
4
- # Processes CSV files from UBS Credit Cards Switzerland
5
- class UbsCredit < Processor::Base
6
- # @option options [String] :file Path to the CSV file to process
7
- def initialize(options)
8
- register_custom_converters
9
- @loader_options = {
10
- col_sep: ';',
11
- converters: %i[amounts transaction_dates],
12
- quote_char: nil,
13
- encoding: "#{Encoding::ISO_8859_1}:#{Encoding::UTF_8}",
14
- headers: true,
15
- # CSV FTW, the first line in these files is not the headers but the
16
- # separator specification
17
- skip_lines: 'sep=;'
18
- }
19
- @institution_name = 'UBS (Credit cards)'
20
-
21
- super(options)
22
- end
23
-
24
- protected
25
-
26
- def transformers(row)
27
- unless row[headers[:transaction_date]].nil?
28
- date = row[headers[:transaction_date]].strftime('%d/%m/%Y')
29
- end
30
- payee = row[headers[:payee]]
31
- unless row[headers[:debit]].nil?
32
- debit = format('%<amount>.2f', amount: row[headers[:debit]])
33
- end
34
- unless row[headers[:credit]].nil?
35
- credit = format('%<amount>.2f', amount: row[headers[:credit]])
36
- end
37
-
38
- converted_row = [date, payee, nil, debit, credit]
39
- logger.debug "Converted row: #{converted_row}"
40
- converted_row
41
- end
42
-
43
- private
44
-
45
- def extract_header_names(row)
46
- headers[:transaction_date] ||= row.headers[3]
47
- headers[:payee] ||= row.headers[4]
48
- headers[:debit] ||= row.headers[10]
49
- headers[:credit] ||= row.headers[11]
50
- end
51
-
52
- def register_custom_converters
53
- CSV::Converters[:amounts] = lambda { |s|
54
- # Regex checks if string has only digits, apostrophes, and ends with a
55
- # dot and two digits
56
- amount_regex = /^[\d'?]+(\.\d{2})$/
57
-
58
- if !s.nil? && s.match(amount_regex)
59
- amount = s.delete("'") .to_f
60
- logger.debug "Converted `#{s}' into amount `#{amount}'"
61
- return amount
62
- end
63
-
64
- logger.debug "Not an amount, not parsing `#{s.inspect}'"
65
- s
66
- }
67
-
68
- CSV::Converters[:transaction_dates] = lambda { |s|
69
- date_regex = /^\d{2}\.\d{2}\.\d{4}$/
70
-
71
- if !s.nil? && s.match(date_regex)
72
- parsed_date = Date.parse(s)
73
- logger.debug "Converted `#{s.inspect}' into date "\
74
- "`#{parsed_date}'"
75
- parsed_date
76
- else
77
- logger.debug "Not a date, not parsing #{s.inspect}"
78
- s
79
- end
80
- }
81
- end
82
- end
83
- end