lunchmoney 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (142) hide show
  1. checksums.yaml +7 -0
  2. data/.DS_Store +0 -0
  3. data/.github/dependabot.yml +18 -0
  4. data/.github/workflows/build_and_publish_yard_docs.yml +47 -0
  5. data/.github/workflows/ci.yml +58 -0
  6. data/.github/workflows/dependabot-rbi-updater.yml +43 -0
  7. data/.github/workflows/publish_gem.yml +31 -0
  8. data/.gitignore +62 -0
  9. data/.rubocop.yml +45 -0
  10. data/.ruby-version +1 -0
  11. data/.toys/.toys.rb +10 -0
  12. data/.toys/ci.rb +22 -0
  13. data/.toys/rbi.rb +60 -0
  14. data/.toys/rubocop.rb +10 -0
  15. data/.toys/spoom.rb +15 -0
  16. data/.toys/typecheck.rb +5 -0
  17. data/.yardopts +2 -0
  18. data/Appraisals +22 -0
  19. data/Gemfile +25 -0
  20. data/Gemfile.lock +174 -0
  21. data/LICENSE +21 -0
  22. data/README.md +57 -0
  23. data/bin/console +16 -0
  24. data/bin/rubocop +27 -0
  25. data/bin/setup +8 -0
  26. data/bin/spoom +27 -0
  27. data/bin/srb +27 -0
  28. data/bin/tapioca +27 -0
  29. data/bin/toys +27 -0
  30. data/bin/yard +27 -0
  31. data/lib/lunchmoney/api.rb +147 -0
  32. data/lib/lunchmoney/api_call.rb +109 -0
  33. data/lib/lunchmoney/assets/asset.rb +89 -0
  34. data/lib/lunchmoney/assets/asset_calls.rb +96 -0
  35. data/lib/lunchmoney/budget/budget.rb +74 -0
  36. data/lib/lunchmoney/budget/budget_calls.rb +82 -0
  37. data/lib/lunchmoney/budget/config.rb +38 -0
  38. data/lib/lunchmoney/budget/data.rb +42 -0
  39. data/lib/lunchmoney/categories/category/category.rb +52 -0
  40. data/lib/lunchmoney/categories/category/child_category.rb +42 -0
  41. data/lib/lunchmoney/categories/category_calls.rb +195 -0
  42. data/lib/lunchmoney/configuration.rb +26 -0
  43. data/lib/lunchmoney/crypto/crypto/crypto.rb +43 -0
  44. data/lib/lunchmoney/crypto/crypto/crypto_base.rb +65 -0
  45. data/lib/lunchmoney/crypto/crypto_calls.rb +49 -0
  46. data/lib/lunchmoney/data_object.rb +25 -0
  47. data/lib/lunchmoney/errors.rb +19 -0
  48. data/lib/lunchmoney/exceptions.rb +19 -0
  49. data/lib/lunchmoney/plaid_accounts/plaid_account.rb +73 -0
  50. data/lib/lunchmoney/plaid_accounts/plaid_account_calls.rb +38 -0
  51. data/lib/lunchmoney/recurring_expenses/recurring_expense/recurring_expense.rb +65 -0
  52. data/lib/lunchmoney/recurring_expenses/recurring_expense/recurring_expense_base.rb +29 -0
  53. data/lib/lunchmoney/recurring_expenses/recurring_expense_calls.rb +28 -0
  54. data/lib/lunchmoney/tags/tag/tag.rb +20 -0
  55. data/lib/lunchmoney/tags/tag/tag_base.rb +21 -0
  56. data/lib/lunchmoney/tags/tag_calls.rb +20 -0
  57. data/lib/lunchmoney/transactions/transaction/child_transaction.rb +31 -0
  58. data/lib/lunchmoney/transactions/transaction/split.rb +24 -0
  59. data/lib/lunchmoney/transactions/transaction/transaction.rb +156 -0
  60. data/lib/lunchmoney/transactions/transaction/transaction_base.rb +52 -0
  61. data/lib/lunchmoney/transactions/transaction/transaction_modification_base.rb +30 -0
  62. data/lib/lunchmoney/transactions/transaction/update_transaction.rb +43 -0
  63. data/lib/lunchmoney/transactions/transaction_calls.rb +218 -0
  64. data/lib/lunchmoney/user/user.rb +36 -0
  65. data/lib/lunchmoney/user/user_calls.rb +19 -0
  66. data/lib/lunchmoney/validators.rb +43 -0
  67. data/lib/lunchmoney/version.rb +7 -0
  68. data/lib/lunchmoney.rb +54 -0
  69. data/lunchmoney.gemspec +34 -0
  70. data/sorbet/config +5 -0
  71. data/sorbet/rbi/annotations/.gitattributes +1 -0
  72. data/sorbet/rbi/annotations/activesupport.rbi +410 -0
  73. data/sorbet/rbi/annotations/faraday.rbi +17 -0
  74. data/sorbet/rbi/annotations/mocha.rbi +34 -0
  75. data/sorbet/rbi/annotations/rainbow.rbi +269 -0
  76. data/sorbet/rbi/annotations/webmock.rbi +9 -0
  77. data/sorbet/rbi/dsl/.gitattributes +1 -0
  78. data/sorbet/rbi/dsl/active_support/callbacks.rbi +22 -0
  79. data/sorbet/rbi/gems/.gitattributes +1 -0
  80. data/sorbet/rbi/gems/activesupport@7.1.3.rbi +18004 -0
  81. data/sorbet/rbi/gems/addressable@2.8.6.rbi +1993 -0
  82. data/sorbet/rbi/gems/appraisal@2.5.0.rbi +621 -0
  83. data/sorbet/rbi/gems/ast@2.4.2.rbi +584 -0
  84. data/sorbet/rbi/gems/base64@0.2.0.rbi +508 -0
  85. data/sorbet/rbi/gems/bigdecimal@3.1.6.rbi +77 -0
  86. data/sorbet/rbi/gems/coderay@1.1.3.rbi +3426 -0
  87. data/sorbet/rbi/gems/concurrent-ruby@1.2.3.rbi +11590 -0
  88. data/sorbet/rbi/gems/connection_pool@2.4.1.rbi +8 -0
  89. data/sorbet/rbi/gems/crack@0.4.5.rbi +144 -0
  90. data/sorbet/rbi/gems/dotenv@2.8.1.rbi +234 -0
  91. data/sorbet/rbi/gems/drb@2.2.0.rbi +1346 -0
  92. data/sorbet/rbi/gems/erubi@1.12.0.rbi +145 -0
  93. data/sorbet/rbi/gems/faraday-net_http@3.1.0.rbi +146 -0
  94. data/sorbet/rbi/gems/faraday@2.9.0.rbi +2911 -0
  95. data/sorbet/rbi/gems/hashdiff@1.1.0.rbi +352 -0
  96. data/sorbet/rbi/gems/i18n@1.14.1.rbi +2325 -0
  97. data/sorbet/rbi/gems/json@2.7.1.rbi +1561 -0
  98. data/sorbet/rbi/gems/language_server-protocol@3.17.0.3.rbi +14237 -0
  99. data/sorbet/rbi/gems/method_source@1.0.0.rbi +272 -0
  100. data/sorbet/rbi/gems/minitest@5.21.2.rbi +2197 -0
  101. data/sorbet/rbi/gems/mocha@2.1.0.rbi +3934 -0
  102. data/sorbet/rbi/gems/mutex_m@0.2.0.rbi +93 -0
  103. data/sorbet/rbi/gems/net-http@0.4.1.rbi +4068 -0
  104. data/sorbet/rbi/gems/netrc@0.11.0.rbi +158 -0
  105. data/sorbet/rbi/gems/parallel@1.24.0.rbi +280 -0
  106. data/sorbet/rbi/gems/parser@3.3.0.5.rbi +5472 -0
  107. data/sorbet/rbi/gems/prettier_print@1.2.1.rbi +951 -0
  108. data/sorbet/rbi/gems/prism@0.19.0.rbi +29883 -0
  109. data/sorbet/rbi/gems/pry-sorbet@0.2.1.rbi +966 -0
  110. data/sorbet/rbi/gems/pry@0.14.2.rbi +10077 -0
  111. data/sorbet/rbi/gems/public_suffix@5.0.4.rbi +935 -0
  112. data/sorbet/rbi/gems/racc@1.7.3.rbi +161 -0
  113. data/sorbet/rbi/gems/rack@3.0.8.rbi +5183 -0
  114. data/sorbet/rbi/gems/rainbow@3.1.1.rbi +402 -0
  115. data/sorbet/rbi/gems/rake@13.1.0.rbi +3027 -0
  116. data/sorbet/rbi/gems/rbi@0.1.6.rbi +2922 -0
  117. data/sorbet/rbi/gems/regexp_parser@2.9.0.rbi +3771 -0
  118. data/sorbet/rbi/gems/rexml@3.2.6.rbi +4781 -0
  119. data/sorbet/rbi/gems/rubocop-ast@1.30.0.rbi +7117 -0
  120. data/sorbet/rbi/gems/rubocop-minitest@0.34.5.rbi +2576 -0
  121. data/sorbet/rbi/gems/rubocop-rails@2.23.1.rbi +9175 -0
  122. data/sorbet/rbi/gems/rubocop-shopify@2.14.0.rbi +8 -0
  123. data/sorbet/rbi/gems/rubocop-sorbet@0.7.6.rbi +1510 -0
  124. data/sorbet/rbi/gems/rubocop@1.60.1.rbi +57356 -0
  125. data/sorbet/rbi/gems/ruby-progressbar@1.13.0.rbi +1317 -0
  126. data/sorbet/rbi/gems/ruby2_keywords@0.0.5.rbi +8 -0
  127. data/sorbet/rbi/gems/spoom@1.2.4.rbi +3777 -0
  128. data/sorbet/rbi/gems/syntax_tree@6.2.0.rbi +23136 -0
  129. data/sorbet/rbi/gems/tapioca@0.12.0.rbi +3506 -0
  130. data/sorbet/rbi/gems/thor@1.3.0.rbi +4312 -0
  131. data/sorbet/rbi/gems/toys-core@0.15.4.rbi +9462 -0
  132. data/sorbet/rbi/gems/toys@0.15.4.rbi +243 -0
  133. data/sorbet/rbi/gems/tzinfo@2.0.6.rbi +5917 -0
  134. data/sorbet/rbi/gems/unicode-display_width@2.5.0.rbi +65 -0
  135. data/sorbet/rbi/gems/uri@0.13.0.rbi +2327 -0
  136. data/sorbet/rbi/gems/vcr@6.2.0.rbi +3036 -0
  137. data/sorbet/rbi/gems/webmock@3.19.1.rbi +1768 -0
  138. data/sorbet/rbi/gems/yard-sorbet@0.8.1.rbi +428 -0
  139. data/sorbet/rbi/gems/yard@0.9.34.rbi +18084 -0
  140. data/sorbet/shims/module.rbi +6 -0
  141. data/sorbet/tapioca/require.rb +10 -0
  142. metadata +228 -0
@@ -0,0 +1,8 @@
1
+ # typed: true
2
+
3
+ # DO NOT EDIT MANUALLY
4
+ # This is an autogenerated file for types exported from the `connection_pool` gem.
5
+ # Please instead update this file by running `bin/tapioca gem connection_pool`.
6
+
7
+ # THIS IS AN EMPTY RBI FILE.
8
+ # see https://github.com/Shopify/tapioca#manually-requiring-parts-of-a-gem
@@ -0,0 +1,144 @@
1
+ # typed: true
2
+
3
+ # DO NOT EDIT MANUALLY
4
+ # This is an autogenerated file for types exported from the `crack` gem.
5
+ # Please instead update this file by running `bin/tapioca gem crack`.
6
+
7
+ # source://crack//lib/crack/xml.rb#196
8
+ module Crack; end
9
+
10
+ # source://crack//lib/crack/xml.rb#197
11
+ class Crack::REXMLParser
12
+ class << self
13
+ # source://crack//lib/crack/xml.rb#198
14
+ def parse(xml); end
15
+ end
16
+ end
17
+
18
+ # source://crack//lib/crack/xml.rb#225
19
+ class Crack::XML
20
+ class << self
21
+ # source://crack//lib/crack/xml.rb#234
22
+ def parse(xml); end
23
+
24
+ # source://crack//lib/crack/xml.rb#226
25
+ def parser; end
26
+
27
+ # source://crack//lib/crack/xml.rb#230
28
+ def parser=(parser); end
29
+ end
30
+ end
31
+
32
+ # This is a slighly modified version of the XMLUtilityNode from
33
+ # http://merb.devjavu.com/projects/merb/ticket/95 (has.sox@gmail.com)
34
+ # It's mainly just adding vowels, as I ht cd wth n vwls :)
35
+ # This represents the hard part of the work, all I did was change the
36
+ # underlying parser.
37
+ #
38
+ # source://crack//lib/crack/xml.rb#23
39
+ class REXMLUtilityNode
40
+ # @return [REXMLUtilityNode] a new instance of REXMLUtilityNode
41
+ #
42
+ # source://crack//lib/crack/xml.rb#56
43
+ def initialize(name, normalized_attributes = T.unsafe(nil)); end
44
+
45
+ # source://crack//lib/crack/xml.rb#73
46
+ def add_node(node); end
47
+
48
+ # source://crack//lib/crack/xml.rb#24
49
+ def attributes; end
50
+
51
+ # source://crack//lib/crack/xml.rb#24
52
+ def attributes=(_arg0); end
53
+
54
+ # source://crack//lib/crack/xml.rb#24
55
+ def children; end
56
+
57
+ # source://crack//lib/crack/xml.rb#24
58
+ def children=(_arg0); end
59
+
60
+ # Get the inner_html of the REXML node.
61
+ #
62
+ # source://crack//lib/crack/xml.rb#172
63
+ def inner_html; end
64
+
65
+ # source://crack//lib/crack/xml.rb#24
66
+ def name; end
67
+
68
+ # source://crack//lib/crack/xml.rb#24
69
+ def name=(_arg0); end
70
+
71
+ # source://crack//lib/crack/xml.rb#78
72
+ def to_hash; end
73
+
74
+ # Converts the node into a readable HTML node.
75
+ #
76
+ # @return [String] The HTML node in text form.
77
+ #
78
+ # source://crack//lib/crack/xml.rb#179
79
+ def to_html; end
80
+
81
+ # source://crack//lib/crack/xml.rb#185
82
+ def to_s; end
83
+
84
+ # source://crack//lib/crack/xml.rb#24
85
+ def type; end
86
+
87
+ # source://crack//lib/crack/xml.rb#24
88
+ def type=(_arg0); end
89
+
90
+ # Typecasts a value based upon its type. For instance, if
91
+ # +node+ has #type == "integer",
92
+ # {{[node.typecast_value("12") #=> 12]}}
93
+ #
94
+ # @note If +self+ does not have a "type" key, or if it's not one of the
95
+ # options specified above, the raw +value+ will be returned.
96
+ # @param value [String] The value that is being typecast.
97
+ # @return [Integer, TrueClass, FalseClass, Time, Date, Object] The result of typecasting +value+.
98
+ #
99
+ # source://crack//lib/crack/xml.rb#157
100
+ def typecast_value(value); end
101
+
102
+ # Take keys of the form foo-bar and convert them to foo_bar
103
+ #
104
+ # source://crack//lib/crack/xml.rb#164
105
+ def undasherize_keys(params); end
106
+
107
+ private
108
+
109
+ # source://crack//lib/crack/xml.rb#191
110
+ def unnormalize_xml_entities(value); end
111
+
112
+ class << self
113
+ # source://crack//lib/crack/xml.rb#34
114
+ def available_typecasts; end
115
+
116
+ # source://crack//lib/crack/xml.rb#38
117
+ def available_typecasts=(obj); end
118
+
119
+ # source://crack//lib/crack/xml.rb#26
120
+ def typecasts; end
121
+
122
+ # source://crack//lib/crack/xml.rb#30
123
+ def typecasts=(obj); end
124
+ end
125
+ end
126
+
127
+ # The Reason behind redefining the String Class for this specific plugin is to
128
+ # avoid the dynamic insertion of stuff on it (see version previous to this commit).
129
+ # Doing that disables the possibility of efectuating a dump on the structure. This way it goes.
130
+ #
131
+ # source://crack//lib/crack/xml.rb#14
132
+ class REXMLUtiliyNodeString < ::String
133
+ # Returns the value of attribute attributes.
134
+ #
135
+ # source://crack//lib/crack/xml.rb#15
136
+ def attributes; end
137
+
138
+ # Sets the attribute attributes
139
+ #
140
+ # @param value the value to set the attribute attributes to.
141
+ #
142
+ # source://crack//lib/crack/xml.rb#15
143
+ def attributes=(_arg0); end
144
+ end
@@ -0,0 +1,234 @@
1
+ # typed: true
2
+
3
+ # DO NOT EDIT MANUALLY
4
+ # This is an autogenerated file for types exported from the `dotenv` gem.
5
+ # Please instead update this file by running `bin/tapioca gem dotenv`.
6
+
7
+ # The top level Dotenv module. The entrypoint for the application logic.
8
+ #
9
+ # source://dotenv//lib/dotenv/substitutions/variable.rb#3
10
+ module Dotenv
11
+ private
12
+
13
+ # source://dotenv//lib/dotenv.rb#82
14
+ def ignoring_nonexistent_files; end
15
+
16
+ # source://dotenv//lib/dotenv.rb#68
17
+ def instrument(name, payload = T.unsafe(nil), &block); end
18
+
19
+ # source://dotenv//lib/dotenv.rb#13
20
+ def load(*filenames); end
21
+
22
+ # same as `load`, but raises Errno::ENOENT if any files don't exist
23
+ #
24
+ # source://dotenv//lib/dotenv.rb#23
25
+ def load!(*filenames); end
26
+
27
+ # same as `load`, but will override existing values in `ENV`
28
+ #
29
+ # source://dotenv//lib/dotenv.rb#31
30
+ def overload(*filenames); end
31
+
32
+ # same as `overload`, but raises Errno::ENOENT if any files don't exist
33
+ #
34
+ # source://dotenv//lib/dotenv.rb#41
35
+ def overload!(*filenames); end
36
+
37
+ # returns a hash of parsed key/value pairs but does not modify ENV
38
+ #
39
+ # source://dotenv//lib/dotenv.rb#49
40
+ def parse(*filenames); end
41
+
42
+ # source://dotenv//lib/dotenv.rb#76
43
+ def require_keys(*keys); end
44
+
45
+ # Internal: Helper to expand list of filenames.
46
+ #
47
+ # Returns a hash of all the loaded environment variables.
48
+ #
49
+ # source://dotenv//lib/dotenv.rb#60
50
+ def with(*filenames); end
51
+
52
+ class << self
53
+ # source://dotenv//lib/dotenv.rb#82
54
+ def ignoring_nonexistent_files; end
55
+
56
+ # source://dotenv//lib/dotenv.rb#68
57
+ def instrument(name, payload = T.unsafe(nil), &block); end
58
+
59
+ # Returns the value of attribute instrumenter.
60
+ #
61
+ # source://dotenv//lib/dotenv.rb#8
62
+ def instrumenter; end
63
+
64
+ # Sets the attribute instrumenter
65
+ #
66
+ # @param value the value to set the attribute instrumenter to.
67
+ #
68
+ # source://dotenv//lib/dotenv.rb#8
69
+ def instrumenter=(_arg0); end
70
+
71
+ # source://dotenv//lib/dotenv.rb#13
72
+ def load(*filenames); end
73
+
74
+ # same as `load`, but raises Errno::ENOENT if any files don't exist
75
+ #
76
+ # source://dotenv//lib/dotenv.rb#23
77
+ def load!(*filenames); end
78
+
79
+ # same as `load`, but will override existing values in `ENV`
80
+ #
81
+ # source://dotenv//lib/dotenv.rb#31
82
+ def overload(*filenames); end
83
+
84
+ # same as `overload`, but raises Errno::ENOENT if any files don't exist
85
+ #
86
+ # source://dotenv//lib/dotenv.rb#41
87
+ def overload!(*filenames); end
88
+
89
+ # returns a hash of parsed key/value pairs but does not modify ENV
90
+ #
91
+ # source://dotenv//lib/dotenv.rb#49
92
+ def parse(*filenames); end
93
+
94
+ # @raise [MissingKeys]
95
+ #
96
+ # source://dotenv//lib/dotenv.rb#76
97
+ def require_keys(*keys); end
98
+
99
+ # Internal: Helper to expand list of filenames.
100
+ #
101
+ # Returns a hash of all the loaded environment variables.
102
+ #
103
+ # source://dotenv//lib/dotenv.rb#60
104
+ def with(*filenames); end
105
+ end
106
+ end
107
+
108
+ # This class inherits from Hash and represents the environment into which
109
+ # Dotenv will load key value pairs from a file.
110
+ #
111
+ # source://dotenv//lib/dotenv/environment.rb#4
112
+ class Dotenv::Environment < ::Hash
113
+ # @return [Environment] a new instance of Environment
114
+ #
115
+ # source://dotenv//lib/dotenv/environment.rb#7
116
+ def initialize(filename, is_load = T.unsafe(nil)); end
117
+
118
+ # source://dotenv//lib/dotenv/environment.rb#20
119
+ def apply; end
120
+
121
+ # source://dotenv//lib/dotenv/environment.rb#24
122
+ def apply!; end
123
+
124
+ # Returns the value of attribute filename.
125
+ #
126
+ # source://dotenv//lib/dotenv/environment.rb#5
127
+ def filename; end
128
+
129
+ # source://dotenv//lib/dotenv/environment.rb#12
130
+ def load(is_load = T.unsafe(nil)); end
131
+
132
+ # source://dotenv//lib/dotenv/environment.rb#16
133
+ def read; end
134
+ end
135
+
136
+ # source://dotenv//lib/dotenv/missing_keys.rb#2
137
+ class Dotenv::Error < ::StandardError; end
138
+
139
+ # source://dotenv//lib/dotenv/parser.rb#5
140
+ class Dotenv::FormatError < ::SyntaxError; end
141
+
142
+ # source://dotenv//lib/dotenv/missing_keys.rb#4
143
+ class Dotenv::MissingKeys < ::Dotenv::Error
144
+ # @return [MissingKeys] a new instance of MissingKeys
145
+ #
146
+ # source://dotenv//lib/dotenv/missing_keys.rb#5
147
+ def initialize(keys); end
148
+ end
149
+
150
+ # This class enables parsing of a string for key value pairs to be returned
151
+ # and stored in the Environment. It allows for variable substitutions and
152
+ # exporting of variables.
153
+ #
154
+ # source://dotenv//lib/dotenv/parser.rb#10
155
+ class Dotenv::Parser
156
+ # @return [Parser] a new instance of Parser
157
+ #
158
+ # source://dotenv//lib/dotenv/parser.rb#40
159
+ def initialize(string, is_load = T.unsafe(nil)); end
160
+
161
+ # source://dotenv//lib/dotenv/parser.rb#46
162
+ def call; end
163
+
164
+ private
165
+
166
+ # source://dotenv//lib/dotenv/parser.rb#82
167
+ def expand_newlines(value); end
168
+
169
+ # source://dotenv//lib/dotenv/parser.rb#62
170
+ def parse_line(line); end
171
+
172
+ # source://dotenv//lib/dotenv/parser.rb#70
173
+ def parse_value(value); end
174
+
175
+ # source://dotenv//lib/dotenv/parser.rb#100
176
+ def perform_substitutions(value, maybe_quote); end
177
+
178
+ # source://dotenv//lib/dotenv/parser.rb#78
179
+ def unescape_characters(value); end
180
+
181
+ # source://dotenv//lib/dotenv/parser.rb#90
182
+ def unescape_value(value, maybe_quote); end
183
+
184
+ # @return [Boolean]
185
+ #
186
+ # source://dotenv//lib/dotenv/parser.rb#86
187
+ def variable_not_set?(line); end
188
+
189
+ class << self
190
+ # source://dotenv//lib/dotenv/parser.rb#35
191
+ def call(string, is_load = T.unsafe(nil)); end
192
+
193
+ # Returns the value of attribute substitutions.
194
+ #
195
+ # source://dotenv//lib/dotenv/parser.rb#33
196
+ def substitutions; end
197
+ end
198
+ end
199
+
200
+ # source://dotenv//lib/dotenv/parser.rb#14
201
+ Dotenv::Parser::LINE = T.let(T.unsafe(nil), Regexp)
202
+
203
+ # source://dotenv//lib/dotenv/substitutions/variable.rb#4
204
+ module Dotenv::Substitutions; end
205
+
206
+ # Substitute shell commands in a value.
207
+ #
208
+ # SHA=$(git rev-parse HEAD)
209
+ #
210
+ # source://dotenv//lib/dotenv/substitutions/command.rb#9
211
+ module Dotenv::Substitutions::Command
212
+ class << self
213
+ # source://dotenv//lib/dotenv/substitutions/command.rb#23
214
+ def call(value, _env, _is_load); end
215
+ end
216
+ end
217
+
218
+ # Substitute variables in a value.
219
+ #
220
+ # HOST=example.com
221
+ # URL="https://$HOST"
222
+ #
223
+ # source://dotenv//lib/dotenv/substitutions/variable.rb#10
224
+ module Dotenv::Substitutions::Variable
225
+ class << self
226
+ # source://dotenv//lib/dotenv/substitutions/variable.rb#21
227
+ def call(value, env, is_load); end
228
+
229
+ private
230
+
231
+ # source://dotenv//lib/dotenv/substitutions/variable.rb#31
232
+ def substitute(match, variable, env); end
233
+ end
234
+ end