lunchmoney 1.4.0 → 1.5.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.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +7 -0
  3. data/.github/workflows/build_and_publish_yard_docs.yml +4 -4
  4. data/.github/workflows/ci.yml +9 -10
  5. data/.github/workflows/rbi-updater.yml +1 -1
  6. data/.github/workflows/release_pipeline.yml +1 -1
  7. data/.rubocop.yml +1 -1
  8. data/.ruby-version +1 -1
  9. data/.simplecov +1 -0
  10. data/.toys/.toys.rb +8 -0
  11. data/Gemfile +3 -3
  12. data/Gemfile.lock +102 -78
  13. data/README.md +0 -2
  14. data/SECURITY.md +151 -0
  15. data/bin/check_vcr_version +94 -0
  16. data/lib/lunchmoney/api.rb +26 -38
  17. data/lib/lunchmoney/calls/assets.rb +10 -13
  18. data/lib/lunchmoney/calls/base.rb +59 -7
  19. data/lib/lunchmoney/calls/budgets.rb +22 -25
  20. data/lib/lunchmoney/calls/categories.rb +28 -38
  21. data/lib/lunchmoney/calls/crypto.rb +7 -9
  22. data/lib/lunchmoney/calls/plaid_accounts.rb +7 -9
  23. data/lib/lunchmoney/calls/recurring_expenses.rb +4 -5
  24. data/lib/lunchmoney/calls/tags.rb +3 -4
  25. data/lib/lunchmoney/calls/transactions.rb +28 -37
  26. data/lib/lunchmoney/calls/users.rb +3 -4
  27. data/lib/lunchmoney/configuration.rb +20 -0
  28. data/lib/lunchmoney/deprecate.rb +35 -0
  29. data/lib/lunchmoney/objects/asset.rb +6 -1
  30. data/lib/lunchmoney/objects/object.rb +4 -9
  31. data/lib/lunchmoney/objects/plaid_account.rb +6 -1
  32. data/lib/lunchmoney/validators.rb +8 -6
  33. data/lib/lunchmoney/version.rb +1 -1
  34. data/lib/lunchmoney.rb +3 -3
  35. data/lunchmoney.gemspec +1 -1
  36. data/sorbet/rbi/annotations/activesupport.rbi +40 -0
  37. data/sorbet/rbi/dsl/active_support/callbacks.rbi +0 -2
  38. data/sorbet/rbi/gems/{activesupport@7.2.1.rbi → activesupport@8.0.2.1.rbi} +1431 -1028
  39. data/sorbet/rbi/gems/{ast@2.4.2.rbi → ast@2.4.3.rbi} +4 -3
  40. data/sorbet/rbi/gems/{base64@0.2.0.rbi → base64@0.3.0.rbi} +76 -39
  41. data/sorbet/rbi/gems/benchmark@0.4.1.rbi +619 -0
  42. data/sorbet/rbi/gems/bigdecimal@3.2.2.rbi +275 -0
  43. data/sorbet/rbi/gems/{concurrent-ruby@1.3.4.rbi → concurrent-ruby@1.3.5.rbi} +44 -32
  44. data/sorbet/rbi/gems/{connection_pool@2.4.1.rbi → connection_pool@2.5.3.rbi} +1 -0
  45. data/sorbet/rbi/gems/{dotenv@3.1.2.rbi → dotenv@3.1.8.rbi} +21 -29
  46. data/sorbet/rbi/gems/{drb@2.2.1.rbi → drb@2.2.3.rbi} +503 -188
  47. data/sorbet/rbi/gems/{erubi@1.13.0.rbi → erubi@1.13.1.rbi} +14 -9
  48. data/sorbet/rbi/gems/{faraday-net_http@3.1.1.rbi → faraday-net_http@3.4.1.rbi} +34 -34
  49. data/sorbet/rbi/gems/{faraday@2.10.1.rbi → faraday@2.13.4.rbi} +507 -171
  50. data/sorbet/rbi/gems/{hashdiff@1.1.1.rbi → hashdiff@1.2.0.rbi} +5 -3
  51. data/sorbet/rbi/gems/{i18n@1.14.5.rbi → i18n@1.14.7.rbi} +80 -80
  52. data/sorbet/rbi/gems/{json@2.7.2.rbi → json@2.13.2.rbi} +988 -226
  53. data/sorbet/rbi/gems/{kramdown@2.4.0.rbi → kramdown@2.5.1.rbi} +316 -234
  54. data/sorbet/rbi/gems/language_server-protocol@3.17.0.5.rbi +9 -0
  55. data/sorbet/rbi/gems/lint_roller@1.1.0.rbi +240 -0
  56. data/sorbet/rbi/gems/{logger@1.6.0.rbi → logger@1.7.0.rbi} +136 -76
  57. data/sorbet/rbi/gems/{minitest@5.25.1.rbi → minitest@5.25.5.rbi} +227 -220
  58. data/sorbet/rbi/gems/{mocha@2.4.5.rbi → mocha@2.7.1.rbi} +154 -118
  59. data/sorbet/rbi/gems/{net-http@0.4.1.rbi → net-http@0.6.0.rbi} +360 -181
  60. data/sorbet/rbi/gems/{parser@3.3.4.2.rbi → parser@3.3.9.0.rbi} +326 -308
  61. data/sorbet/rbi/gems/{prism@0.30.0.rbi → prism@1.4.0.rbi} +12440 -9920
  62. data/sorbet/rbi/gems/{rack@3.1.7.rbi → rack@3.2.1.rbi} +752 -579
  63. data/sorbet/rbi/gems/{rake@13.2.1.rbi → rake@13.3.0.rbi} +238 -227
  64. data/sorbet/rbi/gems/rbi@0.3.6.rbi +5162 -0
  65. data/sorbet/rbi/gems/rbs@4.0.0.dev.4.rbi +7895 -0
  66. data/sorbet/rbi/gems/{regexp_parser@2.9.2.rbi → regexp_parser@2.11.2.rbi} +1124 -1013
  67. data/sorbet/rbi/gems/require-hooks@0.2.2.rbi +110 -0
  68. data/sorbet/rbi/gems/{rexml@3.3.6.rbi → rexml@3.4.2.rbi} +755 -318
  69. data/sorbet/rbi/gems/{rubocop-ast@1.32.1.rbi → rubocop-ast@1.46.0.rbi} +1287 -899
  70. data/sorbet/rbi/gems/{rubocop-minitest@0.35.1.rbi → rubocop-minitest@0.38.2.rbi} +133 -97
  71. data/sorbet/rbi/gems/{rubocop-rails@2.26.0.rbi → rubocop-rails@2.33.3.rbi} +9874 -6597
  72. data/sorbet/rbi/gems/{rubocop-shopify@2.15.1.rbi → rubocop-shopify@2.17.1.rbi} +1 -0
  73. data/sorbet/rbi/gems/{rubocop-sorbet@0.8.5.rbi → rubocop-sorbet@0.10.5.rbi} +804 -83
  74. data/sorbet/rbi/gems/{rubocop@1.65.1.rbi → rubocop@1.80.1.rbi} +10688 -5103
  75. data/sorbet/rbi/gems/{securerandom@0.3.1.rbi → securerandom@0.4.1.rbi} +7 -5
  76. data/sorbet/rbi/gems/{spoom@1.4.2.rbi → spoom@1.7.6.rbi} +1939 -1039
  77. data/sorbet/rbi/gems/{tapioca@0.16.1.rbi → tapioca@0.17.7.rbi} +765 -821
  78. data/sorbet/rbi/gems/{thor@1.3.1.rbi → thor@1.4.0.rbi} +139 -91
  79. data/sorbet/rbi/gems/unicode-display_width@3.1.5.rbi +132 -0
  80. data/sorbet/rbi/gems/unicode-emoji@4.0.4.rbi +251 -0
  81. data/sorbet/rbi/gems/{uri@0.13.0.rbi → uri@1.0.3.rbi} +278 -256
  82. data/sorbet/rbi/gems/{vcr@6.3.1.rbi → vcr@6.3.1-ce35c236fe48899f02ddf780973b44cdb756c0ee.rbi} +140 -123
  83. data/sorbet/rbi/gems/{webmock@3.23.1.rbi → webmock@3.25.1.rbi} +101 -78
  84. data/sorbet/rbi/gems/{yard@0.9.36.rbi → yard@0.9.37.rbi} +394 -235
  85. metadata +55 -53
  86. data/sorbet/rbi/gems/bigdecimal@3.1.8.rbi +0 -78
  87. data/sorbet/rbi/gems/language_server-protocol@3.17.0.3.rbi +0 -14237
  88. data/sorbet/rbi/gems/rbi@0.1.14.rbi +0 -3305
  89. data/sorbet/rbi/gems/strscan@3.1.0.rbi +0 -9
  90. data/sorbet/rbi/gems/unicode-display_width@2.5.0.rbi +0 -65
  91. /data/sorbet/rbi/gems/{parallel@1.26.3.rbi → parallel@1.27.0.rbi} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3bcd23a0d41ac030c6a7d3a99c6438d363cfe100d1c1349f8ff8ab07e9da5a1b
4
- data.tar.gz: a1021db38ff1305b39733d80d69681b74c05190521e1c38fe6b47afce0fc7f6d
3
+ metadata.gz: 837338cb47e04506201212586e26c1b9c25a21eded600c3ddf34b9e20fae4395
4
+ data.tar.gz: ef26cf61532ecc48c74e7f15f6bf215a148578c6903dea90ad4a78d36f89dc8f
5
5
  SHA512:
6
- metadata.gz: 1dd9b667746978ea1033cba76a0f23082f040da1de55122aa45a7114eb572fb0580140f7bac48c53fb3ad52e560babb8e13bbb2f6766f8ca61a8fcc99308b721
7
- data.tar.gz: 4e84da79f6ae55f67c6f388c470346e541541553abf764a3365509990d2c6bce62ea96f66e9f0e960d4f1c394e1d67a969eecfefcc668942b954798eb278cdaf
6
+ metadata.gz: d5285b8d16caa4dd5d4f6897008db0d4ec0ac51efea529ac8174cd6fce0b1c3a2b5384a4a9c08f6ff667fb3b08cf3aaab52bb7e26b52220e116b7245dd052d16
7
+ data.tar.gz: a8775f582eee1fc9c8258ab8e89d7486dedd66be933f4fa7b3044eee6ce859edfcb3f218cb6c87e9eb4c98e381708fa1dcdd41b4e33019e1d4d445bfcd82b6ab
@@ -11,6 +11,13 @@ updates:
11
11
  open-pull-requests-limit: 100
12
12
  schedule:
13
13
  interval: weekly
14
+ groups:
15
+ minor_updates:
16
+ update-types:
17
+ - "minor"
18
+ patch_updates:
19
+ update-types:
20
+ - "patch"
14
21
  - package-ecosystem: github-actions
15
22
  directory: "/"
16
23
  open-pull-requests-limit: 100
@@ -20,12 +20,12 @@ jobs:
20
20
  runs-on: ubuntu-latest
21
21
 
22
22
  steps:
23
- - uses: actions/checkout@v4
23
+ - uses: actions/checkout@v5
24
24
 
25
25
  - name: Set up Ruby
26
- uses: ruby/setup-ruby@v1.165.1
26
+ uses: ruby/setup-ruby@v1.218.0
27
27
  with:
28
- ruby-version: 3.3.0
28
+ ruby-version: head
29
29
  bundler-cache: true
30
30
 
31
31
  - name: Install YARD
@@ -38,7 +38,7 @@ jobs:
38
38
  uses: actions/configure-pages@v5
39
39
 
40
40
  - name: Upload Artifact
41
- uses: actions/upload-pages-artifact@v3
41
+ uses: actions/upload-pages-artifact@v4
42
42
  with:
43
43
  path: "doc"
44
44
 
@@ -14,19 +14,22 @@ jobs:
14
14
 
15
15
  strategy:
16
16
  matrix:
17
- ruby-version: [3.1, 3.2, 3.3, head]
17
+ ruby-version: [3.2, 3.3, 3.4, head]
18
18
  continue-on-error: ${{ endsWith(matrix.ruby-version, 'head') }}
19
19
 
20
20
  steps:
21
21
  -
22
22
  name: Checkout
23
- uses: actions/checkout@v4
23
+ uses: actions/checkout@v5
24
24
  -
25
25
  name: Setup Ruby
26
26
  uses: ruby/setup-ruby@v1
27
27
  with:
28
28
  bundler-cache: true
29
29
  ruby-version: ${{ matrix.ruby-version }}
30
+ -
31
+ name: Check for newer VCR version
32
+ run: bin/toys check-vcr-version
30
33
  -
31
34
  name: RuboCop
32
35
  run: bin/rubocop
@@ -46,18 +49,14 @@ jobs:
46
49
  run: bin/toys mdl
47
50
  -
48
51
  name: Run Tests (Using Cassettes)
49
- if: ${{ ! endsWith(matrix.ruby-version, '3.3') }}
52
+ if: ${{ ! endsWith(matrix.ruby-version, '3.4') }}
50
53
  run: bin/toys test
51
54
  -
52
55
  name: Run Tests (With Remote Calls & Coverage Report)
53
- if: ${{ endsWith(matrix.ruby-version, '3.3') }}
54
- uses: paambaati/codeclimate-action@v8.0.0
56
+ if: ${{ endsWith(matrix.ruby-version, '3.4') }}
57
+ continue-on-error: true
55
58
  env:
56
- CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
57
59
  REMOTE_TESTS_ENABLED: ${{ vars.REMOTE_TESTS_ENABLED }}
58
60
  LUNCHMONEY_TOKEN: ${{ secrets.LUNCHMONEY_TOKEN }}
59
- with:
60
- coverageCommand: bin/toys test
61
- coverageLocations: |
62
- ${{ github.workspace }}/coverage/coverage.json:simplecov
61
+ run: bin/toys test
63
62
 
@@ -9,7 +9,7 @@ jobs:
9
9
  steps:
10
10
  -
11
11
  name: Checkout
12
- uses: actions/checkout@v4
12
+ uses: actions/checkout@v5
13
13
  with:
14
14
  ref: ${{ github.event.pull_request.head.sha }}
15
15
  token: ${{ secrets.LUNCHMONEY_PAT_TOKEN }}
@@ -24,7 +24,7 @@ jobs:
24
24
 
25
25
  steps:
26
26
  # Set up
27
- - uses: actions/checkout@v4
27
+ - uses: actions/checkout@v5
28
28
  - name: Set up Ruby
29
29
  uses: ruby/setup-ruby@v1
30
30
  with:
data/.rubocop.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  inherit_gem:
2
2
  rubocop-shopify: rubocop.yml
3
3
 
4
- require:
4
+ plugins:
5
5
  - rubocop-sorbet
6
6
  - rubocop-minitest
7
7
  - rubocop-rails
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.3.0
1
+ 3.4.5
data/.simplecov CHANGED
@@ -21,6 +21,7 @@ SimpleCov.start do
21
21
  "lib/lunchmoney.rb",
22
22
  "lib/lunchmoney/api.rb",
23
23
  "lib/lunchmoney/configuration.rb",
24
+ "lib/lunchmoney/deprecate.rb",
24
25
  "lib/lunchmoney/errors.rb",
25
26
  "lib/lunchmoney/exceptions.rb",
26
27
  "lib/lunchmoney/validators.rb",
data/.toys/.toys.rb CHANGED
@@ -9,3 +9,11 @@ alias_tool :style, :rubocop
9
9
  alias_tool :tapioca, :rbi
10
10
  alias_tool :tc, :typecheck
11
11
  alias_tool :cov, :coverage
12
+
13
+ tool "check-vcr-version" do
14
+ desc "Check if a newer version of VCR has been released"
15
+
16
+ def run
17
+ system("ruby", "bin/check_vcr_version") || exit(1)
18
+ end
19
+ end
data/Gemfile CHANGED
@@ -7,10 +7,10 @@ gemspec
7
7
 
8
8
  # Specify development dependencies here
9
9
  gem "toys"
10
- gem "minitest", "~> 5.24", require: false
11
- gem "mocha", "~> 2.4.0", require: false
10
+ gem "minitest", "~> 5.25", require: false
11
+ gem "mocha", "~> 2.7.1", require: false
12
12
  gem "webmock", require: false
13
- gem "vcr", require: false
13
+ gem "vcr", git: "https://github.com/vcr/vcr.git", ref: "ce35c236fe48899f02ddf780973b44cdb756c0ee", require: false
14
14
  gem "rubocop-shopify", require: false
15
15
  gem "rubocop-sorbet", require: false
16
16
  gem "rubocop-minitest", require: false
data/Gemfile.lock CHANGED
@@ -1,7 +1,14 @@
1
+ GIT
2
+ remote: https://github.com/vcr/vcr.git
3
+ revision: ce35c236fe48899f02ddf780973b44cdb756c0ee
4
+ ref: ce35c236fe48899f02ddf780973b44cdb756c0ee
5
+ specs:
6
+ vcr (6.3.1)
7
+
1
8
  PATH
2
9
  remote: .
3
10
  specs:
4
- lunchmoney (1.4.0)
11
+ lunchmoney (1.5.0)
5
12
  activesupport (>= 6.1)
6
13
  faraday (>= 1.0.0)
7
14
  sorbet-runtime (>= 0.5)
@@ -9,8 +16,9 @@ PATH
9
16
  GEM
10
17
  remote: https://rubygems.org/
11
18
  specs:
12
- activesupport (7.2.1)
19
+ activesupport (8.0.2.1)
13
20
  base64
21
+ benchmark (>= 0.3)
14
22
  bigdecimal
15
23
  concurrent-ruby (~> 1.0, >= 1.3.1)
16
24
  connection_pool (>= 2.2.5)
@@ -20,147 +28,162 @@ GEM
20
28
  minitest (>= 5.1)
21
29
  securerandom (>= 0.3)
22
30
  tzinfo (~> 2.0, >= 2.0.5)
31
+ uri (>= 0.13.1)
23
32
  addressable (2.8.7)
24
33
  public_suffix (>= 2.0.2, < 7.0)
25
34
  appraisal (2.5.0)
26
35
  bundler
27
36
  rake
28
37
  thor (>= 0.14.0)
29
- ast (2.4.2)
30
- base64 (0.2.0)
31
- bigdecimal (3.1.8)
38
+ ast (2.4.3)
39
+ base64 (0.3.0)
40
+ benchmark (0.4.1)
41
+ bigdecimal (3.2.2)
32
42
  chef-utils (18.5.0)
33
43
  concurrent-ruby
34
- concurrent-ruby (1.3.4)
35
- connection_pool (2.4.1)
44
+ concurrent-ruby (1.3.5)
45
+ connection_pool (2.5.3)
36
46
  crack (1.0.0)
37
47
  bigdecimal
38
48
  rexml
39
49
  docile (1.4.1)
40
- dotenv (3.1.2)
41
- drb (2.2.1)
42
- erubi (1.13.0)
43
- faraday (2.10.1)
44
- faraday-net_http (>= 2.0, < 3.2)
50
+ dotenv (3.1.8)
51
+ drb (2.2.3)
52
+ erubi (1.13.1)
53
+ faraday (2.13.4)
54
+ faraday-net_http (>= 2.0, < 3.5)
55
+ json
45
56
  logger
46
- faraday-net_http (3.1.1)
47
- net-http
48
- hashdiff (1.1.1)
49
- i18n (1.14.5)
57
+ faraday-net_http (3.4.1)
58
+ net-http (>= 0.5.0)
59
+ hashdiff (1.2.0)
60
+ i18n (1.14.7)
50
61
  concurrent-ruby (~> 1.0)
51
- json (2.7.2)
52
- kramdown (2.4.0)
53
- rexml
62
+ json (2.13.2)
63
+ kramdown (2.5.1)
64
+ rexml (>= 3.3.9)
54
65
  kramdown-parser-gfm (1.1.0)
55
66
  kramdown (~> 2.0)
56
- language_server-protocol (3.17.0.3)
57
- logger (1.6.0)
67
+ language_server-protocol (3.17.0.5)
68
+ lint_roller (1.1.0)
69
+ logger (1.7.0)
58
70
  mdl (0.13.0)
59
71
  kramdown (~> 2.3)
60
72
  kramdown-parser-gfm (~> 1.1)
61
73
  mixlib-cli (~> 2.1, >= 2.1.1)
62
74
  mixlib-config (>= 2.2.1, < 4)
63
75
  mixlib-shellout
64
- minitest (5.25.1)
76
+ minitest (5.25.5)
65
77
  mixlib-cli (2.1.8)
66
78
  mixlib-config (3.0.27)
67
79
  tomlrb
68
80
  mixlib-shellout (3.2.8)
69
81
  chef-utils
70
- mocha (2.4.5)
82
+ mocha (2.7.1)
71
83
  ruby2_keywords (>= 0.0.5)
72
- net-http (0.4.1)
84
+ net-http (0.6.0)
73
85
  uri
74
86
  netrc (0.11.0)
75
- parallel (1.26.3)
76
- parser (3.3.4.2)
87
+ parallel (1.27.0)
88
+ parser (3.3.9.0)
77
89
  ast (~> 2.4.1)
78
90
  racc
79
- prism (0.30.0)
91
+ prism (1.4.0)
80
92
  public_suffix (6.0.1)
81
93
  racc (1.8.1)
82
- rack (3.1.7)
94
+ rack (3.2.1)
83
95
  rainbow (3.1.1)
84
- rake (13.2.1)
85
- rbi (0.1.14)
86
- prism (>= 0.18.0, < 1.0.0)
87
- sorbet-runtime (>= 0.5.9204)
88
- regexp_parser (2.9.2)
89
- rexml (3.3.6)
90
- strscan
91
- rubocop (1.65.1)
96
+ rake (13.3.0)
97
+ rbi (0.3.6)
98
+ prism (~> 1.0)
99
+ rbs (>= 3.4.4)
100
+ rbs (4.0.0.dev.4)
101
+ logger
102
+ prism (>= 1.3.0)
103
+ regexp_parser (2.11.2)
104
+ require-hooks (0.2.2)
105
+ rexml (3.4.2)
106
+ rubocop (1.80.1)
92
107
  json (~> 2.3)
93
- language_server-protocol (>= 3.17.0)
108
+ language_server-protocol (~> 3.17.0.2)
109
+ lint_roller (~> 1.1.0)
94
110
  parallel (~> 1.10)
95
111
  parser (>= 3.3.0.2)
96
112
  rainbow (>= 2.2.2, < 4.0)
97
- regexp_parser (>= 2.4, < 3.0)
98
- rexml (>= 3.2.5, < 4.0)
99
- rubocop-ast (>= 1.31.1, < 2.0)
113
+ regexp_parser (>= 2.9.3, < 3.0)
114
+ rubocop-ast (>= 1.46.0, < 2.0)
100
115
  ruby-progressbar (~> 1.7)
101
- unicode-display_width (>= 2.4.0, < 3.0)
102
- rubocop-ast (1.32.1)
103
- parser (>= 3.3.1.0)
104
- rubocop-minitest (0.35.1)
105
- rubocop (>= 1.61, < 2.0)
106
- rubocop-ast (>= 1.31.1, < 2.0)
107
- rubocop-rails (2.26.0)
116
+ unicode-display_width (>= 2.4.0, < 4.0)
117
+ rubocop-ast (1.46.0)
118
+ parser (>= 3.3.7.2)
119
+ prism (~> 1.4)
120
+ rubocop-minitest (0.38.2)
121
+ lint_roller (~> 1.1)
122
+ rubocop (>= 1.75.0, < 2.0)
123
+ rubocop-ast (>= 1.38.0, < 2.0)
124
+ rubocop-rails (2.33.3)
108
125
  activesupport (>= 4.2.0)
126
+ lint_roller (~> 1.1)
109
127
  rack (>= 1.1)
110
- rubocop (>= 1.52.0, < 2.0)
111
- rubocop-ast (>= 1.31.1, < 2.0)
112
- rubocop-shopify (2.15.1)
113
- rubocop (~> 1.51)
114
- rubocop-sorbet (0.8.5)
115
- rubocop (>= 1)
128
+ rubocop (>= 1.75.0, < 2.0)
129
+ rubocop-ast (>= 1.44.0, < 2.0)
130
+ rubocop-shopify (2.17.1)
131
+ rubocop (~> 1.62)
132
+ rubocop-sorbet (0.10.5)
133
+ lint_roller
134
+ rubocop (>= 1.75.2)
116
135
  ruby-progressbar (1.13.0)
117
136
  ruby2_keywords (0.0.5)
118
- securerandom (0.3.1)
137
+ securerandom (0.4.1)
119
138
  simplecov (0.22.0)
120
139
  docile (~> 1.1)
121
140
  simplecov-html (~> 0.11)
122
141
  simplecov_json_formatter (~> 0.1)
123
142
  simplecov-html (0.12.3)
124
143
  simplecov_json_formatter (0.1.4)
125
- sorbet (0.5.11545)
126
- sorbet-static (= 0.5.11545)
127
- sorbet-runtime (0.5.11545)
128
- sorbet-static (0.5.11545-universal-darwin)
129
- sorbet-static (0.5.11545-x86_64-linux)
130
- sorbet-static-and-runtime (0.5.11545)
131
- sorbet (= 0.5.11545)
132
- sorbet-runtime (= 0.5.11545)
133
- spoom (1.4.2)
144
+ sorbet (0.6.12473)
145
+ sorbet-static (= 0.6.12473)
146
+ sorbet-runtime (0.6.12473)
147
+ sorbet-static (0.6.12473-universal-darwin)
148
+ sorbet-static (0.6.12473-x86_64-linux)
149
+ sorbet-static-and-runtime (0.6.12473)
150
+ sorbet (= 0.6.12473)
151
+ sorbet-runtime (= 0.6.12473)
152
+ spoom (1.7.6)
134
153
  erubi (>= 1.10.0)
135
154
  prism (>= 0.28.0)
155
+ rbi (>= 0.3.3)
156
+ rbs (>= 4.0.0.dev.4)
157
+ rexml (>= 3.2.6)
136
158
  sorbet-static-and-runtime (>= 0.5.10187)
137
159
  thor (>= 0.19.2)
138
- strscan (3.1.0)
139
- tapioca (0.16.1)
160
+ tapioca (0.17.7)
161
+ benchmark
140
162
  bundler (>= 2.2.25)
141
163
  netrc (>= 0.11.0)
142
164
  parallel (>= 1.21.0)
143
- rbi (>= 0.1.14, < 0.2)
165
+ rbi (>= 0.3.1)
166
+ require-hooks (>= 0.2.2)
144
167
  sorbet-static-and-runtime (>= 0.5.11087)
145
- spoom (>= 1.2.0)
168
+ spoom (>= 1.7.0)
146
169
  thor (>= 1.2.0)
147
170
  yard-sorbet
148
- thor (1.3.1)
171
+ thor (1.4.0)
149
172
  tomlrb (2.0.3)
150
173
  toys (0.15.6)
151
174
  toys-core (= 0.15.6)
152
175
  toys-core (0.15.6)
153
176
  tzinfo (2.0.6)
154
177
  concurrent-ruby (~> 1.0)
155
- unicode-display_width (2.5.0)
156
- uri (0.13.0)
157
- vcr (6.3.1)
158
- base64
159
- webmock (3.23.1)
178
+ unicode-display_width (3.1.5)
179
+ unicode-emoji (~> 4.0, >= 4.0.4)
180
+ unicode-emoji (4.0.4)
181
+ uri (1.0.3)
182
+ webmock (3.25.1)
160
183
  addressable (>= 2.8.0)
161
184
  crack (>= 0.3.2)
162
185
  hashdiff (>= 0.4.0, < 2.0.0)
163
- yard (0.9.36)
186
+ yard (0.9.37)
164
187
  yard-sorbet (0.9.0)
165
188
  sorbet-runtime
166
189
  yard
@@ -168,6 +191,7 @@ GEM
168
191
  PLATFORMS
169
192
  arm64-darwin-22
170
193
  arm64-darwin-23
194
+ arm64-darwin-24
171
195
  x86_64-darwin-20
172
196
  x86_64-linux
173
197
 
@@ -176,8 +200,8 @@ DEPENDENCIES
176
200
  dotenv
177
201
  lunchmoney!
178
202
  mdl
179
- minitest (~> 5.24)
180
- mocha (~> 2.4.0)
203
+ minitest (~> 5.25)
204
+ mocha (~> 2.7.1)
181
205
  rubocop-minitest
182
206
  rubocop-rails
183
207
  rubocop-shopify
@@ -188,10 +212,10 @@ DEPENDENCIES
188
212
  spoom
189
213
  tapioca
190
214
  toys
191
- vcr
215
+ vcr!
192
216
  webmock
193
217
  yard
194
218
  yard-sorbet
195
219
 
196
220
  BUNDLED WITH
197
- 2.5.3
221
+ 2.7.0
data/README.md CHANGED
@@ -3,8 +3,6 @@
3
3
  [![Gem Version](https://badge.fury.io/rb/lunchmoney.svg)](https://badge.fury.io/rb/lunchmoney)
4
4
  [![CI](https://github.com/mmenanno/lunchmoney/actions/workflows/ci.yml/badge.svg)](https://github.com/mmenanno/lunchmoney/actions/workflows/ci.yml)
5
5
  [![Yard Docs](https://github.com/mmenanno/lunchmoney/actions/workflows/build_and_publish_yard_docs.yml/badge.svg)](https://github.com/mmenanno/lunchmoney/actions/workflows/build_and_publish_yard_docs.yml)
6
- [![Maintainability](https://api.codeclimate.com/v1/badges/6e84458e8cf831e6a6fa/maintainability)](https://codeclimate.com/github/mmenanno/lunchmoney/maintainability)
7
- [![Test Coverage](https://api.codeclimate.com/v1/badges/6e84458e8cf831e6a6fa/test_coverage)](https://codeclimate.com/github/mmenanno/lunchmoney/test_coverage)
8
6
 
9
7
  <a href="https://www.buymeacoffee.com/mmenanno" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>
10
8
 
data/SECURITY.md ADDED
@@ -0,0 +1,151 @@
1
+ # Security Policy
2
+
3
+ ## Supported Versions
4
+
5
+ We actively support the following versions of the `lunchmoney` gem with security updates:
6
+
7
+ | Version | Supported |
8
+ | ------- | ------------------ |
9
+ | 1.4.x | :white_check_mark: |
10
+ | 1.3.x | :white_check_mark: |
11
+ | < 1.3 | :x: |
12
+
13
+ ## Reporting a Vulnerability
14
+
15
+ We take the security of the `lunchmoney` gem seriously. If you discover a security vulnerability, please follow these steps:
16
+
17
+ ### How to Report
18
+
19
+ **Please do not report security vulnerabilities through public GitHub issues.**
20
+
21
+ Instead, please report security vulnerabilities by emailing us directly at:
22
+
23
+ - **Email**: [Create an email to the maintainer based on the GitHub profile]
24
+ - **Subject Line**: "[SECURITY] Vulnerability Report for lunchmoney gem"
25
+
26
+ ### What to Include
27
+
28
+ Please include the following information in your report:
29
+
30
+ 1. **Description**: A clear description of the vulnerability
31
+ 2. **Impact**: The potential impact and severity of the vulnerability
32
+ 3. **Reproduction Steps**: Step-by-step instructions to reproduce the issue
33
+ 4. **Affected Versions**: Which versions of the gem are affected
34
+ 5. **Suggested Fix**: If you have ideas for how to fix the issue (optional)
35
+ 6. **Your Contact Information**: So we can follow up with questions if needed
36
+
37
+ ### Response Timeline
38
+
39
+ We are committed to addressing security vulnerabilities promptly:
40
+
41
+ - **Acknowledgment**: We will acknowledge receipt of your vulnerability report within 48 hours
42
+ - **Initial Assessment**: We will provide an initial assessment within 5 business days
43
+ - **Status Updates**: We will provide regular updates on our progress
44
+ - **Resolution**: We aim to resolve critical vulnerabilities within 30 days
45
+
46
+ ### Responsible Disclosure
47
+
48
+ We kindly ask that you:
49
+
50
+ - Give us reasonable time to investigate and fix the issue before public disclosure
51
+ - Avoid accessing, modifying, or deleting data that doesn't belong to you
52
+ - Don't perform actions that could harm the availability or integrity of our services
53
+ - Don't social engineer our team members or contractors
54
+
55
+ ### Recognition
56
+
57
+ We appreciate the security research community's efforts to improve the security of our project. If you report a valid security vulnerability, we will:
58
+
59
+ - Acknowledge your contribution in our release notes (unless you prefer to remain anonymous)
60
+ - Work with you on the disclosure timeline
61
+ - Keep you informed throughout the remediation process
62
+
63
+ ## Security Best Practices for Users
64
+
65
+ When using the `lunchmoney` gem in your applications:
66
+
67
+ ### API Key Security
68
+
69
+ 1. **Never commit API keys to version control**
70
+ - Use environment variables (`LUNCHMONEY_TOKEN`)
71
+ - Use secure credential management systems
72
+ - Add API keys to your `.gitignore` file
73
+
74
+ 2. **Rotate API keys regularly**
75
+ - Generate new API keys periodically
76
+ - Immediately revoke compromised keys
77
+
78
+ 3. **Use least privilege access**
79
+ - Only grant the minimum permissions necessary
80
+ - Monitor API key usage for unusual activity
81
+
82
+ ### Network Security
83
+
84
+ 1. **Use HTTPS only**
85
+ - The gem uses HTTPS by default for all API calls
86
+ - Never disable SSL verification in production
87
+
88
+ 2. **Network monitoring**
89
+ - Monitor outbound API calls to LunchMoney
90
+ - Set up alerts for unusual API usage patterns
91
+
92
+ ### Dependency Security
93
+
94
+ 1. **Keep dependencies updated**
95
+ - Regularly update the `lunchmoney` gem
96
+ - Monitor for security advisories affecting dependencies
97
+
98
+ 2. **Audit your dependencies**
99
+
100
+ ```bash
101
+ # Install bundler-audit gem first
102
+ gem install bundler-audit
103
+
104
+ # Then audit your dependencies
105
+ bundle audit
106
+ ```
107
+
108
+ ### Error Handling
109
+
110
+ 1. **Don't log sensitive data**
111
+ - API keys should never appear in logs
112
+ - Be careful with error messages that might expose sensitive information
113
+
114
+ 2. **Handle API errors gracefully**
115
+
116
+ ```ruby
117
+ api = LunchMoney::Api.new
118
+ response = api.categories
119
+
120
+ if response.is_a?(LunchMoney::Errors)
121
+ # Handle error without exposing sensitive details
122
+ logger.error "API call failed"
123
+ end
124
+ ```
125
+
126
+ ## Security Features
127
+
128
+ This gem includes several security features:
129
+
130
+ - **HTTPS-only communication** with the LunchMoney API
131
+ - **Input validation** for API parameters
132
+ - **Error handling** that doesn't expose sensitive information
133
+ - **Dependency management** with regular updates
134
+
135
+ ## Vulnerability History
136
+
137
+ We will maintain a record of resolved security vulnerabilities here:
138
+
139
+ - No security vulnerabilities have been reported to date
140
+
141
+ ## Contact
142
+
143
+ For security-related questions or concerns, please contact:
144
+
145
+ - **Maintainer**: @mmenanno
146
+ - **Repository**: <https://github.com/mmenanno/lunchmoney>
147
+ - **Documentation**: <https://mmenanno.github.io/lunchmoney/>
148
+
149
+ ---
150
+
151
+ Thank you for helping keep the `lunchmoney` gem and our community safe!