lunchmoney 1.2.0 → 1.4.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 (63) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build_and_publish_yard_docs.yml +1 -1
  3. data/.github/workflows/check_pipeline.yml +2 -2
  4. data/.github/workflows/ci.yml +1 -1
  5. data/.github/workflows/{dependabot-rbi-updater.yml → rbi-updater.yml} +2 -3
  6. data/.simplecov +1 -2
  7. data/Gemfile +2 -3
  8. data/Gemfile.lock +70 -75
  9. data/lib/lunchmoney/objects/transaction.rb +9 -1
  10. data/lib/lunchmoney/objects/user.rb +4 -1
  11. data/lib/lunchmoney/version.rb +1 -1
  12. data/sorbet/rbi/annotations/activesupport.rbi +31 -0
  13. data/sorbet/rbi/annotations/minitest.rbi +119 -0
  14. data/sorbet/rbi/dsl/active_support/callbacks.rbi +1 -0
  15. data/sorbet/rbi/gems/{activesupport@7.1.3.2.rbi → activesupport@7.2.1.rbi} +1345 -1253
  16. data/sorbet/rbi/gems/{addressable@2.8.6.rbi → addressable@2.8.7.rbi} +2 -1
  17. data/sorbet/rbi/gems/{bigdecimal@3.1.7.rbi → bigdecimal@3.1.8.rbi} +1 -0
  18. data/sorbet/rbi/gems/{chef-utils@18.4.2.rbi → chef-utils@18.5.0.rbi} +1 -0
  19. data/sorbet/rbi/gems/{concurrent-ruby@1.2.3.rbi → concurrent-ruby@1.3.4.rbi} +64 -9
  20. data/sorbet/rbi/gems/{docile@1.4.0.rbi → docile@1.4.1.rbi} +1 -0
  21. data/sorbet/rbi/gems/{dotenv@3.1.0.rbi → dotenv@3.1.2.rbi} +20 -17
  22. data/sorbet/rbi/gems/{erubi@1.12.0.rbi → erubi@1.13.0.rbi} +20 -15
  23. data/sorbet/rbi/gems/{faraday-net_http@3.1.0.rbi → faraday-net_http@3.1.1.rbi} +36 -35
  24. data/sorbet/rbi/gems/{faraday@2.9.0.rbi → faraday@2.10.1.rbi} +79 -33
  25. data/sorbet/rbi/gems/{hashdiff@1.1.0.rbi → hashdiff@1.1.1.rbi} +3 -2
  26. data/sorbet/rbi/gems/{i18n@1.14.4.rbi → i18n@1.14.5.rbi} +43 -14
  27. data/sorbet/rbi/gems/{json@2.7.1.rbi → json@2.7.2.rbi} +72 -72
  28. data/sorbet/rbi/gems/logger@1.6.0.rbi +903 -0
  29. data/sorbet/rbi/gems/{minitest@5.22.3.rbi → minitest@5.25.1.rbi} +245 -235
  30. data/sorbet/rbi/gems/{mixlib-shellout@3.2.7.rbi → mixlib-shellout@3.2.8.rbi} +1 -0
  31. data/sorbet/rbi/gems/{mocha@2.1.0.rbi → mocha@2.4.5.rbi} +169 -144
  32. data/sorbet/rbi/gems/{parallel@1.24.0.rbi → parallel@1.26.3.rbi} +32 -21
  33. data/sorbet/rbi/gems/{parser@3.3.0.5.rbi → parser@3.3.4.2.rbi} +233 -186
  34. data/sorbet/rbi/gems/{prism@0.24.0.rbi → prism@0.30.0.rbi} +20933 -12761
  35. data/sorbet/rbi/gems/{public_suffix@5.0.4.rbi → public_suffix@6.0.1.rbi} +1 -0
  36. data/sorbet/rbi/gems/{racc@1.7.3.rbi → racc@1.8.1.rbi} +34 -33
  37. data/sorbet/rbi/gems/{rack@3.0.10.rbi → rack@3.1.7.rbi} +694 -987
  38. data/sorbet/rbi/gems/{rake@13.1.0.rbi → rake@13.2.1.rbi} +56 -55
  39. data/sorbet/rbi/gems/{rbi@0.1.9.rbi → rbi@0.1.14.rbi} +904 -622
  40. data/sorbet/rbi/gems/{regexp_parser@2.9.0.rbi → regexp_parser@2.9.2.rbi} +3 -2
  41. data/sorbet/rbi/gems/{rexml@3.2.6.rbi → rexml@3.3.6.rbi} +383 -245
  42. data/sorbet/rbi/gems/{rubocop-ast@1.31.2.rbi → rubocop-ast@1.32.1.rbi} +393 -349
  43. data/sorbet/rbi/gems/{rubocop-minitest@0.35.0.rbi → rubocop-minitest@0.35.1.rbi} +11 -8
  44. data/sorbet/rbi/gems/{rubocop-rails@2.24.1.rbi → rubocop-rails@2.26.0.rbi} +604 -275
  45. data/sorbet/rbi/gems/{rubocop-sorbet@0.8.0.rbi → rubocop-sorbet@0.8.5.rbi} +253 -127
  46. data/sorbet/rbi/gems/{rubocop@1.62.1.rbi → rubocop@1.65.1.rbi} +2334 -1779
  47. data/sorbet/rbi/gems/securerandom@0.3.1.rbi +73 -0
  48. data/sorbet/rbi/gems/{spoom@1.2.4.rbi → spoom@1.4.2.rbi} +2003 -848
  49. data/sorbet/rbi/gems/strscan@3.1.0.rbi +9 -0
  50. data/sorbet/rbi/gems/{tapioca@0.13.1.rbi → tapioca@0.16.1.rbi} +294 -259
  51. data/sorbet/rbi/gems/{toys-core@0.15.5.rbi → toys-core@0.15.6.rbi} +1 -0
  52. data/sorbet/rbi/gems/{toys@0.15.5.rbi → toys@0.15.6.rbi} +4 -3
  53. data/sorbet/rbi/gems/{vcr@6.2.0.rbi → vcr@6.3.1.rbi} +72 -68
  54. data/sorbet/rbi/gems/{webmock@3.23.0.rbi → webmock@3.23.1.rbi} +1 -0
  55. data/sorbet/rbi/gems/{yard-sorbet@0.8.1.rbi → yard-sorbet@0.9.0.rbi} +36 -29
  56. metadata +46 -49
  57. data/sorbet/rbi/gems/coderay@1.1.3.rbi +0 -3426
  58. data/sorbet/rbi/gems/method_source@1.0.0.rbi +0 -272
  59. data/sorbet/rbi/gems/mutex_m@0.2.0.rbi +0 -93
  60. data/sorbet/rbi/gems/prettier_print@1.2.1.rbi +0 -951
  61. data/sorbet/rbi/gems/pry-sorbet@0.2.1.rbi +0 -966
  62. data/sorbet/rbi/gems/pry@0.14.2.rbi +0 -10077
  63. data/sorbet/rbi/gems/syntax_tree@6.2.0.rbi +0 -23136
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ade3f058472ad8a1675c50523464337634c50eecb05eac449ab10d6eddd741c1
4
- data.tar.gz: 5aad397a6fd0f9d05caf81ba54e12e4abf0ae06c46a23dcb37587b91dd4f5cb6
3
+ metadata.gz: 3bcd23a0d41ac030c6a7d3a99c6438d363cfe100d1c1349f8ff8ab07e9da5a1b
4
+ data.tar.gz: a1021db38ff1305b39733d80d69681b74c05190521e1c38fe6b47afce0fc7f6d
5
5
  SHA512:
6
- metadata.gz: 71204a77261c3820cfd769fc212a1665f370e2fce8602b74321c98bd4740d3b359ed54ee6b4988efdffc554c63d1fd65f4f458a67301e3c74d0f5a0403873f6e
7
- data.tar.gz: 5455912322a61badb7c849ce1a47af1372d89f8ac6fb00eb3c2aa73f2ed0ab1f6b7fa1e70b84cc6ee1c37ee1a1475d990237bd8c42b6575eccbf167fa876b6d5
6
+ metadata.gz: 1dd9b667746978ea1033cba76a0f23082f040da1de55122aa45a7114eb572fb0580140f7bac48c53fb3ad52e560babb8e13bbb2f6766f8ca61a8fcc99308b721
7
+ data.tar.gz: 4e84da79f6ae55f67c6f388c470346e541541553abf764a3365509990d2c6bce62ea96f66e9f0e960d4f1c394e1d67a969eecfefcc668942b954798eb278cdaf
@@ -35,7 +35,7 @@ jobs:
35
35
  run: yard doc -o doc
36
36
 
37
37
  - name: Setup Github Pages
38
- uses: actions/configure-pages@v4
38
+ uses: actions/configure-pages@v5
39
39
 
40
40
  - name: Upload Artifact
41
41
  uses: actions/upload-pages-artifact@v3
@@ -13,12 +13,12 @@ on:
13
13
  jobs:
14
14
  update-rbis:
15
15
  name: RBI Updater
16
- uses: ./.github/workflows/dependabot-rbi-updater.yml
16
+ uses: ./.github/workflows/rbi-updater.yml
17
17
  secrets: inherit
18
18
 
19
19
  ci:
20
20
  needs: update-rbis
21
- if: always() && contains(needs.*.result, 'skipped')
21
+ if: always() && contains(needs.*.result, 'success')
22
22
  name: "CI"
23
23
  uses: ./.github/workflows/ci.yml
24
24
  secrets: inherit
@@ -51,7 +51,7 @@ jobs:
51
51
  -
52
52
  name: Run Tests (With Remote Calls & Coverage Report)
53
53
  if: ${{ endsWith(matrix.ruby-version, '3.3') }}
54
- uses: paambaati/codeclimate-action@v5.0.0
54
+ uses: paambaati/codeclimate-action@v8.0.0
55
55
  env:
56
56
  CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
57
57
  REMOTE_TESTS_ENABLED: ${{ vars.REMOTE_TESTS_ENABLED }}
@@ -1,11 +1,10 @@
1
- name: Dependabot RBI Updater
1
+ name: RBI Updater
2
2
  on:
3
3
  workflow_call:
4
4
 
5
5
  jobs:
6
6
  update-rbis:
7
7
  runs-on: ubuntu-latest
8
- if: ${{ github.triggering_actor == 'dependabot[bot]' }}
9
8
 
10
9
  steps:
11
10
  -
@@ -26,7 +25,7 @@ jobs:
26
25
  -
27
26
  name: Commit RBIs
28
27
  run: |
29
- git config --local user.name "Dependabot RBI Updater"
28
+ git config --local user.name "RBI Updater"
30
29
  git config --local user.email action@github.com
31
30
  git add sorbet/*
32
31
  git diff-index --cached --quiet HEAD || git commit -m "[dependabot skip] Update RBIs"
data/.simplecov CHANGED
@@ -8,8 +8,7 @@ else
8
8
  SimpleCov::Formatter::HTMLFormatter
9
9
  end
10
10
 
11
- SimpleCov.minimum_coverage(95)
12
- SimpleCov.maximum_coverage_drop(1)
11
+ SimpleCov.minimum_coverage(90)
13
12
  SimpleCov.start do
14
13
  enable_coverage :branch
15
14
  primary_coverage :branch
data/Gemfile CHANGED
@@ -7,11 +7,10 @@ gemspec
7
7
 
8
8
  # Specify development dependencies here
9
9
  gem "toys"
10
- gem "minitest", "~> 5.22", require: false
11
- gem "mocha", "~> 2.1.0", require: false
10
+ gem "minitest", "~> 5.24", require: false
11
+ gem "mocha", "~> 2.4.0", require: false
12
12
  gem "webmock", require: false
13
13
  gem "vcr", require: false
14
- gem "pry-sorbet", "~> 0.2", require: false
15
14
  gem "rubocop-shopify", require: false
16
15
  gem "rubocop-sorbet", require: false
17
16
  gem "rubocop-minitest", require: false
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lunchmoney (1.2.0)
4
+ lunchmoney (1.4.0)
5
5
  activesupport (>= 6.1)
6
6
  faraday (>= 1.0.0)
7
7
  sorbet-runtime (>= 0.5)
@@ -9,165 +9,161 @@ PATH
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
- activesupport (7.1.3.2)
12
+ activesupport (7.2.1)
13
13
  base64
14
14
  bigdecimal
15
- concurrent-ruby (~> 1.0, >= 1.0.2)
15
+ concurrent-ruby (~> 1.0, >= 1.3.1)
16
16
  connection_pool (>= 2.2.5)
17
17
  drb
18
18
  i18n (>= 1.6, < 2)
19
+ logger (>= 1.4.2)
19
20
  minitest (>= 5.1)
20
- mutex_m
21
- tzinfo (~> 2.0)
22
- addressable (2.8.6)
23
- public_suffix (>= 2.0.2, < 6.0)
21
+ securerandom (>= 0.3)
22
+ tzinfo (~> 2.0, >= 2.0.5)
23
+ addressable (2.8.7)
24
+ public_suffix (>= 2.0.2, < 7.0)
24
25
  appraisal (2.5.0)
25
26
  bundler
26
27
  rake
27
28
  thor (>= 0.14.0)
28
29
  ast (2.4.2)
29
30
  base64 (0.2.0)
30
- bigdecimal (3.1.7)
31
- chef-utils (18.4.2)
31
+ bigdecimal (3.1.8)
32
+ chef-utils (18.5.0)
32
33
  concurrent-ruby
33
- coderay (1.1.3)
34
- concurrent-ruby (1.2.3)
34
+ concurrent-ruby (1.3.4)
35
35
  connection_pool (2.4.1)
36
36
  crack (1.0.0)
37
37
  bigdecimal
38
38
  rexml
39
- docile (1.4.0)
40
- dotenv (3.1.0)
39
+ docile (1.4.1)
40
+ dotenv (3.1.2)
41
41
  drb (2.2.1)
42
- erubi (1.12.0)
43
- faraday (2.9.0)
42
+ erubi (1.13.0)
43
+ faraday (2.10.1)
44
44
  faraday-net_http (>= 2.0, < 3.2)
45
- faraday-net_http (3.1.0)
45
+ logger
46
+ faraday-net_http (3.1.1)
46
47
  net-http
47
- hashdiff (1.1.0)
48
- i18n (1.14.4)
48
+ hashdiff (1.1.1)
49
+ i18n (1.14.5)
49
50
  concurrent-ruby (~> 1.0)
50
- json (2.7.1)
51
+ json (2.7.2)
51
52
  kramdown (2.4.0)
52
53
  rexml
53
54
  kramdown-parser-gfm (1.1.0)
54
55
  kramdown (~> 2.0)
55
56
  language_server-protocol (3.17.0.3)
57
+ logger (1.6.0)
56
58
  mdl (0.13.0)
57
59
  kramdown (~> 2.3)
58
60
  kramdown-parser-gfm (~> 1.1)
59
61
  mixlib-cli (~> 2.1, >= 2.1.1)
60
62
  mixlib-config (>= 2.2.1, < 4)
61
63
  mixlib-shellout
62
- method_source (1.0.0)
63
- minitest (5.22.3)
64
+ minitest (5.25.1)
64
65
  mixlib-cli (2.1.8)
65
66
  mixlib-config (3.0.27)
66
67
  tomlrb
67
- mixlib-shellout (3.2.7)
68
+ mixlib-shellout (3.2.8)
68
69
  chef-utils
69
- mocha (2.1.0)
70
+ mocha (2.4.5)
70
71
  ruby2_keywords (>= 0.0.5)
71
- mutex_m (0.2.0)
72
72
  net-http (0.4.1)
73
73
  uri
74
74
  netrc (0.11.0)
75
- parallel (1.24.0)
76
- parser (3.3.0.5)
75
+ parallel (1.26.3)
76
+ parser (3.3.4.2)
77
77
  ast (~> 2.4.1)
78
78
  racc
79
- prettier_print (1.2.1)
80
- prism (0.24.0)
81
- pry (0.14.2)
82
- coderay (~> 1.1)
83
- method_source (~> 1.0)
84
- pry-sorbet (0.2.1)
85
- pry
86
- public_suffix (5.0.4)
87
- racc (1.7.3)
88
- rack (3.0.10)
79
+ prism (0.30.0)
80
+ public_suffix (6.0.1)
81
+ racc (1.8.1)
82
+ rack (3.1.7)
89
83
  rainbow (3.1.1)
90
- rake (13.1.0)
91
- rbi (0.1.9)
92
- prism (>= 0.18.0, < 0.25)
84
+ rake (13.2.1)
85
+ rbi (0.1.14)
86
+ prism (>= 0.18.0, < 1.0.0)
93
87
  sorbet-runtime (>= 0.5.9204)
94
- regexp_parser (2.9.0)
95
- rexml (3.2.6)
96
- rubocop (1.62.1)
88
+ regexp_parser (2.9.2)
89
+ rexml (3.3.6)
90
+ strscan
91
+ rubocop (1.65.1)
97
92
  json (~> 2.3)
98
93
  language_server-protocol (>= 3.17.0)
99
94
  parallel (~> 1.10)
100
95
  parser (>= 3.3.0.2)
101
96
  rainbow (>= 2.2.2, < 4.0)
102
- regexp_parser (>= 1.8, < 3.0)
97
+ regexp_parser (>= 2.4, < 3.0)
103
98
  rexml (>= 3.2.5, < 4.0)
104
99
  rubocop-ast (>= 1.31.1, < 2.0)
105
100
  ruby-progressbar (~> 1.7)
106
101
  unicode-display_width (>= 2.4.0, < 3.0)
107
- rubocop-ast (1.31.2)
108
- parser (>= 3.3.0.4)
109
- rubocop-minitest (0.35.0)
102
+ rubocop-ast (1.32.1)
103
+ parser (>= 3.3.1.0)
104
+ rubocop-minitest (0.35.1)
110
105
  rubocop (>= 1.61, < 2.0)
111
106
  rubocop-ast (>= 1.31.1, < 2.0)
112
- rubocop-rails (2.24.1)
107
+ rubocop-rails (2.26.0)
113
108
  activesupport (>= 4.2.0)
114
109
  rack (>= 1.1)
115
- rubocop (>= 1.33.0, < 2.0)
110
+ rubocop (>= 1.52.0, < 2.0)
116
111
  rubocop-ast (>= 1.31.1, < 2.0)
117
112
  rubocop-shopify (2.15.1)
118
113
  rubocop (~> 1.51)
119
- rubocop-sorbet (0.8.0)
120
- rubocop (>= 0.90.0)
114
+ rubocop-sorbet (0.8.5)
115
+ rubocop (>= 1)
121
116
  ruby-progressbar (1.13.0)
122
117
  ruby2_keywords (0.0.5)
118
+ securerandom (0.3.1)
123
119
  simplecov (0.22.0)
124
120
  docile (~> 1.1)
125
121
  simplecov-html (~> 0.11)
126
122
  simplecov_json_formatter (~> 0.1)
127
123
  simplecov-html (0.12.3)
128
124
  simplecov_json_formatter (0.1.4)
129
- sorbet (0.5.11305)
130
- sorbet-static (= 0.5.11305)
131
- sorbet-runtime (0.5.11305)
132
- sorbet-static (0.5.11305-universal-darwin)
133
- sorbet-static (0.5.11305-x86_64-linux)
134
- sorbet-static-and-runtime (0.5.11305)
135
- sorbet (= 0.5.11305)
136
- sorbet-runtime (= 0.5.11305)
137
- spoom (1.2.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)
138
134
  erubi (>= 1.10.0)
135
+ prism (>= 0.28.0)
139
136
  sorbet-static-and-runtime (>= 0.5.10187)
140
- syntax_tree (>= 6.1.1)
141
137
  thor (>= 0.19.2)
142
- syntax_tree (6.2.0)
143
- prettier_print (>= 1.2.0)
144
- tapioca (0.13.1)
138
+ strscan (3.1.0)
139
+ tapioca (0.16.1)
145
140
  bundler (>= 2.2.25)
146
141
  netrc (>= 0.11.0)
147
142
  parallel (>= 1.21.0)
148
- rbi (>= 0.1.4, < 0.2)
143
+ rbi (>= 0.1.14, < 0.2)
149
144
  sorbet-static-and-runtime (>= 0.5.11087)
150
145
  spoom (>= 1.2.0)
151
146
  thor (>= 1.2.0)
152
147
  yard-sorbet
153
148
  thor (1.3.1)
154
149
  tomlrb (2.0.3)
155
- toys (0.15.5)
156
- toys-core (= 0.15.5)
157
- toys-core (0.15.5)
150
+ toys (0.15.6)
151
+ toys-core (= 0.15.6)
152
+ toys-core (0.15.6)
158
153
  tzinfo (2.0.6)
159
154
  concurrent-ruby (~> 1.0)
160
155
  unicode-display_width (2.5.0)
161
156
  uri (0.13.0)
162
- vcr (6.2.0)
163
- webmock (3.23.0)
157
+ vcr (6.3.1)
158
+ base64
159
+ webmock (3.23.1)
164
160
  addressable (>= 2.8.0)
165
161
  crack (>= 0.3.2)
166
162
  hashdiff (>= 0.4.0, < 2.0.0)
167
163
  yard (0.9.36)
168
- yard-sorbet (0.8.1)
169
- sorbet-runtime (>= 0.5)
170
- yard (>= 0.9)
164
+ yard-sorbet (0.9.0)
165
+ sorbet-runtime
166
+ yard
171
167
 
172
168
  PLATFORMS
173
169
  arm64-darwin-22
@@ -180,9 +176,8 @@ DEPENDENCIES
180
176
  dotenv
181
177
  lunchmoney!
182
178
  mdl
183
- minitest (~> 5.22)
184
- mocha (~> 2.1.0)
185
- pry-sorbet (~> 0.2)
179
+ minitest (~> 5.24)
180
+ mocha (~> 2.4.0)
186
181
  rubocop-minitest
187
182
  rubocop-rails
188
183
  rubocop-shopify
@@ -53,6 +53,10 @@ module LunchMoney
53
53
  sig { returns(T.nilable(T::Array[LunchMoney::Objects::ChildTransaction])) }
54
54
  attr_accessor :children
55
55
 
56
+ # TODO: Fix types when I have a response on what they should be https://github.com/mmenanno/lunchmoney/issues/329
57
+ sig { returns(T.untyped) }
58
+ attr_accessor :recurring_granularity, :recurring_quantity
59
+
56
60
  sig do
57
61
  params(
58
62
  id: Integer,
@@ -103,6 +107,8 @@ module LunchMoney
103
107
  display_notes: T.nilable(String),
104
108
  external_id: T.nilable(Integer),
105
109
  children: T.nilable(T::Array[LunchMoney::Objects::ChildTransaction]),
110
+ recurring_granularity: T.untyped,
111
+ recurring_quantity: T.untyped,
106
112
  ).void
107
113
  end
108
114
  def initialize(id:, date:, amount:, currency:, to_base:, payee:, is_income:, exclude_from_budget:,
@@ -113,7 +119,7 @@ module LunchMoney
113
119
  recurring_currency: nil, parent_id: nil, group_id: nil, asset_id: nil, asset_institution_name: nil,
114
120
  asset_name: nil, asset_display_name: nil, asset_status: nil, plaid_account_id: nil, plaid_account_name: nil,
115
121
  plaid_account_mask: nil, institution_name: nil, plaid_account_display_name: nil, plaid_metadata: nil,
116
- display_notes: nil, external_id: nil, children: nil)
122
+ display_notes: nil, external_id: nil, children: nil, recurring_granularity: nil, recurring_quantity: nil)
117
123
  super(id:, date:, amount:, currency:, to_base:, payee:, notes:, asset_id:, plaid_account_id:)
118
124
  @is_income = is_income
119
125
  @exclude_from_budget = exclude_from_budget
@@ -154,6 +160,8 @@ module LunchMoney
154
160
  @display_notes = display_notes
155
161
  @children = children
156
162
  @external_id = external_id
163
+ @recurring_granularity = recurring_granularity
164
+ @recurring_quantity = recurring_quantity
157
165
  end
158
166
  end
159
167
  end
@@ -21,16 +21,19 @@ module LunchMoney
21
21
  user_email: String,
22
22
  account_id: Integer,
23
23
  budget_name: String,
24
+ primary_currency: String,
24
25
  api_key_label: T.nilable(String),
25
26
  ).void
26
27
  end
27
- def initialize(user_id:, user_name:, user_email:, account_id:, budget_name:, api_key_label: nil)
28
+ def initialize(user_id:, user_name:, user_email:, account_id:, budget_name:, primary_currency:,
29
+ api_key_label: nil)
28
30
  super()
29
31
  @user_id = user_id
30
32
  @user_name = user_name
31
33
  @user_email = user_email
32
34
  @account_id = account_id
33
35
  @budget_name = budget_name
36
+ @primary_currency = primary_currency
34
37
  @api_key_label = api_key_label
35
38
  end
36
39
  end
@@ -3,5 +3,5 @@
3
3
 
4
4
  module LunchMoney
5
5
  # Current version of the gem
6
- VERSION = "1.2.0"
6
+ VERSION = "1.4.0"
7
7
  end
@@ -80,11 +80,23 @@ class Object
80
80
  end
81
81
 
82
82
  class Hash
83
+ sig { returns(T::Boolean) }
84
+ def blank?; end
85
+
86
+ sig { returns(T::Boolean) }
87
+ def present?; end
88
+
83
89
  sig { returns(T::Boolean) }
84
90
  def extractable_options?; end
85
91
  end
86
92
 
87
93
  class Array
94
+ sig { returns(T::Boolean) }
95
+ def blank?; end
96
+
97
+ sig { returns(T::Boolean) }
98
+ def present?; end
99
+
88
100
  sig { params(position: Integer).returns(T.self_type) }
89
101
  def from(position); end
90
102
 
@@ -247,9 +259,21 @@ class Time
247
259
  # @shim: since `blank?` is always false, `present?` always returns `true`
248
260
  sig { returns(TrueClass) }
249
261
  def present?; end
262
+
263
+ sig { returns(ActiveSupport::TimeZone) }
264
+ def self.zone; end
265
+
266
+ sig { returns(T.any(ActiveSupport::TimeWithZone, ::Time)) }
267
+ def self.current; end
250
268
  end
251
269
 
252
270
  class Symbol
271
+ sig { returns(T::Boolean) }
272
+ def blank?; end
273
+
274
+ sig { returns(T::Boolean) }
275
+ def present?; end
276
+
253
277
  # alias for `#start_with?`
254
278
  sig { params(string_or_regexp: T.any(String, Regexp)).returns(T::Boolean) }
255
279
  def starts_with?(*string_or_regexp); end
@@ -347,6 +371,9 @@ class String
347
371
  sig { params(count: T.nilable(T.any(Integer, Symbol)), locale: T.nilable(Symbol)).returns(String) }
348
372
  def pluralize(count = nil, locale = :en); end
349
373
 
374
+ sig { returns(T::Boolean) }
375
+ def present?; end
376
+
350
377
  sig { params(patterns: T.any(String, Regexp)).returns(String) }
351
378
  def remove(*patterns); end
352
379
 
@@ -418,4 +445,8 @@ class ActiveSupport::ErrorReporter
418
445
 
419
446
  sig { params(error: Exception, handled: T::Boolean, severity: T.nilable(Symbol), context: T::Hash[Symbol, T.untyped], source: T.nilable(String)).void }
420
447
  def report(error, handled: true, severity: T.unsafe(nil), context: T.unsafe(nil), source: T.unsafe(nil)); end
448
+
449
+ # @version >= 7.2.0.beta1
450
+ sig { params(error: T.any(Exception, String), severity: T.nilable(Symbol), context: T::Hash[Symbol, T.untyped], source: T.nilable(String)).void }
451
+ def unexpected(error, severity: T.unsafe(nil), context: T.unsafe(nil), source: T.unsafe(nil)); end
421
452
  end
@@ -0,0 +1,119 @@
1
+ # typed: true
2
+
3
+ # DO NOT EDIT MANUALLY
4
+ # This file was pulled from a central RBI files repository.
5
+ # Please run `bin/tapioca annotations` to update it.
6
+
7
+ module Minitest::Assertions
8
+ sig { params(test: T.anything, msg: T.anything).returns(TrueClass) }
9
+ def assert(test, msg = nil); end
10
+
11
+ sig { params(obj: T.anything, msg: T.anything).returns(TrueClass) }
12
+ def assert_empty(obj, msg = nil); end
13
+
14
+ sig { params(exp: T.anything, act: T.anything, msg: T.anything).returns(TrueClass) }
15
+ def assert_equal(exp, act, msg = nil); end
16
+
17
+ sig { params(exp: T.anything, act: T.anything, delta: Numeric, msg: T.anything).returns(TrueClass) }
18
+ def assert_in_delta(exp, act, delta = T.unsafe(nil), msg = nil); end
19
+
20
+ sig { params(a: T.anything, b: T.anything, epsilon: Numeric, msg: T.anything).returns(TrueClass) }
21
+ def assert_in_epsilon(a, b, epsilon = T.unsafe(nil), msg = nil); end
22
+
23
+ sig { params(collection: T.anything, obj: T.anything, msg: T.anything).returns(TrueClass) }
24
+ def assert_includes(collection, obj, msg = nil); end
25
+
26
+ sig { params(cls: T.anything, obj: T.anything, msg: T.anything).returns(TrueClass) }
27
+ def assert_instance_of(cls, obj, msg = nil); end
28
+
29
+ sig { params(cls: T.anything, obj: T.anything, msg: T.anything).returns(TrueClass) }
30
+ def assert_kind_of(cls, obj, msg = nil); end
31
+
32
+ sig { params(matcher: T.any(String, Regexp), obj: T.anything, msg: T.anything).returns(MatchData) }
33
+ def assert_match(matcher, obj, msg = nil); end
34
+
35
+ sig { params(obj: T.anything, msg: T.anything).returns(TrueClass) }
36
+ def assert_nil(obj, msg = nil); end
37
+
38
+ sig { params(o1: T.anything, op: T.any(Symbol, String), o2: T.anything, msg: T.anything).returns(TrueClass) }
39
+ def assert_operator(o1, op, o2 = T.unsafe(nil), msg = nil); end
40
+
41
+ sig { params(stdout: T.nilable(T.any(String, Regexp)), stderr: T.nilable(T.any(String, Regexp)), block: T.proc.void).returns(T::Boolean) }
42
+ def assert_output(stdout = nil, stderr = nil, &block); end
43
+
44
+ sig { params(path: T.any(String, Pathname), msg: T.anything).returns(TrueClass) }
45
+ def assert_path_exists(path, msg = nil); end
46
+
47
+ sig { params(block: T.proc.void).returns(TrueClass) }
48
+ def assert_pattern(&block); end
49
+
50
+ sig { params(o1: T.anything, op: T.any(String, Symbol), msg: T.anything).returns(TrueClass) }
51
+ def assert_predicate(o1, op, msg = nil); end
52
+
53
+ sig { params(exp: NilClass, block: T.proc.void).returns(StandardError) }
54
+ sig { type_parameters(:T).params(exp: T.any(T::Class[T.type_parameter(:T)], Regexp, String), block: T.proc.void).returns(T.type_parameter(:T)) }
55
+ def assert_raises(*exp, &block); end
56
+
57
+ sig { params(obj: T.anything, meth: T.any(String, Symbol), msg: T.anything, include_all: T::Boolean).returns(TrueClass) }
58
+ def assert_respond_to(obj, meth, msg = nil, include_all: false); end
59
+
60
+ sig { params(exp: T.anything, act: T.anything, msg: T.anything).returns(TrueClass) }
61
+ def assert_same(exp, act, msg = nil); end
62
+
63
+ sig { params(send_ary: T::Array[T.anything], m: T.anything).returns(T::Boolean) }
64
+ def assert_send(send_ary, m = nil); end
65
+
66
+ sig { params(block: T.proc.void).returns(T::Boolean) }
67
+ def assert_silent(&block); end
68
+
69
+ sig { params(sym: Symbol, msg: T.anything, block: T.proc.void).returns(T.anything) }
70
+ def assert_throws(sym, msg = nil, &block); end
71
+
72
+ sig { params(test: T.anything, msg: T.anything).returns(TrueClass) }
73
+ def refute(test, msg = nil); end
74
+
75
+ sig { params(obj: T.anything, msg: T.anything).returns(TrueClass) }
76
+ def refute_empty(obj, msg = nil); end
77
+
78
+ sig { params(exp: T.anything, act: T.anything, msg: T.anything).returns(TrueClass) }
79
+ def refute_equal(exp, act, msg = nil); end
80
+
81
+ sig { params(exp: T.anything, act: T.anything, delta: Numeric, msg: T.anything).returns(TrueClass) }
82
+ def refute_in_delta(exp, act, delta = T.unsafe(nil), msg = nil); end
83
+
84
+ sig { params(a: T.anything, b: T.anything, epsilon: Numeric, msg: T.anything).returns(TrueClass) }
85
+ def refute_in_epsilon(a, b, epsilon = T.unsafe(nil), msg = nil); end
86
+
87
+ sig { params(collection: T.anything, obj: T.anything, msg: T.anything).returns(TrueClass) }
88
+ def refute_includes(collection, obj, msg = nil); end
89
+
90
+ sig { params(cls: T.anything, obj: T.anything, msg: T.anything).returns(TrueClass) }
91
+ def refute_instance_of(cls, obj, msg = nil); end
92
+
93
+ sig { params(cls: T.anything, obj: T.anything, msg: T.anything).returns(TrueClass) }
94
+ def refute_kind_of(cls, obj, msg = nil); end
95
+
96
+ sig { params(matcher: T.any(String, Regexp), obj: T.anything, msg: T.anything).returns(TrueClass) }
97
+ def refute_match(matcher, obj, msg = nil); end
98
+
99
+ sig { params(obj: T.anything, msg: T.anything).returns(TrueClass) }
100
+ def refute_nil(obj, msg = nil); end
101
+
102
+ sig { params(block: T.proc.void).returns(TrueClass) }
103
+ def refute_pattern(&block); end
104
+
105
+ sig { params(o1: T.anything, op: T.any(Symbol, String), o2: T.anything, msg: T.anything).returns(TrueClass) }
106
+ def refute_operator(o1, op, o2 = T.unsafe(nil), msg = nil); end
107
+
108
+ sig { params(path: T.any(String, Pathname), msg: T.anything).returns(TrueClass) }
109
+ def refute_path_exists(path, msg = nil); end
110
+
111
+ sig { params(o1: T.anything, op: T.any(String, Symbol), msg: T.anything).returns(TrueClass) }
112
+ def refute_predicate(o1, op, msg = nil); end
113
+
114
+ sig { params(obj: T.anything, meth: T.any(String, Symbol), msg: T.anything, include_all: T::Boolean).returns(TrueClass) }
115
+ def refute_respond_to(obj, meth, msg = nil, include_all: false); end
116
+
117
+ sig { params(exp: T.anything, act: T.anything, msg: T.anything).returns(TrueClass) }
118
+ def refute_same(exp, act, msg = nil); end
119
+ end
@@ -4,6 +4,7 @@
4
4
  # This is an autogenerated file for dynamic methods in `ActiveSupport::Callbacks`.
5
5
  # Please instead update this file by running `bin/tapioca dsl ActiveSupport::Callbacks`.
6
6
 
7
+
7
8
  module ActiveSupport::Callbacks
8
9
  include GeneratedInstanceMethods
9
10