lunchmoney 1.3.0 → 1.4.1

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 (78) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +7 -0
  3. data/.github/workflows/build_and_publish_yard_docs.yml +2 -2
  4. data/.github/workflows/ci.yml +1 -1
  5. data/.ruby-version +1 -1
  6. data/.simplecov +2 -2
  7. data/Gemfile +2 -3
  8. data/Gemfile.lock +90 -84
  9. data/lib/lunchmoney/api.rb +1 -0
  10. data/lib/lunchmoney/calls/categories.rb +0 -2
  11. data/lib/lunchmoney/calls/transactions.rb +0 -1
  12. data/lib/lunchmoney/deprecate.rb +35 -0
  13. data/lib/lunchmoney/objects/asset.rb +6 -1
  14. data/lib/lunchmoney/objects/plaid_account.rb +6 -1
  15. data/lib/lunchmoney/objects/transaction.rb +9 -1
  16. data/lib/lunchmoney/version.rb +1 -1
  17. data/sorbet/rbi/annotations/activesupport.rbi +36 -0
  18. data/sorbet/rbi/annotations/minitest.rbi +119 -0
  19. data/sorbet/rbi/gems/{activesupport@7.1.3.2.rbi → activesupport@7.2.2.1.rbi} +1407 -1292
  20. data/sorbet/rbi/gems/{addressable@2.8.6.rbi → addressable@2.8.7.rbi} +2 -1
  21. data/sorbet/rbi/gems/benchmark@0.4.0.rbi +618 -0
  22. data/sorbet/rbi/gems/{bigdecimal@3.1.7.rbi → bigdecimal@3.1.9.rbi} +1 -0
  23. data/sorbet/rbi/gems/{chef-utils@18.4.2.rbi → chef-utils@18.5.0.rbi} +1 -0
  24. data/sorbet/rbi/gems/{concurrent-ruby@1.2.3.rbi → concurrent-ruby@1.3.5.rbi} +108 -41
  25. data/sorbet/rbi/gems/{connection_pool@2.4.1.rbi → connection_pool@2.5.0.rbi} +1 -0
  26. data/sorbet/rbi/gems/{docile@1.4.0.rbi → docile@1.4.1.rbi} +1 -0
  27. data/sorbet/rbi/gems/{dotenv@3.1.2.rbi → dotenv@3.1.7.rbi} +21 -29
  28. data/sorbet/rbi/gems/{erubi@1.12.0.rbi → erubi@1.13.1.rbi} +25 -15
  29. data/sorbet/rbi/gems/{faraday-net_http@3.1.0.rbi → faraday-net_http@3.4.0.rbi} +30 -29
  30. data/sorbet/rbi/gems/{faraday@2.9.0.rbi → faraday@2.12.2.rbi} +104 -49
  31. data/sorbet/rbi/gems/{hashdiff@1.1.0.rbi → hashdiff@1.1.2.rbi} +3 -2
  32. data/sorbet/rbi/gems/{i18n@1.14.4.rbi → i18n@1.14.7.rbi} +109 -80
  33. data/sorbet/rbi/gems/{json@2.7.2.rbi → json@2.10.2.rbi} +697 -146
  34. data/sorbet/rbi/gems/language_server-protocol@3.17.0.4.rbi +9 -0
  35. data/sorbet/rbi/gems/logger@1.6.6.rbi +940 -0
  36. data/sorbet/rbi/gems/{minitest@5.22.3.rbi → minitest@5.25.5.rbi} +319 -302
  37. data/sorbet/rbi/gems/{mixlib-shellout@3.2.7.rbi → mixlib-shellout@3.2.8.rbi} +1 -0
  38. data/sorbet/rbi/gems/{mocha@2.2.0.rbi → mocha@2.7.1.rbi} +174 -149
  39. data/sorbet/rbi/gems/{net-http@0.4.1.rbi → net-http@0.6.0.rbi} +360 -181
  40. data/sorbet/rbi/gems/{parallel@1.24.0.rbi → parallel@1.26.3.rbi} +32 -21
  41. data/sorbet/rbi/gems/{parser@3.3.1.0.rbi → parser@3.3.7.1.rbi} +256 -203
  42. data/sorbet/rbi/gems/{prism@0.29.0.rbi → prism@1.4.0.rbi} +15882 -12137
  43. data/sorbet/rbi/gems/{public_suffix@5.0.4.rbi → public_suffix@6.0.1.rbi} +1 -0
  44. data/sorbet/rbi/gems/{racc@1.7.3.rbi → racc@1.8.1.rbi} +34 -33
  45. data/sorbet/rbi/gems/{rack@3.0.10.rbi → rack@3.1.9.rbi} +704 -989
  46. data/sorbet/rbi/gems/{rake@13.1.0.rbi → rake@13.2.1.rbi} +56 -55
  47. data/sorbet/rbi/gems/rbi@0.3.1.rbi +6599 -0
  48. data/sorbet/rbi/gems/rbs@3.9.0.rbi +6978 -0
  49. data/sorbet/rbi/gems/{regexp_parser@2.9.1.rbi → regexp_parser@2.10.0.rbi} +195 -172
  50. data/sorbet/rbi/gems/{rexml@3.2.6.rbi → rexml@3.4.1.rbi} +844 -279
  51. data/sorbet/rbi/gems/{rubocop-ast@1.31.3.rbi → rubocop-ast@1.38.0.rbi} +1380 -732
  52. data/sorbet/rbi/gems/{rubocop-minitest@0.35.0.rbi → rubocop-minitest@0.36.0.rbi} +13 -10
  53. data/sorbet/rbi/gems/{rubocop-rails@2.24.1.rbi → rubocop-rails@2.29.1.rbi} +9604 -6343
  54. data/sorbet/rbi/gems/{rubocop-sorbet@0.8.3.rbi → rubocop-sorbet@0.8.7.rbi} +168 -67
  55. data/sorbet/rbi/gems/{rubocop@1.63.5.rbi → rubocop@1.71.2.rbi} +6831 -4378
  56. data/sorbet/rbi/gems/securerandom@0.4.1.rbi +75 -0
  57. data/sorbet/rbi/gems/spoom@1.6.1.rbi +7274 -0
  58. data/sorbet/rbi/gems/{tapioca@0.14.1.rbi → tapioca@0.16.11.rbi} +471 -384
  59. data/sorbet/rbi/gems/{thor@1.3.1.rbi → thor@1.3.2.rbi} +58 -31
  60. data/sorbet/rbi/gems/{toys-core@0.15.5.rbi → toys-core@0.15.6.rbi} +1 -0
  61. data/sorbet/rbi/gems/{toys@0.15.5.rbi → toys@0.15.6.rbi} +4 -3
  62. data/sorbet/rbi/gems/unicode-display_width@3.1.4.rbi +132 -0
  63. data/sorbet/rbi/gems/unicode-emoji@4.0.4.rbi +251 -0
  64. data/sorbet/rbi/gems/{uri@0.13.0.rbi → uri@1.0.3.rbi} +278 -256
  65. data/sorbet/rbi/gems/{vcr@6.2.0.rbi → vcr@6.3.1.rbi} +72 -68
  66. data/sorbet/rbi/gems/{webmock@3.23.0.rbi → webmock@3.25.1.rbi} +102 -78
  67. data/sorbet/rbi/gems/{yard-sorbet@0.8.1.rbi → yard-sorbet@0.9.0.rbi} +36 -29
  68. data/sorbet/rbi/gems/{yard@0.9.36.rbi → yard@0.9.37.rbi} +394 -235
  69. metadata +55 -58
  70. data/sorbet/rbi/gems/coderay@1.1.3.rbi +0 -3426
  71. data/sorbet/rbi/gems/language_server-protocol@3.17.0.3.rbi +0 -14237
  72. data/sorbet/rbi/gems/method_source@1.0.0.rbi +0 -272
  73. data/sorbet/rbi/gems/mutex_m@0.2.0.rbi +0 -93
  74. data/sorbet/rbi/gems/pry-sorbet@0.2.1.rbi +0 -966
  75. data/sorbet/rbi/gems/pry@0.14.2.rbi +0 -10077
  76. data/sorbet/rbi/gems/rbi@0.1.13.rbi +0 -3078
  77. data/sorbet/rbi/gems/spoom@1.3.2.rbi +0 -4421
  78. data/sorbet/rbi/gems/unicode-display_width@2.5.0.rbi +0 -65
@@ -4,6 +4,7 @@
4
4
  # This is an autogenerated file for types exported from the `i18n` gem.
5
5
  # Please instead update this file by running `bin/tapioca gem i18n`.
6
6
 
7
+
7
8
  # source://i18n//lib/i18n/gettext/po_parser.rb#15
8
9
  module GetText; end
9
10
 
@@ -87,7 +88,7 @@ module I18n
87
88
  # source://i18n//lib/i18n/interpolate/ruby.rb#29
88
89
  def interpolate_hash(string, values); end
89
90
 
90
- # source://i18n//lib/i18n.rb#37
91
+ # source://i18n//lib/i18n.rb#38
91
92
  def new_double_nested_cache; end
92
93
 
93
94
  # @return [Boolean]
@@ -100,10 +101,10 @@ module I18n
100
101
  # extra keys as I18n options, you should call I18n.reserve_key
101
102
  # before any I18n.translate (etc) calls are made.
102
103
  #
103
- # source://i18n//lib/i18n.rb#45
104
+ # source://i18n//lib/i18n.rb#46
104
105
  def reserve_key(key); end
105
106
 
106
- # source://i18n//lib/i18n.rb#50
107
+ # source://i18n//lib/i18n.rb#51
107
108
  def reserved_keys_pattern; end
108
109
  end
109
110
  end
@@ -123,15 +124,15 @@ module I18n::Backend::Base
123
124
  #
124
125
  # @raise [NotImplementedError]
125
126
  #
126
- # source://i18n//lib/i18n/backend/base.rb#96
127
+ # source://i18n//lib/i18n/backend/base.rb#97
127
128
  def available_locales; end
128
129
 
129
- # source://i18n//lib/i18n/backend/base.rb#104
130
+ # source://i18n//lib/i18n/backend/base.rb#105
130
131
  def eager_load!; end
131
132
 
132
133
  # @return [Boolean]
133
134
  #
134
- # source://i18n//lib/i18n/backend/base.rb#70
135
+ # source://i18n//lib/i18n/backend/base.rb#71
135
136
  def exists?(locale, key, options = T.unsafe(nil)); end
136
137
 
137
138
  # Accepts a list of paths to translation files. Loads translations from
@@ -147,10 +148,10 @@ module I18n::Backend::Base
147
148
  #
148
149
  # @raise [ArgumentError]
149
150
  #
150
- # source://i18n//lib/i18n/backend/base.rb#77
151
+ # source://i18n//lib/i18n/backend/base.rb#78
151
152
  def localize(locale, object, format = T.unsafe(nil), options = T.unsafe(nil)); end
152
153
 
153
- # source://i18n//lib/i18n/backend/base.rb#100
154
+ # source://i18n//lib/i18n/backend/base.rb#101
154
155
  def reload!; end
155
156
 
156
157
  # This method receives a locale, a data hash and options for storing translations.
@@ -174,7 +175,7 @@ module I18n::Backend::Base
174
175
  # ann: 'good', john: 'big'
175
176
  # #=> { people: { ann: "Ann is good", john: "John is big" } }
176
177
  #
177
- # source://i18n//lib/i18n/backend/base.rb#209
178
+ # source://i18n//lib/i18n/backend/base.rb#217
178
179
  def deep_interpolate(locale, data, values = T.unsafe(nil)); end
179
180
 
180
181
  # Evaluates defaults.
@@ -182,12 +183,12 @@ module I18n::Backend::Base
182
183
  # first translation that can be resolved. Otherwise it tries to resolve
183
184
  # the translation directly.
184
185
  #
185
- # source://i18n//lib/i18n/backend/base.rb#127
186
+ # source://i18n//lib/i18n/backend/base.rb#128
186
187
  def default(locale, object, subject, options = T.unsafe(nil)); end
187
188
 
188
189
  # @return [Boolean]
189
190
  #
190
- # source://i18n//lib/i18n/backend/base.rb#110
191
+ # source://i18n//lib/i18n/backend/base.rb#111
191
192
  def eager_loaded?; end
192
193
 
193
194
  # Interpolates values into a given subject.
@@ -198,10 +199,10 @@ module I18n::Backend::Base
198
199
  #
199
200
  # if the given subject is an array then:
200
201
  # each element of the array is recursively interpolated (until it finds a string)
201
- # method interpolates ["yes, %{user}", ["maybe no, %{user}, "no, %{user}"]], :user => "bartuz"
202
- # # => "["yes, bartuz",["maybe no, bartuz", "no, bartuz"]]"
202
+ # method interpolates ["yes, %{user}", ["maybe no, %{user}", "no, %{user}"]], :user => "bartuz"
203
+ # # => ["yes, bartuz", ["maybe no, bartuz", "no, bartuz"]]
203
204
  #
204
- # source://i18n//lib/i18n/backend/base.rb#193
205
+ # source://i18n//lib/i18n/backend/base.rb#201
205
206
  def interpolate(locale, subject, values = T.unsafe(nil)); end
206
207
 
207
208
  # Loads a single translations file by delegating to #load_rb or
@@ -211,41 +212,41 @@ module I18n::Backend::Base
211
212
  #
212
213
  # @raise [UnknownFileType]
213
214
  #
214
- # source://i18n//lib/i18n/backend/base.rb#232
215
+ # source://i18n//lib/i18n/backend/base.rb#240
215
216
  def load_file(filename); end
216
217
 
217
218
  # Loads a JSON translations file. The data must have locales as
218
219
  # toplevel keys.
219
220
  #
220
- # source://i18n//lib/i18n/backend/base.rb#268
221
+ # source://i18n//lib/i18n/backend/base.rb#276
221
222
  def load_json(filename); end
222
223
 
223
224
  # Loads a plain Ruby translations file. eval'ing the file must yield
224
225
  # a Hash containing translation data with locales as toplevel keys.
225
226
  #
226
- # source://i18n//lib/i18n/backend/base.rb#246
227
+ # source://i18n//lib/i18n/backend/base.rb#254
227
228
  def load_rb(filename); end
228
229
 
229
230
  # Loads a YAML translations file. The data must have locales as
230
231
  # toplevel keys.
231
232
  #
232
- # source://i18n//lib/i18n/backend/base.rb#253
233
+ # source://i18n//lib/i18n/backend/base.rb#261
233
234
  def load_yaml(filename); end
234
235
 
235
236
  # Loads a YAML translations file. The data must have locales as
236
237
  # toplevel keys.
237
238
  #
238
- # source://i18n//lib/i18n/backend/base.rb#253
239
+ # source://i18n//lib/i18n/backend/base.rb#261
239
240
  def load_yml(filename); end
240
241
 
241
242
  # The method which actually looks up for the translation in the store.
242
243
  #
243
244
  # @raise [NotImplementedError]
244
245
  #
245
- # source://i18n//lib/i18n/backend/base.rb#115
246
+ # source://i18n//lib/i18n/backend/base.rb#116
246
247
  def lookup(locale, key, scope = T.unsafe(nil), options = T.unsafe(nil)); end
247
248
 
248
- # source://i18n//lib/i18n/backend/base.rb#300
249
+ # source://i18n//lib/i18n/backend/base.rb#308
249
250
  def pluralization_key(entry, count); end
250
251
 
251
252
  # Picks a translation from a pluralized mnemonic subkey according to English
@@ -259,7 +260,7 @@ module I18n::Backend::Base
259
260
  #
260
261
  # @raise [InvalidPluralizationData]
261
262
  #
262
- # source://i18n//lib/i18n/backend/base.rb#174
263
+ # source://i18n//lib/i18n/backend/base.rb#182
263
264
  def pluralize(locale, entry, count); end
264
265
 
265
266
  # Resolves a translation.
@@ -267,7 +268,7 @@ module I18n::Backend::Base
267
268
  # given options. If it is a Proc then it will be evaluated. All other
268
269
  # subjects will be returned directly.
269
270
  #
270
- # source://i18n//lib/i18n/backend/base.rb#149
271
+ # source://i18n//lib/i18n/backend/base.rb#150
271
272
  def resolve(locale, object, subject, options = T.unsafe(nil)); end
272
273
 
273
274
  # Resolves a translation.
@@ -275,15 +276,15 @@ module I18n::Backend::Base
275
276
  # given options. If it is a Proc then it will be evaluated. All other
276
277
  # subjects will be returned directly.
277
278
  #
278
- # source://i18n//lib/i18n/backend/base.rb#149
279
+ # source://i18n//lib/i18n/backend/base.rb#150
279
280
  def resolve_entry(locale, object, subject, options = T.unsafe(nil)); end
280
281
 
281
282
  # @return [Boolean]
282
283
  #
283
- # source://i18n//lib/i18n/backend/base.rb#119
284
+ # source://i18n//lib/i18n/backend/base.rb#120
284
285
  def subtrees?; end
285
286
 
286
- # source://i18n//lib/i18n/backend/base.rb#281
287
+ # source://i18n//lib/i18n/backend/base.rb#289
287
288
  def translate_localization_format(locale, object, format, options); end
288
289
  end
289
290
 
@@ -447,10 +448,10 @@ end
447
448
  module I18n::Backend::Fallbacks
448
449
  # @return [Boolean]
449
450
  #
450
- # source://i18n//lib/i18n/backend/fallbacks.rb#94
451
+ # source://i18n//lib/i18n/backend/fallbacks.rb#98
451
452
  def exists?(locale, key, options = T.unsafe(nil)); end
452
453
 
453
- # source://i18n//lib/i18n/backend/fallbacks.rb#85
454
+ # source://i18n//lib/i18n/backend/fallbacks.rb#89
454
455
  def extract_non_symbol_default!(options); end
455
456
 
456
457
  # source://i18n//lib/i18n/backend/fallbacks.rb#67
@@ -474,7 +475,7 @@ module I18n::Backend::Fallbacks
474
475
 
475
476
  # Overwrite on_fallback to add specified logic when the fallback succeeds.
476
477
  #
477
- # source://i18n//lib/i18n/backend/fallbacks.rb#110
478
+ # source://i18n//lib/i18n/backend/fallbacks.rb#114
478
479
  def on_fallback(_original_locale, _fallback_locale, _key, _options); end
479
480
  end
480
481
 
@@ -1060,14 +1061,14 @@ end
1060
1061
  # The implementation is provided by a Implementation module allowing to easily
1061
1062
  # extend Simple backend's behavior by including modules. E.g.:
1062
1063
  #
1063
- # module I18n::Backend::Pluralization
1064
- # def pluralize(*args)
1065
- # # extended pluralization logic
1066
- # super
1067
- # end
1068
- # end
1064
+ # module I18n::Backend::Pluralization
1065
+ # def pluralize(*args)
1066
+ # # extended pluralization logic
1067
+ # super
1068
+ # end
1069
+ # end
1069
1070
  #
1070
- # I18n::Backend::Simple.include(I18n::Backend::Pluralization)
1071
+ # I18n::Backend::Simple.include(I18n::Backend::Pluralization)
1071
1072
  #
1072
1073
  # source://i18n//lib/i18n/backend/simple.rb#21
1073
1074
  class I18n::Backend::Simple
@@ -1192,69 +1193,69 @@ class I18n::Backend::Transliterator::ProcTransliterator
1192
1193
  def transliterate(string, replacement = T.unsafe(nil)); end
1193
1194
  end
1194
1195
 
1195
- # source://i18n//lib/i18n.rb#54
1196
+ # source://i18n//lib/i18n.rb#55
1196
1197
  module I18n::Base
1197
- # source://i18n//lib/i18n.rb#69
1198
+ # source://i18n//lib/i18n.rb#70
1198
1199
  def available_locales; end
1199
1200
 
1200
- # source://i18n//lib/i18n.rb#73
1201
+ # source://i18n//lib/i18n.rb#74
1201
1202
  def available_locales=(value); end
1202
1203
 
1203
1204
  # @return [Boolean]
1204
1205
  #
1205
- # source://i18n//lib/i18n.rb#355
1206
+ # source://i18n//lib/i18n.rb#386
1206
1207
  def available_locales_initialized?; end
1207
1208
 
1208
- # source://i18n//lib/i18n.rb#69
1209
+ # source://i18n//lib/i18n.rb#70
1209
1210
  def backend; end
1210
1211
 
1211
- # source://i18n//lib/i18n.rb#73
1212
+ # source://i18n//lib/i18n.rb#74
1212
1213
  def backend=(value); end
1213
1214
 
1214
1215
  # Gets I18n configuration object.
1215
1216
  #
1216
- # source://i18n//lib/i18n.rb#56
1217
+ # source://i18n//lib/i18n.rb#57
1217
1218
  def config; end
1218
1219
 
1219
1220
  # Sets I18n configuration object.
1220
1221
  #
1221
- # source://i18n//lib/i18n.rb#61
1222
+ # source://i18n//lib/i18n.rb#62
1222
1223
  def config=(value); end
1223
1224
 
1224
- # source://i18n//lib/i18n.rb#69
1225
+ # source://i18n//lib/i18n.rb#70
1225
1226
  def default_locale; end
1226
1227
 
1227
- # source://i18n//lib/i18n.rb#73
1228
+ # source://i18n//lib/i18n.rb#74
1228
1229
  def default_locale=(value); end
1229
1230
 
1230
- # source://i18n//lib/i18n.rb#69
1231
+ # source://i18n//lib/i18n.rb#70
1231
1232
  def default_separator; end
1232
1233
 
1233
- # source://i18n//lib/i18n.rb#73
1234
+ # source://i18n//lib/i18n.rb#74
1234
1235
  def default_separator=(value); end
1235
1236
 
1236
1237
  # Tells the backend to load translations now. Used in situations like the
1237
1238
  # Rails production environment. Backends can implement whatever strategy
1238
1239
  # is useful.
1239
1240
  #
1240
- # source://i18n//lib/i18n.rb#90
1241
+ # source://i18n//lib/i18n.rb#91
1241
1242
  def eager_load!; end
1242
1243
 
1243
- # source://i18n//lib/i18n.rb#69
1244
+ # source://i18n//lib/i18n.rb#70
1244
1245
  def enforce_available_locales; end
1245
1246
 
1246
1247
  # Raises an InvalidLocale exception when the passed locale is not available.
1247
1248
  #
1248
- # source://i18n//lib/i18n.rb#349
1249
+ # source://i18n//lib/i18n.rb#380
1249
1250
  def enforce_available_locales!(locale); end
1250
1251
 
1251
- # source://i18n//lib/i18n.rb#73
1252
+ # source://i18n//lib/i18n.rb#74
1252
1253
  def enforce_available_locales=(value); end
1253
1254
 
1254
- # source://i18n//lib/i18n.rb#69
1255
+ # source://i18n//lib/i18n.rb#70
1255
1256
  def exception_handler; end
1256
1257
 
1257
- # source://i18n//lib/i18n.rb#73
1258
+ # source://i18n//lib/i18n.rb#74
1258
1259
  def exception_handler=(value); end
1259
1260
 
1260
1261
  # Returns true if a translation exists for a given key, otherwise returns false.
@@ -1262,26 +1263,51 @@ module I18n::Base
1262
1263
  # @raise [Disabled]
1263
1264
  # @return [Boolean]
1264
1265
  #
1265
- # source://i18n//lib/i18n.rb#235
1266
+ # source://i18n//lib/i18n.rb#265
1266
1267
  def exists?(key, _locale = T.unsafe(nil), locale: T.unsafe(nil), **options); end
1267
1268
 
1269
+ # Returns an array of interpolation keys for the given translation key
1270
+ #
1271
+ # *Examples*
1272
+ #
1273
+ # Suppose we have the following:
1274
+ # I18n.t 'example.zero' == 'Zero interpolations'
1275
+ # I18n.t 'example.one' == 'One interpolation %{foo}'
1276
+ # I18n.t 'example.two' == 'Two interpolations %{foo} %{bar}'
1277
+ # I18n.t 'example.three' == ['One %{foo}', 'Two %{bar}', 'Three %{baz}']
1278
+ # I18n.t 'example.one', locale: :other == 'One interpolation %{baz}'
1279
+ #
1280
+ # Then we can expect the following results:
1281
+ # I18n.interpolation_keys('example.zero') #=> []
1282
+ # I18n.interpolation_keys('example.one') #=> ['foo']
1283
+ # I18n.interpolation_keys('example.two') #=> ['foo', 'bar']
1284
+ # I18n.interpolation_keys('example.three') #=> ['foo', 'bar', 'baz']
1285
+ # I18n.interpolation_keys('one', scope: 'example', locale: :other) #=> ['baz']
1286
+ # I18n.interpolation_keys('does-not-exist') #=> []
1287
+ # I18n.interpolation_keys('example') #=> []
1288
+ #
1289
+ # @raise [I18n::ArgumentError]
1290
+ #
1291
+ # source://i18n//lib/i18n.rb#254
1292
+ def interpolation_keys(key, **options); end
1293
+
1268
1294
  # Localizes certain objects, such as dates and numbers to local formatting.
1269
1295
  #
1270
1296
  # @raise [Disabled]
1271
1297
  #
1272
- # source://i18n//lib/i18n.rb#304
1298
+ # source://i18n//lib/i18n.rb#335
1273
1299
  def l(object, locale: T.unsafe(nil), format: T.unsafe(nil), **options); end
1274
1300
 
1275
- # source://i18n//lib/i18n.rb#69
1301
+ # source://i18n//lib/i18n.rb#70
1276
1302
  def load_path; end
1277
1303
 
1278
- # source://i18n//lib/i18n.rb#73
1304
+ # source://i18n//lib/i18n.rb#74
1279
1305
  def load_path=(value); end
1280
1306
 
1281
- # source://i18n//lib/i18n.rb#69
1307
+ # source://i18n//lib/i18n.rb#70
1282
1308
  def locale; end
1283
1309
 
1284
- # source://i18n//lib/i18n.rb#73
1310
+ # source://i18n//lib/i18n.rb#74
1285
1311
  def locale=(value); end
1286
1312
 
1287
1313
  # Returns true when the passed locale, which can be either a String or a
@@ -1289,28 +1315,28 @@ module I18n::Base
1289
1315
  #
1290
1316
  # @return [Boolean]
1291
1317
  #
1292
- # source://i18n//lib/i18n.rb#344
1318
+ # source://i18n//lib/i18n.rb#375
1293
1319
  def locale_available?(locale); end
1294
1320
 
1295
1321
  # Localizes certain objects, such as dates and numbers to local formatting.
1296
1322
  #
1297
1323
  # @raise [Disabled]
1298
1324
  #
1299
- # source://i18n//lib/i18n.rb#304
1325
+ # source://i18n//lib/i18n.rb#335
1300
1326
  def localize(object, locale: T.unsafe(nil), format: T.unsafe(nil), **options); end
1301
1327
 
1302
1328
  # Merges the given locale, key and scope into a single array of keys.
1303
1329
  # Splits keys that contain dots into multiple keys. Makes sure all
1304
1330
  # keys are Symbols.
1305
1331
  #
1306
- # source://i18n//lib/i18n.rb#332
1332
+ # source://i18n//lib/i18n.rb#363
1307
1333
  def normalize_keys(locale, key, scope, separator = T.unsafe(nil)); end
1308
1334
 
1309
1335
  # Tells the backend to reload translations. Used in situations like the
1310
1336
  # Rails development environment. Backends can implement whatever strategy
1311
1337
  # is useful.
1312
1338
  #
1313
- # source://i18n//lib/i18n.rb#82
1339
+ # source://i18n//lib/i18n.rb#83
1314
1340
  def reload!; end
1315
1341
 
1316
1342
  # Translates, pluralizes and interpolates a given key using a given locale,
@@ -1383,7 +1409,7 @@ module I18n::Base
1383
1409
  # or <tt>default</tt> if no translations for <tt>:foo</tt> and <tt>:bar</tt> were found.
1384
1410
  # I18n.t :foo, :default => [:bar, 'default']
1385
1411
  #
1386
- # *BULK LOOKUP*
1412
+ # <b>BULK LOOKUP</b>
1387
1413
  #
1388
1414
  # This returns an array with the translations for <tt>:foo</tt> and <tt>:bar</tt>.
1389
1415
  # I18n.t [:foo, :bar]
@@ -1402,7 +1428,7 @@ module I18n::Base
1402
1428
  # E.g. assuming the key <tt>:salutation</tt> resolves to:
1403
1429
  # lambda { |key, options| options[:gender] == 'm' ? "Mr. #{options[:name]}" : "Mrs. #{options[:name]}" }
1404
1430
  #
1405
- # Then <tt>I18n.t(:salutation, :gender => 'w', :name => 'Smith') will result in "Mrs. Smith".
1431
+ # Then <tt>I18n.t(:salutation, :gender => 'w', :name => 'Smith')</tt> will result in "Mrs. Smith".
1406
1432
  #
1407
1433
  # Note that the string returned by lambda will go through string interpolation too,
1408
1434
  # so the following lambda would give the same result:
@@ -1414,7 +1440,7 @@ module I18n::Base
1414
1440
  # always return the same translations/values per unique combination of argument
1415
1441
  # values.
1416
1442
  #
1417
- # *Ruby 2.7+ keyword arguments warning*
1443
+ # <b>Ruby 2.7+ keyword arguments warning</b>
1418
1444
  #
1419
1445
  # This method uses keyword arguments.
1420
1446
  # There is a breaking change in ruby that produces warning with ruby 2.7 and won't work as expected with ruby 3.0
@@ -1431,13 +1457,13 @@ module I18n::Base
1431
1457
  #
1432
1458
  # @raise [Disabled]
1433
1459
  #
1434
- # source://i18n//lib/i18n.rb#210
1460
+ # source://i18n//lib/i18n.rb#211
1435
1461
  def t(key = T.unsafe(nil), throw: T.unsafe(nil), raise: T.unsafe(nil), locale: T.unsafe(nil), **options); end
1436
1462
 
1437
1463
  # Wrapper for <tt>translate</tt> that adds <tt>:raise => true</tt>. With
1438
1464
  # this option, if no translation is found, it will raise <tt>I18n::MissingTranslationData</tt>
1439
1465
  #
1440
- # source://i18n//lib/i18n.rb#229
1466
+ # source://i18n//lib/i18n.rb#230
1441
1467
  def t!(key, **options); end
1442
1468
 
1443
1469
  # Translates, pluralizes and interpolates a given key using a given locale,
@@ -1510,7 +1536,7 @@ module I18n::Base
1510
1536
  # or <tt>default</tt> if no translations for <tt>:foo</tt> and <tt>:bar</tt> were found.
1511
1537
  # I18n.t :foo, :default => [:bar, 'default']
1512
1538
  #
1513
- # *BULK LOOKUP*
1539
+ # <b>BULK LOOKUP</b>
1514
1540
  #
1515
1541
  # This returns an array with the translations for <tt>:foo</tt> and <tt>:bar</tt>.
1516
1542
  # I18n.t [:foo, :bar]
@@ -1529,7 +1555,7 @@ module I18n::Base
1529
1555
  # E.g. assuming the key <tt>:salutation</tt> resolves to:
1530
1556
  # lambda { |key, options| options[:gender] == 'm' ? "Mr. #{options[:name]}" : "Mrs. #{options[:name]}" }
1531
1557
  #
1532
- # Then <tt>I18n.t(:salutation, :gender => 'w', :name => 'Smith') will result in "Mrs. Smith".
1558
+ # Then <tt>I18n.t(:salutation, :gender => 'w', :name => 'Smith')</tt> will result in "Mrs. Smith".
1533
1559
  #
1534
1560
  # Note that the string returned by lambda will go through string interpolation too,
1535
1561
  # so the following lambda would give the same result:
@@ -1541,7 +1567,7 @@ module I18n::Base
1541
1567
  # always return the same translations/values per unique combination of argument
1542
1568
  # values.
1543
1569
  #
1544
- # *Ruby 2.7+ keyword arguments warning*
1570
+ # <b>Ruby 2.7+ keyword arguments warning</b>
1545
1571
  #
1546
1572
  # This method uses keyword arguments.
1547
1573
  # There is a breaking change in ruby that produces warning with ruby 2.7 and won't work as expected with ruby 3.0
@@ -1558,13 +1584,13 @@ module I18n::Base
1558
1584
  #
1559
1585
  # @raise [Disabled]
1560
1586
  #
1561
- # source://i18n//lib/i18n.rb#210
1587
+ # source://i18n//lib/i18n.rb#211
1562
1588
  def translate(key = T.unsafe(nil), throw: T.unsafe(nil), raise: T.unsafe(nil), locale: T.unsafe(nil), **options); end
1563
1589
 
1564
1590
  # Wrapper for <tt>translate</tt> that adds <tt>:raise => true</tt>. With
1565
1591
  # this option, if no translation is found, it will raise <tt>I18n::MissingTranslationData</tt>
1566
1592
  #
1567
- # source://i18n//lib/i18n.rb#229
1593
+ # source://i18n//lib/i18n.rb#230
1568
1594
  def translate!(key, **options); end
1569
1595
 
1570
1596
  # Transliterates UTF-8 characters to ASCII. By default this method will
@@ -1619,12 +1645,12 @@ module I18n::Base
1619
1645
  # I18n.transliterate("Jürgen", :locale => :en) # => "Jurgen"
1620
1646
  # I18n.transliterate("Jürgen", :locale => :de) # => "Juergen"
1621
1647
  #
1622
- # source://i18n//lib/i18n.rb#293
1648
+ # source://i18n//lib/i18n.rb#324
1623
1649
  def transliterate(key, throw: T.unsafe(nil), raise: T.unsafe(nil), locale: T.unsafe(nil), replacement: T.unsafe(nil), **options); end
1624
1650
 
1625
1651
  # Executes block with given I18n.locale set.
1626
1652
  #
1627
- # source://i18n//lib/i18n.rb#315
1653
+ # source://i18n//lib/i18n.rb#346
1628
1654
  def with_locale(tmp_locale = T.unsafe(nil)); end
1629
1655
 
1630
1656
  private
@@ -1648,13 +1674,16 @@ module I18n::Base
1648
1674
  # I18n.exception_handler = I18nExceptionHandler.new # an object
1649
1675
  # I18n.exception_handler.call(exception, locale, key, options) # will be called like this
1650
1676
  #
1651
- # source://i18n//lib/i18n.rb#391
1677
+ # source://i18n//lib/i18n.rb#422
1652
1678
  def handle_exception(handling, exception, locale, key, options); end
1653
1679
 
1654
- # source://i18n//lib/i18n.rb#409
1680
+ # source://i18n//lib/i18n.rb#464
1681
+ def interpolation_keys_from_translation(translation); end
1682
+
1683
+ # source://i18n//lib/i18n.rb#440
1655
1684
  def normalize_key(key, separator); end
1656
1685
 
1657
- # source://i18n//lib/i18n.rb#361
1686
+ # source://i18n//lib/i18n.rb#392
1658
1687
  def translate_key(key, throw, raise, locale, backend, options); end
1659
1688
  end
1660
1689
 
@@ -1816,7 +1845,7 @@ class I18n::Disabled < ::I18n::ArgumentError
1816
1845
  def initialize(method); end
1817
1846
  end
1818
1847
 
1819
- # source://i18n//lib/i18n.rb#35
1848
+ # source://i18n//lib/i18n.rb#36
1820
1849
  I18n::EMPTY_HASH = T.let(T.unsafe(nil), Hash)
1821
1850
 
1822
1851
  # source://i18n//lib/i18n/exceptions.rb#6