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
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Transformers
4
+ module Formatters
5
+ # Example Formatter
6
+ class Example < Formatter
7
+ def initialize
8
+ super({ date: [0], payee: [2], outflow: [3], inflow: [4] })
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Transformers
4
+ module Formatters
5
+ # Formats Statements rows into YNAB4 rows (Date, Payee, Memo, Amount or
6
+ # Outflow and Inflow.)
7
+ class Formatter
8
+ # @param [Hash] headers_indices the indices at which to find each
9
+ # header's name
10
+ # @option headers_indices [Array<Numeric>] :date transaction date
11
+ # @option headers_indices [Array<Numeric>] :payee transaction
12
+ # payee/description
13
+ # @option headers_indices [Array<Numeric>] :memo transaction memo or
14
+ # currency if currency conversion will be performed
15
+ # @option headers_indices [Array<Numeric>] :amount transaction amount (if
16
+ # Statement is using the :amounts format)
17
+ # @option headers_indices [Array<Numeric>] :outflow transaction outflow
18
+ # (if using the :flows format)
19
+ # @option headers_indices [Array<Numeric>] :inflow transaction inflow (if
20
+ # using the :flows format)
21
+ def initialize(**headers_indices)
22
+ default_values = {
23
+ memo: [] # The Memo field tends to be empty for most institutions
24
+ }
25
+
26
+ @format = :flows
27
+ unless headers_indices[:amount].nil? || headers_indices[:amount].empty?
28
+ @format = :amounts
29
+ end
30
+ @headers_indices = default_values.merge(headers_indices)
31
+ end
32
+
33
+ # Turns CSV rows into YNAB4 rows (Date, Payee, Memo, Amount or Outflow and
34
+ # Inflow)
35
+ # @param row [CSV::Row] The CSV row to parse
36
+ # @return [Array<String>] The YNAB4 formatted row
37
+ def run(row)
38
+ ynab_row = [date(row), payee(row), memo(row)]
39
+
40
+ if @format == :amounts
41
+ ynab_row << amount(row)
42
+ else
43
+ ynab_row << outflow(row)
44
+ ynab_row << inflow(row)
45
+ end
46
+
47
+ ynab_row
48
+ end
49
+
50
+ # Processes columns for each row. Based on the method name that is called,
51
+ # it will extract the corresponding column (field).
52
+ # @note In more complex cases, some heuristics are required to format some
53
+ # of the columns. In that case, any of the aliased #field methods
54
+ # (#date, #payee, #memo, #amount, #outflow, #inflow) can be
55
+ # overridden in the child.
56
+ # @param row [CSV::Row] The row to process
57
+ # @return [String] The corresponding field(s)
58
+ def field(row)
59
+ # Figure out the aliased name the method was called with, to derive
60
+ # which field to return from the row.
61
+ requested_field = __callee__.to_sym
62
+ assembled_field = @headers_indices[requested_field].reduce([]) do
63
+ |fields_data, i|
64
+ fields_data << row[i]
65
+ end
66
+
67
+ # Avoid turning Dates and Numerics back to strings
68
+ # If the assembled_field isn't a composite from several Statement
69
+ # fields, there is no need to join(' ') and turn it into a String
70
+ formatted_field = assembled_field[0]
71
+ if assembled_field.length > 1
72
+ formatted_field = assembled_field.join(' ')
73
+ end
74
+
75
+ # Avoid "nil" values in the output
76
+ return '' if formatted_field.nil?
77
+
78
+ formatted_field
79
+ end
80
+
81
+ # Create alias names for the field method. This allows the function to
82
+ # figure out which field to extract from its method name.
83
+ alias date field
84
+ alias payee field
85
+ alias memo field
86
+ alias amount field
87
+ alias outflow field
88
+ alias inflow field
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ynab_convert/transformers'
4
+
5
+ module Transformers
6
+ module Formatters
7
+ # Formats N26 statement values to YNAB4 value
8
+ class N26 < Formatter
9
+ def initialize
10
+ super({ date: [0], payee: [1], amount: [5] })
11
+ end
12
+
13
+ # All amounts are always in EUR
14
+ def memo(_row)
15
+ 'EUR'
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Transformers
4
+ module Formatters
5
+ # UBS Switzerland Chequing accounts formatter
6
+ class UBSChequing < Formatter
7
+ def initialize
8
+ super({ date: [9], payee: [12], outflow: [18], inflow: [19] })
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Transformers
4
+ module Formatters
5
+ # UBS Switzerland Credit Card accounts formatter
6
+ class UBSCredit < Formatter
7
+ def initialize
8
+ super({ date: [3], payee: [4], outflow: [10], inflow: [11] })
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Transformers
4
+ module Formatters
5
+ # Wise card accounts formatter
6
+ class Wise < Formatter
7
+ def initialize
8
+ super({ date: [1], payee: [13], amount: [2] })
9
+ end
10
+
11
+ def payee(row)
12
+ merchant = row[13]
13
+ description = row[4]
14
+
15
+ return description if merchant.nil?
16
+
17
+ merchant
18
+ end
19
+
20
+ def memo(row)
21
+ # Description goes in Memo because we'll need to extract the original
22
+ # amount from it in the enhancer.
23
+ description = row[4]
24
+ amount_currency = row[3]
25
+ original_amount = description.scan(/\d+\.\d{2}\s\w{3}/).first
26
+
27
+ memo = amount_currency
28
+ # Topups don't have an original amount
29
+ memo = "#{memo},#{original_amount}" unless original_amount.nil?
30
+
31
+ memo
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Regroups all the classes involved in transforming a given Statement into a
4
+ # YNAB4File
5
+ module Transformers
6
+ transformers = %w[cleaner enhancer formatter]
7
+
8
+ # Load all known Transformers
9
+ transformers.each do |t|
10
+ # Require the base classes first so that its children can find the parent
11
+ # class since files are otherwise loaded in alphabetical order
12
+ require File.join(__dir__, 'transformers', "#{t}s", "#{t}.rb")
13
+
14
+ Dir[File.join(__dir__, 'transformers', "#{t}s", '*.rb')].sort.each do |file|
15
+ require file
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Validators
4
+ # Checks YNAB4 row for validity. A row is valid if it has a Date, Payee, and
5
+ # one of Amount, Outflow, Inflow.
6
+ module YNAB4Row
7
+ # Validates a row
8
+ # @param row [Array<String, Numeric, Date>] The row to validate
9
+ # @return [Boolean] Whether the row is valid
10
+ def self.valid?(row)
11
+ # we are dealing with a YNAB4 row:
12
+ # %w[Date Payee Memo Amount|Outflow Inflow]
13
+ amount_valid?(row) &&
14
+ transaction_date_valid?(row) &&
15
+ payee_valid?(row)
16
+ end
17
+
18
+ # Indicates which format the row is in (:flows or :amounts)
19
+ # @param row [CSV::Row] the row to check
20
+ # @return [:flows, :amounts] the row's format
21
+ def self.row_format(row)
22
+ format = :flows
23
+ # :flows has 5 columns: Date, Payee, Memo, Outflow, Inflow
24
+ # :amounts has 4 columns: Date, Payee, Memo, Amount
25
+ format = :amounts if row.length == 4
26
+
27
+ format
28
+ end
29
+
30
+ # Indicates whether the amount on the row is valid
31
+ # @param row [CSV::Row] the row to check
32
+ # @return [Boolean] whether the amount is invalid
33
+ def self.amount_valid?(row)
34
+ format = row_format(row)
35
+ indices = [3]
36
+ indices << 4 if format == :flows
37
+
38
+ if format == :amounts
39
+ return indices.reduce(true) do |valid, i|
40
+ valid && value_valid?(row[i])
41
+ end
42
+ end
43
+
44
+ indices.reduce(false) do |valid, i|
45
+ valid || value_valid?(row[i])
46
+ end
47
+ end
48
+
49
+ # Indicates whether a value is valid
50
+ # @note Prefer using the #valid? method
51
+ # @param value [#zero?, #nil?, #to_s] the value to check
52
+ # @return [Boolean] whether the value is valid
53
+ def self.value_valid?(value)
54
+ if value.respond_to? :zero?
55
+ !value.zero?
56
+ else
57
+ !value.nil? && !value.to_s.empty?
58
+ end
59
+ end
60
+
61
+ # Validates the Date value
62
+ # @note Prefer using the #valid? method
63
+ # @param row [Array<String, Numeric, Date] The row to validate
64
+ # @return [Boolean] Whether the row's Date is invalid
65
+ def self.transaction_date_valid?(row)
66
+ date_index = 0
67
+ date = row[date_index]
68
+
69
+ value_valid?(date)
70
+ end
71
+
72
+ # Validates the Payee value
73
+ # @note Prefer using the #valid? method
74
+ # @param row [Array<String, Numeric, Date] The row to validate
75
+ # @return [Boolean] Whether the row's Payee is valid
76
+ def self.payee_valid?(row)
77
+ payee_index = 1
78
+ payee = row[payee_index]
79
+
80
+ value_valid?(payee)
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Regroups all the row validators
4
+ module Validators
5
+ # Load all known Validators
6
+ Dir[File.join(__dir__, 'validators', '*.rb')].sort.each do |file|
7
+ require file
8
+ end
9
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module YnabConvert
4
- VERSION = '1.0.8'
4
+ VERSION = '2.0.3'
5
5
  end
data/lib/ynab_convert.rb CHANGED
@@ -3,7 +3,11 @@
3
3
  require 'ynab_convert/version'
4
4
  require 'slop'
5
5
  require 'ynab_convert/logger'
6
- require 'core_extensions/string.rb'
6
+ require 'core_extensions/string'
7
+ require 'byebug' if ENV['YNAB_CONVERT_DEBUG']
8
+
9
+ # FIXME: The architecture in here is not the greatest... It should be
10
+ # redesigned entirely.
7
11
 
8
12
  # The application
9
13
  module YnabConvert
@@ -32,7 +36,7 @@ module YnabConvert
32
36
 
33
37
  begin
34
38
  @processor = opts[:processor].new(
35
- file: @file
39
+ filepath: @file
36
40
  )
37
41
  rescue Errno::ENOENT
38
42
  handle_file_not_found
@@ -98,7 +102,22 @@ module YnabConvert
98
102
  end
99
103
 
100
104
  def processor_class_name
101
- "Processor::#{@options[:institution].camel_case}"
105
+ # Processor class names don't always match camelcasing the `-i` argument
106
+ # from the command line. For those classes that don't, a lookup is
107
+ # performed to find the proper class name.
108
+ institution = @options[:institution].to_sym
109
+ institution_to_classname = {
110
+ ubs_chequing: 'UBSChequing',
111
+ ubs_credit: 'UBSCredit'
112
+ }
113
+
114
+ classname = institution_to_classname.fetch(institution) do |el|
115
+ # If the class name is "regular", it will be found by camelcasing the
116
+ # name passed as the `-i` argument from the command line.
117
+ el.to_s.camel_case
118
+ end
119
+
120
+ "Processors::#{classname}"
102
121
  end
103
122
 
104
123
  def processor
data/ynab_convert.gemspec CHANGED
@@ -59,9 +59,13 @@ Gem::Specification.new do |spec|
59
59
  spec.add_development_dependency 'rspec-core'
60
60
  spec.add_development_dependency 'rubocop'
61
61
  spec.add_development_dependency 'rubocop-rake'
62
+ spec.add_development_dependency 'rubocop-rspec'
62
63
  spec.add_development_dependency 'simplecov'
63
64
  spec.add_development_dependency 'solargraph'
65
+ spec.add_development_dependency 'vcr'
66
+ spec.add_development_dependency 'webmock'
64
67
 
65
68
  spec.add_dependency 'i18n'
66
69
  spec.add_dependency 'slop'
70
+ spec.add_dependency 'timecop'
67
71
  end
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.8
4
+ version: 2.0.3
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-07 00:00:00.000000000 Z
11
+ date: 2022-06-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -136,6 +136,20 @@ dependencies:
136
136
  - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop-rspec
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: simplecov
141
155
  requirement: !ruby/object:Gem::Requirement
@@ -164,6 +178,34 @@ dependencies:
164
178
  - - ">="
165
179
  - !ruby/object:Gem::Version
166
180
  version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: vcr
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: webmock
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
167
209
  - !ruby/object:Gem::Dependency
168
210
  name: i18n
169
211
  requirement: !ruby/object:Gem::Requirement
@@ -192,6 +234,20 @@ dependencies:
192
234
  - - ">="
193
235
  - !ruby/object:Gem::Version
194
236
  version: '0'
237
+ - !ruby/object:Gem::Dependency
238
+ name: timecop
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - ">="
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ type: :runtime
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
195
251
  description: |
196
252
  Utility to convert CSV statements into the YNAB4 format for easier
197
253
  transation import. Supports several banks and can easily be extended to
@@ -205,13 +261,14 @@ executables:
205
261
  extensions: []
206
262
  extra_rdoc_files: []
207
263
  files:
264
+ - ".github/workflows/publish.yml"
265
+ - ".github/workflows/test.yml"
208
266
  - ".gitignore"
209
267
  - ".rspec"
210
268
  - ".rubocop.yml"
211
269
  - ".ruby-gemset"
212
270
  - ".ruby-version"
213
271
  - ".solargraph.yml"
214
- - ".travis.yml"
215
272
  - Gemfile
216
273
  - Gemfile.lock
217
274
  - Guardfile
@@ -224,15 +281,42 @@ files:
224
281
  - lib/core_extensions/string.rb
225
282
  - lib/slop/symbol.rb
226
283
  - lib/ynab_convert.rb
284
+ - lib/ynab_convert/api_clients/api_client.rb
285
+ - lib/ynab_convert/api_clients/currency_api.rb
286
+ - lib/ynab_convert/documents.rb
287
+ - lib/ynab_convert/documents/statements/example_statement.rb
288
+ - lib/ynab_convert/documents/statements/n26_statement.rb
289
+ - lib/ynab_convert/documents/statements/statement.rb
290
+ - lib/ynab_convert/documents/statements/ubs_chequing_statement.rb
291
+ - lib/ynab_convert/documents/statements/ubs_credit_statement.rb
292
+ - lib/ynab_convert/documents/statements/wise_statement.rb
293
+ - lib/ynab_convert/documents/ynab4_files/ynab4_file.rb
227
294
  - lib/ynab_convert/error.rb
228
295
  - lib/ynab_convert/logger.rb
229
- - lib/ynab_convert/processor/base.rb
230
- - lib/ynab_convert/processor/example.rb
231
- - lib/ynab_convert/processor/n26.rb
232
- - lib/ynab_convert/processor/revolut.rb
233
- - lib/ynab_convert/processor/ubs_chequing.rb
234
- - lib/ynab_convert/processor/ubs_credit.rb
235
296
  - lib/ynab_convert/processors.rb
297
+ - lib/ynab_convert/processors/example_processor.rb
298
+ - lib/ynab_convert/processors/n26_processor.rb
299
+ - lib/ynab_convert/processors/processor.rb
300
+ - lib/ynab_convert/processors/ubs_chequing_processor.rb
301
+ - lib/ynab_convert/processors/ubs_credit_processor.rb
302
+ - lib/ynab_convert/processors/wise_processor.rb
303
+ - lib/ynab_convert/transformers.rb
304
+ - lib/ynab_convert/transformers/cleaners/cleaner.rb
305
+ - lib/ynab_convert/transformers/cleaners/n26_cleaner.rb
306
+ - lib/ynab_convert/transformers/cleaners/ubs_chequing_cleaner.rb
307
+ - lib/ynab_convert/transformers/cleaners/ubs_credit_cleaner.rb
308
+ - lib/ynab_convert/transformers/cleaners/wise_cleaner.rb
309
+ - lib/ynab_convert/transformers/enhancers/enhancer.rb
310
+ - lib/ynab_convert/transformers/enhancers/n26_enhancer.rb
311
+ - lib/ynab_convert/transformers/enhancers/wise_enhancer.rb
312
+ - lib/ynab_convert/transformers/formatters/example_formatter.rb
313
+ - lib/ynab_convert/transformers/formatters/formatter.rb
314
+ - lib/ynab_convert/transformers/formatters/n26_formatter.rb
315
+ - lib/ynab_convert/transformers/formatters/ubs_chequing_formatter.rb
316
+ - lib/ynab_convert/transformers/formatters/ubs_credit_formatter.rb
317
+ - lib/ynab_convert/transformers/formatters/wise_formatter.rb
318
+ - lib/ynab_convert/validators.rb
319
+ - lib/ynab_convert/validators/ynab4_row_validator.rb
236
320
  - lib/ynab_convert/version.rb
237
321
  - ynab_convert.gemspec
238
322
  homepage: https://github.com/coaxial/ynab_convert
@@ -259,7 +343,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
259
343
  - !ruby/object:Gem::Version
260
344
  version: '0'
261
345
  requirements: []
262
- rubygems_version: 3.0.8
346
+ rubygems_version: 3.0.3
263
347
  signing_key:
264
348
  specification_version: 4
265
349
  summary: Convert online banking CSV files to YNAB 4 format.
data/.travis.yml DELETED
@@ -1,20 +0,0 @@
1
- ---
2
- language: ruby
3
- cache: bundler
4
- rvm:
5
- - 2.6
6
- - 2.7
7
- before_install: gem install bundler
8
-
9
- jobs:
10
- include:
11
- - stage: test
12
- script: echo "Running tests for $(ruby -v)..." && bundle exec rake ci
13
- - stage: gem release
14
- rvm: 2.6
15
- script: echo "Publishing to rubygems.org..."
16
- deploy:
17
- provider: rubygems
18
- gem: ynab_convert
19
- api_key: $RUBYGEMS_API_KEY
20
- on: master