terminal-shop 3.6.2 → 3.7.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +21 -0
- data/README.md +1 -1
- data/lib/terminal_shop/errors.rb +1 -1
- data/lib/terminal_shop/internal/transport/base_client.rb +77 -5
- data/lib/terminal_shop/internal/transport/pooled_net_requester.rb +14 -0
- data/lib/terminal_shop/internal/type/array_of.rb +1 -1
- data/lib/terminal_shop/internal/type/base_model.rb +62 -30
- data/lib/terminal_shop/internal/type/converter.rb +18 -0
- data/lib/terminal_shop/internal/type/enum.rb +1 -0
- data/lib/terminal_shop/internal/type/hash_of.rb +1 -1
- data/lib/terminal_shop/internal/type/union.rb +1 -0
- data/lib/terminal_shop/internal/util.rb +56 -0
- data/lib/terminal_shop/internal.rb +6 -0
- data/lib/terminal_shop/models/subscription.rb +9 -0
- data/lib/terminal_shop/models/subscription_update_params.rb +9 -0
- data/lib/terminal_shop/models.rb +27 -0
- data/lib/terminal_shop/request_options.rb +4 -0
- data/lib/terminal_shop/version.rb +1 -1
- data/lib/terminal_shop.rb +2 -0
- data/rbi/terminal_shop/internal/transport/base_client.rbi +31 -8
- data/rbi/terminal_shop/internal/transport/pooled_net_requester.rbi +5 -3
- data/rbi/terminal_shop/internal/type/base_model.rbi +33 -15
- data/rbi/terminal_shop/internal/type/base_page.rbi +1 -1
- data/rbi/terminal_shop/internal/type/converter.rbi +2 -0
- data/rbi/terminal_shop/internal/type/enum.rbi +1 -0
- data/rbi/terminal_shop/internal/type/union.rbi +1 -0
- data/rbi/terminal_shop/internal/util.rbi +28 -5
- data/rbi/terminal_shop/internal.rbi +2 -0
- data/rbi/terminal_shop/models/address.rbi +3 -1
- data/rbi/terminal_shop/models/address_create_params.rbi +6 -1
- data/rbi/terminal_shop/models/address_create_response.rbi +6 -1
- data/rbi/terminal_shop/models/address_delete_params.rbi +6 -1
- data/rbi/terminal_shop/models/address_delete_response.rbi +6 -1
- data/rbi/terminal_shop/models/address_get_params.rbi +3 -1
- data/rbi/terminal_shop/models/address_get_response.rbi +6 -1
- data/rbi/terminal_shop/models/address_list_params.rbi +6 -1
- data/rbi/terminal_shop/models/address_list_response.rbi +6 -1
- data/rbi/terminal_shop/models/app.rbi +3 -1
- data/rbi/terminal_shop/models/app_create_params.rbi +3 -1
- data/rbi/terminal_shop/models/app_create_response.rbi +12 -2
- data/rbi/terminal_shop/models/app_delete_params.rbi +3 -1
- data/rbi/terminal_shop/models/app_delete_response.rbi +6 -1
- data/rbi/terminal_shop/models/app_get_params.rbi +3 -1
- data/rbi/terminal_shop/models/app_get_response.rbi +6 -1
- data/rbi/terminal_shop/models/app_list_params.rbi +3 -1
- data/rbi/terminal_shop/models/app_list_response.rbi +6 -1
- data/rbi/terminal_shop/models/card.rbi +9 -2
- data/rbi/terminal_shop/models/card_collect_params.rbi +6 -1
- data/rbi/terminal_shop/models/card_collect_response.rbi +12 -2
- data/rbi/terminal_shop/models/card_create_params.rbi +3 -1
- data/rbi/terminal_shop/models/card_create_response.rbi +6 -1
- data/rbi/terminal_shop/models/card_delete_params.rbi +3 -1
- data/rbi/terminal_shop/models/card_delete_response.rbi +6 -1
- data/rbi/terminal_shop/models/card_get_params.rbi +3 -1
- data/rbi/terminal_shop/models/card_get_response.rbi +6 -1
- data/rbi/terminal_shop/models/card_list_params.rbi +3 -1
- data/rbi/terminal_shop/models/card_list_response.rbi +6 -1
- data/rbi/terminal_shop/models/cart.rbi +18 -4
- data/rbi/terminal_shop/models/cart_clear_params.rbi +3 -1
- data/rbi/terminal_shop/models/cart_clear_response.rbi +6 -1
- data/rbi/terminal_shop/models/cart_convert_params.rbi +6 -1
- data/rbi/terminal_shop/models/cart_convert_response.rbi +6 -1
- data/rbi/terminal_shop/models/cart_get_params.rbi +3 -1
- data/rbi/terminal_shop/models/cart_get_response.rbi +6 -1
- data/rbi/terminal_shop/models/cart_set_address_params.rbi +6 -1
- data/rbi/terminal_shop/models/cart_set_address_response.rbi +6 -1
- data/rbi/terminal_shop/models/cart_set_card_params.rbi +6 -1
- data/rbi/terminal_shop/models/cart_set_card_response.rbi +6 -1
- data/rbi/terminal_shop/models/cart_set_item_params.rbi +6 -1
- data/rbi/terminal_shop/models/cart_set_item_response.rbi +6 -1
- data/rbi/terminal_shop/models/email_create_params.rbi +6 -1
- data/rbi/terminal_shop/models/email_create_response.rbi +6 -1
- data/rbi/terminal_shop/models/order.rbi +24 -5
- data/rbi/terminal_shop/models/order_create_params.rbi +6 -1
- data/rbi/terminal_shop/models/order_create_response.rbi +6 -1
- data/rbi/terminal_shop/models/order_get_params.rbi +3 -1
- data/rbi/terminal_shop/models/order_get_response.rbi +6 -1
- data/rbi/terminal_shop/models/order_list_params.rbi +3 -1
- data/rbi/terminal_shop/models/order_list_response.rbi +6 -1
- data/rbi/terminal_shop/models/product.rbi +9 -2
- data/rbi/terminal_shop/models/product_get_params.rbi +3 -1
- data/rbi/terminal_shop/models/product_get_response.rbi +6 -1
- data/rbi/terminal_shop/models/product_list_params.rbi +6 -1
- data/rbi/terminal_shop/models/product_list_response.rbi +6 -1
- data/rbi/terminal_shop/models/product_variant.rbi +9 -2
- data/rbi/terminal_shop/models/profile.rbi +9 -2
- data/rbi/terminal_shop/models/profile_me_params.rbi +3 -1
- data/rbi/terminal_shop/models/profile_me_response.rbi +6 -1
- data/rbi/terminal_shop/models/profile_update_params.rbi +6 -1
- data/rbi/terminal_shop/models/profile_update_response.rbi +6 -1
- data/rbi/terminal_shop/models/subscription.rbi +15 -3
- data/rbi/terminal_shop/models/subscription_create_params.rbi +6 -1
- data/rbi/terminal_shop/models/subscription_create_response.rbi +6 -1
- data/rbi/terminal_shop/models/subscription_delete_params.rbi +6 -1
- data/rbi/terminal_shop/models/subscription_delete_response.rbi +6 -1
- data/rbi/terminal_shop/models/subscription_get_params.rbi +6 -1
- data/rbi/terminal_shop/models/subscription_get_response.rbi +6 -1
- data/rbi/terminal_shop/models/subscription_list_params.rbi +6 -1
- data/rbi/terminal_shop/models/subscription_list_response.rbi +6 -1
- data/rbi/terminal_shop/models/subscription_update_params.rbi +18 -3
- data/rbi/terminal_shop/models/subscription_update_response.rbi +6 -1
- data/rbi/terminal_shop/models/token.rbi +3 -1
- data/rbi/terminal_shop/models/token_create_params.rbi +6 -1
- data/rbi/terminal_shop/models/token_create_response.rbi +12 -2
- data/rbi/terminal_shop/models/token_delete_params.rbi +6 -1
- data/rbi/terminal_shop/models/token_delete_response.rbi +6 -1
- data/rbi/terminal_shop/models/token_get_params.rbi +3 -1
- data/rbi/terminal_shop/models/token_get_response.rbi +6 -1
- data/rbi/terminal_shop/models/token_list_params.rbi +3 -1
- data/rbi/terminal_shop/models/token_list_response.rbi +6 -1
- data/rbi/terminal_shop/models/view_init_params.rbi +3 -1
- data/rbi/terminal_shop/models/view_init_response.rbi +12 -2
- data/rbi/terminal_shop/request_options.rbi +3 -1
- data/sig/terminal_shop/internal/transport/base_client.rbs +16 -1
- data/sig/terminal_shop/internal/transport/pooled_net_requester.rbs +2 -0
- data/sig/terminal_shop/internal/type/base_model.rbs +11 -5
- data/sig/terminal_shop/internal/type/base_page.rbs +1 -1
- data/sig/terminal_shop/internal/type/converter.rbs +2 -0
- data/sig/terminal_shop/internal/type/enum.rbs +1 -0
- data/sig/terminal_shop/internal/type/union.rbs +1 -0
- data/sig/terminal_shop/internal/util.rbs +13 -0
- data/sig/terminal_shop/internal.rbs +2 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ec0b2f09a8009870055d5b2a868a6078adb11504f48eba5eea34b84ff89ba60f
|
4
|
+
data.tar.gz: f2e9a51a8c54a1eb7f07f40485b89b93218ba1055a8b0498a11f97caa15d5c71
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1144da9caada255b1fd2a9856dd8a2d5e6375c0322e369d761289b41c8aa2fe1ba318add613dc0f1cbcd1031badc4576d27084c635921cd063848dbcae5a9ea9
|
7
|
+
data.tar.gz: e5271523d7d53bcd460ea32453cab3b764009685b290344dcbc07def5ebe9133dd0e8cf55cb3ea72b2491cfb47488c21cdab21c67c0ca4e9b5add53c266ee185
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,26 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 3.7.0 (2025-05-14)
|
4
|
+
|
5
|
+
Full Changelog: [v3.6.2...v3.7.0](https://github.com/terminaldotshop/terminal-sdk-ruby/compare/v3.6.2...v3.7.0)
|
6
|
+
|
7
|
+
### Features
|
8
|
+
|
9
|
+
* expose base client options as read only attributes ([5ed1891](https://github.com/terminaldotshop/terminal-sdk-ruby/commit/5ed18915050ee0f2db755deaa6655e93e0e3b766))
|
10
|
+
* expose recursive `#to_h` conversion ([ca0cc5f](https://github.com/terminaldotshop/terminal-sdk-ruby/commit/ca0cc5f0001bbb2f5b9c5edd7e4e7a017f268956))
|
11
|
+
* support sorbet aliases at the runtime ([9e210bb](https://github.com/terminaldotshop/terminal-sdk-ruby/commit/9e210bb7cb568a0c4b7a10e87e69772d56a0306b))
|
12
|
+
|
13
|
+
|
14
|
+
### Bug Fixes
|
15
|
+
|
16
|
+
* **internal:** update gemspec name ([47cc74b](https://github.com/terminaldotshop/terminal-sdk-ruby/commit/47cc74b18b522e6caa46b014977c035b144e8faf))
|
17
|
+
|
18
|
+
|
19
|
+
### Chores
|
20
|
+
|
21
|
+
* fix misc linting / minor issues ([536f483](https://github.com/terminaldotshop/terminal-sdk-ruby/commit/536f483f7916651ae0ae11f663315c8b379dc619))
|
22
|
+
* **internal:** version bump ([cbba1d7](https://github.com/terminaldotshop/terminal-sdk-ruby/commit/cbba1d7501215bf6a55a54d1fcbdaea01da212d6))
|
23
|
+
|
3
24
|
## 3.6.2 (2025-05-08)
|
4
25
|
|
5
26
|
Full Changelog: [v3.6.1...v3.6.2](https://github.com/terminaldotshop/terminal-sdk-ruby/compare/v3.6.1...v3.6.2)
|
data/README.md
CHANGED
data/lib/terminal_shop/errors.rb
CHANGED
@@ -99,7 +99,7 @@ module TerminalShop
|
|
99
99
|
# @param response [nil]
|
100
100
|
# @param message [String, nil]
|
101
101
|
#
|
102
|
-
# @return [
|
102
|
+
# @return [self]
|
103
103
|
def self.for(url:, status:, body:, request:, response:, message: nil)
|
104
104
|
kwargs = {
|
105
105
|
url: url,
|
@@ -7,6 +7,8 @@ module TerminalShop
|
|
7
7
|
#
|
8
8
|
# @abstract
|
9
9
|
class BaseClient
|
10
|
+
extend TerminalShop::Internal::Util::SorbetRuntimeSupport
|
11
|
+
|
10
12
|
# from whatwg fetch spec
|
11
13
|
MAX_REDIRECTS = 20
|
12
14
|
|
@@ -151,6 +153,27 @@ module TerminalShop
|
|
151
153
|
end
|
152
154
|
end
|
153
155
|
|
156
|
+
# @return [URI::Generic]
|
157
|
+
attr_reader :base_url
|
158
|
+
|
159
|
+
# @return [Float]
|
160
|
+
attr_reader :timeout
|
161
|
+
|
162
|
+
# @return [Integer]
|
163
|
+
attr_reader :max_retries
|
164
|
+
|
165
|
+
# @return [Float]
|
166
|
+
attr_reader :initial_retry_delay
|
167
|
+
|
168
|
+
# @return [Float]
|
169
|
+
attr_reader :max_retry_delay
|
170
|
+
|
171
|
+
# @return [Hash{String=>String}]
|
172
|
+
attr_reader :headers
|
173
|
+
|
174
|
+
# @return [String, nil]
|
175
|
+
attr_reader :idempotency_header
|
176
|
+
|
154
177
|
# @api private
|
155
178
|
# @return [TerminalShop::Internal::Transport::PooledNetRequester]
|
156
179
|
attr_reader :requester
|
@@ -182,10 +205,11 @@ module TerminalShop
|
|
182
205
|
},
|
183
206
|
headers
|
184
207
|
)
|
185
|
-
@
|
208
|
+
@base_url_components = TerminalShop::Internal::Util.parse_uri(base_url)
|
209
|
+
@base_url = TerminalShop::Internal::Util.unparse_uri(@base_url_components)
|
186
210
|
@idempotency_header = idempotency_header&.to_s&.downcase
|
187
|
-
@max_retries = max_retries
|
188
211
|
@timeout = timeout
|
212
|
+
@max_retries = max_retries
|
189
213
|
@initial_retry_delay = initial_retry_delay
|
190
214
|
@max_retry_delay = max_retry_delay
|
191
215
|
end
|
@@ -276,10 +300,14 @@ module TerminalShop
|
|
276
300
|
TerminalShop::Internal::Util.deep_merge(*[req[:body], opts[:extra_body]].compact)
|
277
301
|
end
|
278
302
|
|
303
|
+
url = TerminalShop::Internal::Util.join_parsed_uri(
|
304
|
+
@base_url_components,
|
305
|
+
{**req, path: path, query: query}
|
306
|
+
)
|
279
307
|
headers, encoded = TerminalShop::Internal::Util.encode_content(headers, body)
|
280
308
|
{
|
281
309
|
method: method,
|
282
|
-
url:
|
310
|
+
url: url,
|
283
311
|
headers: headers,
|
284
312
|
body: encoded,
|
285
313
|
max_retries: opts.fetch(:max_retries, @max_retries),
|
@@ -476,10 +504,54 @@ module TerminalShop
|
|
476
504
|
# @return [String]
|
477
505
|
def inspect
|
478
506
|
# rubocop:disable Layout/LineLength
|
479
|
-
base_url
|
480
|
-
"#<#{self.class.name}:0x#{object_id.to_s(16)} base_url=#{base_url} max_retries=#{@max_retries} timeout=#{@timeout}>"
|
507
|
+
"#<#{self.class.name}:0x#{object_id.to_s(16)} base_url=#{@base_url} max_retries=#{@max_retries} timeout=#{@timeout}>"
|
481
508
|
# rubocop:enable Layout/LineLength
|
482
509
|
end
|
510
|
+
|
511
|
+
define_sorbet_constant!(:RequestComponents) do
|
512
|
+
T.type_alias do
|
513
|
+
{
|
514
|
+
method: Symbol,
|
515
|
+
path: T.any(String, T::Array[String]),
|
516
|
+
query: T.nilable(T::Hash[String, T.nilable(T.any(T::Array[String], String))]),
|
517
|
+
headers: T.nilable(
|
518
|
+
T::Hash[String,
|
519
|
+
T.nilable(
|
520
|
+
T.any(
|
521
|
+
String,
|
522
|
+
Integer,
|
523
|
+
T::Array[T.nilable(T.any(String, Integer))]
|
524
|
+
)
|
525
|
+
)]
|
526
|
+
),
|
527
|
+
body: T.nilable(T.anything),
|
528
|
+
unwrap: T.nilable(
|
529
|
+
T.any(
|
530
|
+
Symbol,
|
531
|
+
Integer,
|
532
|
+
T::Array[T.any(Symbol, Integer)],
|
533
|
+
T.proc.params(arg0: T.anything).returns(T.anything)
|
534
|
+
)
|
535
|
+
),
|
536
|
+
page: T.nilable(T::Class[TerminalShop::Internal::Type::BasePage[TerminalShop::Internal::Type::BaseModel]]),
|
537
|
+
stream: T.nilable(T::Class[T.anything]),
|
538
|
+
model: T.nilable(TerminalShop::Internal::Type::Converter::Input),
|
539
|
+
options: T.nilable(TerminalShop::RequestOptions::OrHash)
|
540
|
+
}
|
541
|
+
end
|
542
|
+
end
|
543
|
+
define_sorbet_constant!(:RequestInput) do
|
544
|
+
T.type_alias do
|
545
|
+
{
|
546
|
+
method: Symbol,
|
547
|
+
url: URI::Generic,
|
548
|
+
headers: T::Hash[String, String],
|
549
|
+
body: T.anything,
|
550
|
+
max_retries: Integer,
|
551
|
+
timeout: Float
|
552
|
+
}
|
553
|
+
end
|
554
|
+
end
|
483
555
|
end
|
484
556
|
end
|
485
557
|
end
|
@@ -5,6 +5,8 @@ module TerminalShop
|
|
5
5
|
module Transport
|
6
6
|
# @api private
|
7
7
|
class PooledNetRequester
|
8
|
+
extend TerminalShop::Internal::Util::SorbetRuntimeSupport
|
9
|
+
|
8
10
|
# from the golang stdlib
|
9
11
|
# https://github.com/golang/go/blob/c8eced8580028328fde7c03cbfcb720ce15b2358/src/net/http/transport.go#L49
|
10
12
|
KEEP_ALIVE_TIMEOUT = 30
|
@@ -187,6 +189,18 @@ module TerminalShop
|
|
187
189
|
@size = size
|
188
190
|
@pools = {}
|
189
191
|
end
|
192
|
+
|
193
|
+
define_sorbet_constant!(:Request) do
|
194
|
+
T.type_alias do
|
195
|
+
{
|
196
|
+
method: Symbol,
|
197
|
+
url: URI::Generic,
|
198
|
+
headers: T::Hash[String, String],
|
199
|
+
body: T.anything,
|
200
|
+
deadline: Float
|
201
|
+
}
|
202
|
+
end
|
203
|
+
end
|
190
204
|
end
|
191
205
|
end
|
192
206
|
end
|
@@ -6,6 +6,7 @@ module TerminalShop
|
|
6
6
|
# @abstract
|
7
7
|
class BaseModel
|
8
8
|
extend TerminalShop::Internal::Type::Converter
|
9
|
+
extend TerminalShop::Internal::Util::SorbetRuntimeSupport
|
9
10
|
|
10
11
|
class << self
|
11
12
|
# @api private
|
@@ -13,11 +14,17 @@ module TerminalShop
|
|
13
14
|
# Assumes superclass fields are totally defined before fields are accessed /
|
14
15
|
# defined on subclasses.
|
15
16
|
#
|
16
|
-
# @
|
17
|
-
def
|
18
|
-
|
17
|
+
# @param child [Class<TerminalShop::Internal::Type::BaseModel>]
|
18
|
+
def inherited(child)
|
19
|
+
super
|
20
|
+
child.known_fields.replace(known_fields.dup)
|
19
21
|
end
|
20
22
|
|
23
|
+
# @api private
|
24
|
+
#
|
25
|
+
# @return [Hash{Symbol=>Hash{Symbol=>Object}}]
|
26
|
+
def known_fields = @known_fields ||= {}
|
27
|
+
|
21
28
|
# @api private
|
22
29
|
#
|
23
30
|
# @return [Hash{Symbol=>Hash{Symbol=>Object}}]
|
@@ -204,7 +211,7 @@ module TerminalShop
|
|
204
211
|
#
|
205
212
|
# @option state [Integer] :branched
|
206
213
|
#
|
207
|
-
# @return [
|
214
|
+
# @return [self, Object]
|
208
215
|
def coerce(value, state:)
|
209
216
|
exactness = state.fetch(:exactness)
|
210
217
|
|
@@ -263,7 +270,7 @@ module TerminalShop
|
|
263
270
|
|
264
271
|
# @api private
|
265
272
|
#
|
266
|
-
# @param value [
|
273
|
+
# @param value [self, Object]
|
267
274
|
#
|
268
275
|
# @param state [Hash{Symbol=>Object}] .
|
269
276
|
#
|
@@ -304,6 +311,39 @@ module TerminalShop
|
|
304
311
|
end
|
305
312
|
end
|
306
313
|
|
314
|
+
class << self
|
315
|
+
# @api private
|
316
|
+
#
|
317
|
+
# @param model [TerminalShop::Internal::Type::BaseModel]
|
318
|
+
# @param convert [Boolean]
|
319
|
+
#
|
320
|
+
# @return [Hash{Symbol=>Object}]
|
321
|
+
def recursively_to_h(model, convert:)
|
322
|
+
rec = ->(x) do
|
323
|
+
case x
|
324
|
+
in TerminalShop::Internal::Type::BaseModel
|
325
|
+
if convert
|
326
|
+
fields = x.class.known_fields
|
327
|
+
x.to_h.to_h do |key, val|
|
328
|
+
[key, rec.call(fields.key?(key) ? x.public_send(key) : val)]
|
329
|
+
rescue TerminalShop::Errors::ConversionError
|
330
|
+
[key, rec.call(val)]
|
331
|
+
end
|
332
|
+
else
|
333
|
+
rec.call(x.to_h)
|
334
|
+
end
|
335
|
+
in Hash
|
336
|
+
x.transform_values(&rec)
|
337
|
+
in Array
|
338
|
+
x.map(&rec)
|
339
|
+
else
|
340
|
+
x
|
341
|
+
end
|
342
|
+
end
|
343
|
+
rec.call(model)
|
344
|
+
end
|
345
|
+
end
|
346
|
+
|
307
347
|
# @api public
|
308
348
|
#
|
309
349
|
# Returns the raw value associated with the given key, if found. Otherwise, nil is
|
@@ -340,6 +380,14 @@ module TerminalShop
|
|
340
380
|
|
341
381
|
alias_method :to_hash, :to_h
|
342
382
|
|
383
|
+
# @api public
|
384
|
+
#
|
385
|
+
# In addition to the behaviour of `#to_h`, this method will recursively call
|
386
|
+
# `#to_h` on nested models.
|
387
|
+
#
|
388
|
+
# @return [Hash{Symbol=>Object}]
|
389
|
+
def deep_to_h = self.class.recursively_to_h(@data, convert: false)
|
390
|
+
|
343
391
|
# @param keys [Array<Symbol>, nil]
|
344
392
|
#
|
345
393
|
# @return [Hash{Symbol=>Object}]
|
@@ -355,29 +403,6 @@ module TerminalShop
|
|
355
403
|
.to_h
|
356
404
|
end
|
357
405
|
|
358
|
-
class << self
|
359
|
-
# @api private
|
360
|
-
#
|
361
|
-
# @param model [TerminalShop::Internal::Type::BaseModel]
|
362
|
-
#
|
363
|
-
# @return [Hash{Symbol=>Object}]
|
364
|
-
def walk(model)
|
365
|
-
walk = ->(x) do
|
366
|
-
case x
|
367
|
-
in TerminalShop::Internal::Type::BaseModel
|
368
|
-
walk.call(x.to_h)
|
369
|
-
in Hash
|
370
|
-
x.transform_values(&walk)
|
371
|
-
in Array
|
372
|
-
x.map(&walk)
|
373
|
-
else
|
374
|
-
x
|
375
|
-
end
|
376
|
-
end
|
377
|
-
walk.call(model)
|
378
|
-
end
|
379
|
-
end
|
380
|
-
|
381
406
|
# @api public
|
382
407
|
#
|
383
408
|
# @param a [Object]
|
@@ -423,12 +448,19 @@ module TerminalShop
|
|
423
448
|
# @api public
|
424
449
|
#
|
425
450
|
# @return [String]
|
426
|
-
def to_s =
|
451
|
+
def to_s = deep_to_h.to_s
|
427
452
|
|
428
453
|
# @api private
|
429
454
|
#
|
430
455
|
# @return [String]
|
431
|
-
def inspect
|
456
|
+
def inspect
|
457
|
+
converted = self.class.recursively_to_h(self, convert: true)
|
458
|
+
"#<#{self.class}:0x#{object_id.to_s(16)} #{converted}>"
|
459
|
+
end
|
460
|
+
|
461
|
+
define_sorbet_constant!(:KnownField) do
|
462
|
+
T.type_alias { {mode: T.nilable(Symbol), required: T::Boolean, nilable: T::Boolean} }
|
463
|
+
end
|
432
464
|
end
|
433
465
|
end
|
434
466
|
end
|
@@ -5,6 +5,8 @@ module TerminalShop
|
|
5
5
|
module Type
|
6
6
|
# @api private
|
7
7
|
module Converter
|
8
|
+
extend TerminalShop::Internal::Util::SorbetRuntimeSupport
|
9
|
+
|
8
10
|
# rubocop:disable Lint/UnusedMethodArgument
|
9
11
|
|
10
12
|
# @api private
|
@@ -268,6 +270,22 @@ module TerminalShop
|
|
268
270
|
end
|
269
271
|
end
|
270
272
|
end
|
273
|
+
|
274
|
+
define_sorbet_constant!(:Input) do
|
275
|
+
T.type_alias { T.any(TerminalShop::Internal::Type::Converter, T::Class[T.anything]) }
|
276
|
+
end
|
277
|
+
define_sorbet_constant!(:CoerceState) do
|
278
|
+
T.type_alias do
|
279
|
+
{
|
280
|
+
strictness: T.any(T::Boolean, Symbol),
|
281
|
+
exactness: {yes: Integer, no: Integer, maybe: Integer},
|
282
|
+
branched: Integer
|
283
|
+
}
|
284
|
+
end
|
285
|
+
end
|
286
|
+
define_sorbet_constant!(:DumpState) do
|
287
|
+
T.type_alias { {can_retry: T::Boolean} }
|
288
|
+
end
|
271
289
|
end
|
272
290
|
end
|
273
291
|
end
|
@@ -801,6 +801,62 @@ module TerminalShop
|
|
801
801
|
end
|
802
802
|
end
|
803
803
|
end
|
804
|
+
|
805
|
+
# @api private
|
806
|
+
module SorbetRuntimeSupport
|
807
|
+
class MissingSorbetRuntimeError < ::RuntimeError
|
808
|
+
end
|
809
|
+
|
810
|
+
# @api private
|
811
|
+
#
|
812
|
+
# @return [Hash{Symbol=>Object}]
|
813
|
+
private def sorbet_runtime_constants = @sorbet_runtime_constants ||= {}
|
814
|
+
|
815
|
+
# @api private
|
816
|
+
#
|
817
|
+
# @param name [Symbol]
|
818
|
+
def const_missing(name)
|
819
|
+
super unless sorbet_runtime_constants.key?(name)
|
820
|
+
|
821
|
+
unless Object.const_defined?(:T)
|
822
|
+
message = "Trying to access a Sorbet constant #{name.inspect} without `sorbet-runtime`."
|
823
|
+
raise MissingSorbetRuntimeError.new(message)
|
824
|
+
end
|
825
|
+
|
826
|
+
sorbet_runtime_constants.fetch(name).call
|
827
|
+
end
|
828
|
+
|
829
|
+
# @api private
|
830
|
+
#
|
831
|
+
# @param name [Symbol]
|
832
|
+
# @param blk [Proc]
|
833
|
+
def define_sorbet_constant!(name, &blk) = sorbet_runtime_constants.store(name, blk)
|
834
|
+
end
|
835
|
+
|
836
|
+
extend TerminalShop::Internal::Util::SorbetRuntimeSupport
|
837
|
+
|
838
|
+
define_sorbet_constant!(:ParsedUri) do
|
839
|
+
T.type_alias do
|
840
|
+
{
|
841
|
+
scheme: T.nilable(String),
|
842
|
+
host: T.nilable(String),
|
843
|
+
port: T.nilable(Integer),
|
844
|
+
path: T.nilable(String),
|
845
|
+
query: T::Hash[String, T::Array[String]]
|
846
|
+
}
|
847
|
+
end
|
848
|
+
end
|
849
|
+
|
850
|
+
define_sorbet_constant!(:ServerSentEvent) do
|
851
|
+
T.type_alias do
|
852
|
+
{
|
853
|
+
event: T.nilable(String),
|
854
|
+
data: T.nilable(String),
|
855
|
+
id: T.nilable(String),
|
856
|
+
retry: T.nilable(Integer)
|
857
|
+
}
|
858
|
+
end
|
859
|
+
end
|
804
860
|
end
|
805
861
|
end
|
806
862
|
end
|
@@ -2,10 +2,16 @@
|
|
2
2
|
|
3
3
|
module TerminalShop
|
4
4
|
module Internal
|
5
|
+
extend TerminalShop::Internal::Util::SorbetRuntimeSupport
|
6
|
+
|
5
7
|
OMIT =
|
6
8
|
Object.new.tap do
|
7
9
|
_1.define_singleton_method(:inspect) { "#<#{TerminalShop::Internal}::OMIT>" }
|
8
10
|
end
|
9
11
|
.freeze
|
12
|
+
|
13
|
+
define_sorbet_constant!(:AnyHash) do
|
14
|
+
T.type_alias { T::Hash[Symbol, T.anything] }
|
15
|
+
end
|
10
16
|
end
|
11
17
|
end
|
@@ -119,6 +119,15 @@ module TerminalShop
|
|
119
119
|
|
120
120
|
# @!method self.variants
|
121
121
|
# @return [Array(TerminalShop::SubscriptionAPI::Schedule::Fixed, TerminalShop::SubscriptionAPI::Schedule::Weekly)]
|
122
|
+
|
123
|
+
define_sorbet_constant!(:Variants) do
|
124
|
+
T.type_alias do
|
125
|
+
T.any(
|
126
|
+
TerminalShop::SubscriptionAPI::Schedule::Fixed,
|
127
|
+
TerminalShop::SubscriptionAPI::Schedule::Weekly
|
128
|
+
)
|
129
|
+
end
|
130
|
+
end
|
122
131
|
end
|
123
132
|
end
|
124
133
|
end
|
@@ -70,6 +70,15 @@ module TerminalShop
|
|
70
70
|
|
71
71
|
# @!method self.variants
|
72
72
|
# @return [Array(TerminalShop::SubscriptionUpdateParams::Schedule::Fixed, TerminalShop::SubscriptionUpdateParams::Schedule::Weekly)]
|
73
|
+
|
74
|
+
define_sorbet_constant!(:Variants) do
|
75
|
+
T.type_alias do
|
76
|
+
T.any(
|
77
|
+
TerminalShop::SubscriptionUpdateParams::Schedule::Fixed,
|
78
|
+
TerminalShop::SubscriptionUpdateParams::Schedule::Weekly
|
79
|
+
)
|
80
|
+
end
|
81
|
+
end
|
73
82
|
end
|
74
83
|
end
|
75
84
|
end
|
data/lib/terminal_shop/models.rb
CHANGED
@@ -1,6 +1,33 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module TerminalShop
|
4
|
+
[TerminalShop::Internal::Type::BaseModel, *TerminalShop::Internal::Type::BaseModel.subclasses].each do |cls|
|
5
|
+
cls.define_sorbet_constant!(:OrHash) { T.type_alias { T.any(cls, TerminalShop::Internal::AnyHash) } }
|
6
|
+
end
|
7
|
+
|
8
|
+
[
|
9
|
+
*TerminalShop::Internal::Type::Enum.included_modules,
|
10
|
+
*TerminalShop::Internal::Type::Union.included_modules
|
11
|
+
].each do |cls|
|
12
|
+
cls.constants.each do |name|
|
13
|
+
case cls.const_get(name)
|
14
|
+
in true | false
|
15
|
+
cls.define_sorbet_constant!(:TaggedBoolean) { T.type_alias { T.all(T::Boolean, cls) } }
|
16
|
+
cls.define_sorbet_constant!(:OrBoolean) { T.type_alias { T::Boolean } }
|
17
|
+
in Integer
|
18
|
+
cls.define_sorbet_constant!(:TaggedInteger) { T.type_alias { T.all(Integer, cls) } }
|
19
|
+
cls.define_sorbet_constant!(:OrInteger) { T.type_alias { Integer } }
|
20
|
+
in Float
|
21
|
+
cls.define_sorbet_constant!(:TaggedFloat) { T.type_alias { T.all(Float, cls) } }
|
22
|
+
cls.define_sorbet_constant!(:OrFloat) { T.type_alias { Float } }
|
23
|
+
in Symbol
|
24
|
+
cls.define_sorbet_constant!(:TaggedSymbol) { T.type_alias { T.all(Symbol, cls) } }
|
25
|
+
cls.define_sorbet_constant!(:OrSymbol) { T.type_alias { T.any(Symbol, String) } }
|
26
|
+
else
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
4
31
|
AddressAPI = TerminalShop::Models::AddressAPI
|
5
32
|
|
6
33
|
AddressCreateParams = TerminalShop::Models::AddressCreateParams
|
@@ -69,5 +69,9 @@ module TerminalShop
|
|
69
69
|
# Returns a new instance of RequestOptions.
|
70
70
|
#
|
71
71
|
# @param values [Hash{Symbol=>Object}]
|
72
|
+
|
73
|
+
define_sorbet_constant!(:OrHash) do
|
74
|
+
T.type_alias { T.any(TerminalShop::RequestOptions, TerminalShop::Internal::AnyHash) }
|
75
|
+
end
|
72
76
|
end
|
73
77
|
end
|
data/lib/terminal_shop.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# Standard libraries.
|
4
|
+
# rubocop:disable Lint/RedundantRequireStatement
|
4
5
|
require "English"
|
5
6
|
require "cgi"
|
6
7
|
require "date"
|
@@ -15,6 +16,7 @@ require "set"
|
|
15
16
|
require "stringio"
|
16
17
|
require "time"
|
17
18
|
require "uri"
|
19
|
+
# rubocop:enable Lint/RedundantRequireStatement
|
18
20
|
|
19
21
|
# We already ship the preferred sorbet manifests in the package itself.
|
20
22
|
# `tapioca` currently does not offer us a way to opt out of unnecessary compilation.
|