terminal-shop 0.1.0.pre.alpha.9 → 0.1.0.pre.alpha.11
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/README.md +1 -1
- data/lib/terminal-shop/base_client.rb +143 -124
- data/lib/terminal-shop/base_model.rb +2 -2
- data/lib/terminal-shop/base_page.rb +2 -6
- data/lib/terminal-shop/models/address.rb +0 -11
- data/lib/terminal-shop/models/address_create_response.rb +0 -6
- data/lib/terminal-shop/models/address_delete_response.rb +0 -6
- data/lib/terminal-shop/models/address_list_response.rb +0 -6
- data/lib/terminal-shop/models/app.rb +8 -9
- data/lib/terminal-shop/models/app_create_response.rb +0 -13
- data/lib/terminal-shop/models/app_delete_response.rb +0 -6
- data/lib/terminal-shop/models/app_get_response.rb +0 -6
- data/lib/terminal-shop/models/app_list_response.rb +0 -6
- data/lib/terminal-shop/models/card.rb +0 -16
- data/lib/terminal-shop/models/card_collect_response.rb +0 -12
- data/lib/terminal-shop/models/card_create_response.rb +0 -6
- data/lib/terminal-shop/models/card_delete_response.rb +0 -6
- data/lib/terminal-shop/models/card_list_response.rb +0 -6
- data/lib/terminal-shop/models/cart.rb +0 -33
- data/lib/terminal-shop/models/cart_convert_response.rb +0 -6
- data/lib/terminal-shop/models/cart_get_response.rb +0 -6
- data/lib/terminal-shop/models/cart_set_address_response.rb +0 -6
- data/lib/terminal-shop/models/cart_set_card_response.rb +0 -6
- data/lib/terminal-shop/models/cart_set_item_response.rb +0 -6
- data/lib/terminal-shop/models/email_create_response.rb +0 -6
- data/lib/terminal-shop/models/order.rb +0 -46
- data/lib/terminal-shop/models/order_get_response.rb +0 -6
- data/lib/terminal-shop/models/order_list_response.rb +0 -6
- data/lib/terminal-shop/models/product.rb +0 -11
- data/lib/terminal-shop/models/product_list_response.rb +0 -6
- data/lib/terminal-shop/models/product_variant.rb +0 -8
- data/lib/terminal-shop/models/profile.rb +0 -16
- data/lib/terminal-shop/models/profile_me_response.rb +0 -6
- data/lib/terminal-shop/models/profile_update_response.rb +0 -6
- data/lib/terminal-shop/models/subscription.rb +0 -24
- data/lib/terminal-shop/models/subscription_create_response.rb +0 -6
- data/lib/terminal-shop/models/subscription_delete_response.rb +0 -6
- data/lib/terminal-shop/models/subscription_list_response.rb +0 -6
- data/lib/terminal-shop/models/token.rb +0 -14
- data/lib/terminal-shop/models/token_create_response.rb +0 -13
- data/lib/terminal-shop/models/token_delete_response.rb +0 -6
- data/lib/terminal-shop/models/token_get_response.rb +0 -6
- data/lib/terminal-shop/models/token_list_response.rb +0 -6
- data/lib/terminal-shop/models/view_init_response.rb +0 -17
- data/lib/terminal-shop/pooled_net_requester.rb +130 -61
- data/lib/terminal-shop/resources/app.rb +2 -0
- data/lib/terminal-shop/util.rb +22 -7
- data/lib/terminal-shop/version.rb +1 -1
- data/lib/terminal-shop.rb +55 -55
- data/rbi/lib/terminal-shop/base_client.rbi +40 -27
- data/rbi/lib/terminal-shop/base_model.rbi +63 -99
- data/rbi/lib/terminal-shop/base_page.rbi +4 -3
- data/rbi/lib/terminal-shop/client.rbi +2 -1
- data/rbi/lib/terminal-shop/errors.rbi +10 -5
- data/rbi/lib/terminal-shop/models/address.rbi +16 -14
- data/rbi/lib/terminal-shop/models/address_create_params.rbi +16 -14
- data/rbi/lib/terminal-shop/models/address_list_response.rbi +1 -3
- data/rbi/lib/terminal-shop/models/app.rbi +11 -3
- data/rbi/lib/terminal-shop/models/app_create_response.rbi +2 -1
- data/rbi/lib/terminal-shop/models/app_list_response.rbi +1 -3
- data/rbi/lib/terminal-shop/models/card.rbi +5 -17
- data/rbi/lib/terminal-shop/models/card_collect_response.rbi +2 -1
- data/rbi/lib/terminal-shop/models/card_create_params.rbi +6 -2
- data/rbi/lib/terminal-shop/models/card_list_response.rbi +1 -3
- data/rbi/lib/terminal-shop/models/cart.rbi +16 -15
- data/rbi/lib/terminal-shop/models/cart_set_address_params.rbi +2 -1
- data/rbi/lib/terminal-shop/models/cart_set_card_params.rbi +6 -2
- data/rbi/lib/terminal-shop/models/cart_set_item_params.rbi +8 -8
- data/rbi/lib/terminal-shop/models/email_create_params.rbi +6 -2
- data/rbi/lib/terminal-shop/models/order.rbi +43 -44
- data/rbi/lib/terminal-shop/models/order_list_response.rbi +1 -3
- data/rbi/lib/terminal-shop/models/product.rbi +17 -14
- data/rbi/lib/terminal-shop/models/product_list_response.rbi +1 -3
- data/rbi/lib/terminal-shop/models/profile.rbi +13 -13
- data/rbi/lib/terminal-shop/models/profile_update_params.rbi +6 -8
- data/rbi/lib/terminal-shop/models/subscription.rbi +29 -26
- data/rbi/lib/terminal-shop/models/subscription_list_response.rbi +2 -1
- data/rbi/lib/terminal-shop/models/token_create_response.rbi +2 -1
- data/rbi/lib/terminal-shop/models/token_list_response.rbi +1 -3
- data/rbi/lib/terminal-shop/models/view_init_response.rbi +26 -34
- data/rbi/lib/terminal-shop/pooled_net_requester.rbi +59 -0
- data/rbi/lib/terminal-shop/request_options.rbi +6 -24
- data/rbi/lib/terminal-shop/resources/address.rbi +6 -11
- data/rbi/lib/terminal-shop/resources/app.rbi +10 -13
- data/rbi/lib/terminal-shop/resources/card.rbi +8 -20
- data/rbi/lib/terminal-shop/resources/cart.rbi +10 -21
- data/rbi/lib/terminal-shop/resources/email.rbi +2 -1
- data/rbi/lib/terminal-shop/resources/order.rbi +4 -10
- data/rbi/lib/terminal-shop/resources/product.rbi +2 -9
- data/rbi/lib/terminal-shop/resources/profile.rbi +4 -10
- data/rbi/lib/terminal-shop/resources/subscription.rbi +6 -11
- data/rbi/lib/terminal-shop/resources/token.rbi +8 -20
- data/rbi/lib/terminal-shop/resources/view.rbi +2 -9
- data/rbi/lib/terminal-shop/util.rbi +25 -23
- data/rbi/lib/terminal-shop/version.rbi +1 -1
- data/sig/terminal-shop/base_client.rbs +27 -27
- data/sig/terminal-shop/base_model.rbs +0 -2
- data/sig/terminal-shop/base_page.rbs +1 -1
- data/sig/terminal-shop/models/app.rbs +5 -2
- data/sig/terminal-shop/pooled_net_requester.rbs +42 -0
- data/sig/terminal-shop/resources/app.rbs +1 -0
- data/sig/terminal-shop/util.rbs +7 -1
- data/sig/terminal-shop/version.rbs +1 -1
- metadata +5 -3
@@ -4,91 +4,160 @@ module TerminalShop
|
|
4
4
|
# @private
|
5
5
|
#
|
6
6
|
class PooledNetRequester
|
7
|
-
|
8
|
-
@
|
9
|
-
|
7
|
+
class << self
|
8
|
+
# @private
|
9
|
+
#
|
10
|
+
# @param url [URI::Generic]
|
11
|
+
#
|
12
|
+
# @return [Net::HTTP]
|
13
|
+
#
|
14
|
+
def connect(url)
|
15
|
+
port =
|
16
|
+
case [url.port, url.scheme]
|
17
|
+
in [Integer, _]
|
18
|
+
url.port
|
19
|
+
in [nil, "http" | "ws"]
|
20
|
+
Net::HTTP.http_default_port
|
21
|
+
in [nil, "https" | "wss"]
|
22
|
+
Net::HTTP.https_default_port
|
23
|
+
end
|
24
|
+
|
25
|
+
Net::HTTP.new(url.host, port).tap do
|
26
|
+
_1.use_ssl = %w[https wss].include?(url.scheme)
|
27
|
+
_1.max_retries = 0
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# @private
|
32
|
+
#
|
33
|
+
# @param conn [Net::HTTP]
|
34
|
+
# @param deadline [Float]
|
35
|
+
#
|
36
|
+
private def calibrate_socket_timeout(conn, deadline)
|
37
|
+
timeout = deadline - TerminalShop::Util.monotonic_secs
|
38
|
+
conn.read_timeout = conn.write_timeout = conn.continue_timeout = timeout
|
39
|
+
end
|
40
|
+
|
41
|
+
# @private
|
42
|
+
#
|
43
|
+
# @param conn [Net::HTTP]
|
44
|
+
# @param req [Net::HTTPGenericRequest]
|
45
|
+
# @param deadline [Float]
|
46
|
+
# @param blk [Proc]
|
47
|
+
#
|
48
|
+
def transport(conn, req, deadline, &blk)
|
49
|
+
unless conn.started?
|
50
|
+
conn.open_timeout = deadline - TerminalShop::Util.monotonic_secs
|
51
|
+
conn.start
|
52
|
+
end
|
53
|
+
|
54
|
+
calibrate_socket_timeout(conn, deadline)
|
55
|
+
conn.request(req) do |rsp|
|
56
|
+
blk.call(rsp)
|
57
|
+
rsp.read_body do |bytes|
|
58
|
+
blk.call(bytes)
|
59
|
+
calibrate_socket_timeout(conn, deadline)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
10
63
|
end
|
11
64
|
|
12
65
|
# @private
|
13
66
|
#
|
14
|
-
# @param url [
|
15
|
-
# @param
|
67
|
+
# @param url [URI::Generic]
|
68
|
+
# @param streaming [Boolean]
|
69
|
+
# @param blk [Proc]
|
16
70
|
#
|
17
|
-
|
18
|
-
#
|
19
|
-
private def get_pool(url)
|
71
|
+
private def with_pool(url, streaming:, &blk)
|
20
72
|
origin = TerminalShop::Util.uri_origin(url)
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
73
|
+
th = Thread.current
|
74
|
+
key = :"#{object_id}-#{self.class.name}-connection_in_use_for_#{origin}"
|
75
|
+
|
76
|
+
if th[key] || streaming
|
77
|
+
return Enumerator.new do |y|
|
78
|
+
conn = self.class.connect(url)
|
79
|
+
blk.call(conn, y)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
pool =
|
84
|
+
@mutex.synchronize do
|
85
|
+
@pools[origin] ||= ConnectionPool.new(size: Etc.nprocessors) do
|
86
|
+
self.class.connect(url)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
Enumerator.new do |y|
|
91
|
+
pool.with do |conn|
|
92
|
+
th[key] = true
|
93
|
+
|
94
|
+
blk.call(conn, y)
|
95
|
+
# rubocop:disable Lint/RescueException
|
96
|
+
rescue Exception => e
|
97
|
+
# rubocop:enable Lint/RescueException
|
98
|
+
# should close connection on all errors to ensure no invalid state persists
|
99
|
+
conn.finish if conn.started?
|
100
|
+
raise e
|
101
|
+
ensure
|
102
|
+
th[key] = nil
|
37
103
|
end
|
38
104
|
end
|
39
105
|
end
|
40
106
|
|
41
107
|
# @private
|
42
108
|
#
|
43
|
-
# @param
|
44
|
-
#
|
45
|
-
# @option
|
46
|
-
#
|
47
|
-
# @option
|
48
|
-
#
|
109
|
+
# @param request [Hash{Symbol=>Object}] .
|
110
|
+
#
|
111
|
+
# @option request [Symbol] :method
|
112
|
+
#
|
113
|
+
# @option request [URI::Generic] :url
|
114
|
+
#
|
115
|
+
# @option request [Hash{String=>String}] :headers
|
116
|
+
#
|
117
|
+
# @option request [Object] :body
|
118
|
+
#
|
119
|
+
# @option request [Boolean] :streaming
|
49
120
|
#
|
50
|
-
#
|
121
|
+
# @option request [Integer] :max_retries
|
51
122
|
#
|
52
|
-
|
53
|
-
|
123
|
+
# @option request [Float] :deadline
|
124
|
+
#
|
125
|
+
# @return [Array(Net::HTTPResponse, Enumerable)]
|
126
|
+
#
|
127
|
+
def execute(request)
|
128
|
+
method, url, headers, body, deadline = request.fetch_values(:method, :url, :headers, :body, :deadline)
|
129
|
+
streaming = request.fetch(:streaming)
|
54
130
|
|
55
|
-
|
131
|
+
req = Net::HTTPGenericRequest.new(
|
56
132
|
method.to_s.upcase,
|
57
133
|
!body.nil?,
|
58
|
-
|
134
|
+
method != :head,
|
59
135
|
url.to_s
|
60
136
|
)
|
61
137
|
|
62
|
-
headers.each {
|
138
|
+
headers.each { req[_1] = _2 }
|
63
139
|
case body
|
64
|
-
in
|
65
|
-
|
140
|
+
in nil
|
141
|
+
in String
|
142
|
+
req.body = body
|
66
143
|
in IO | StringIO
|
67
|
-
|
144
|
+
body.rewind
|
145
|
+
req.body_stream = body
|
68
146
|
end
|
69
147
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
# rubocop:disable Lint/RescueException
|
84
|
-
rescue Exception => e
|
85
|
-
# rubocop:enable Lint/RescueException
|
86
|
-
# should close connection on all errors to ensure no invalid state persists
|
87
|
-
conn.finish if conn.started?
|
88
|
-
raise e
|
89
|
-
end
|
90
|
-
rescue ConnectionPool::TimeoutError
|
91
|
-
raise TerminalShop::APITimeoutError.new(url: url)
|
148
|
+
enum =
|
149
|
+
with_pool(url, streaming: streaming) do |conn, y|
|
150
|
+
self.class.transport(conn, req, deadline, &y)
|
151
|
+
end
|
152
|
+
|
153
|
+
enum = streaming ? enum.lazy : enum.to_a
|
154
|
+
response = enum.take(1).first
|
155
|
+
[response, (response.body = enum.drop(1))]
|
156
|
+
end
|
157
|
+
|
158
|
+
def initialize
|
159
|
+
@mutex = Mutex.new
|
160
|
+
@pools = {}
|
92
161
|
end
|
93
162
|
end
|
94
163
|
end
|
@@ -13,6 +13,8 @@ module TerminalShop
|
|
13
13
|
#
|
14
14
|
# @option params [String] :redirect_uri Redirect URI of the app.
|
15
15
|
#
|
16
|
+
# @option params [String] :secret OAuth 2.0 client secret of the app (obfuscated).
|
17
|
+
#
|
16
18
|
# @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
|
17
19
|
#
|
18
20
|
# @return [TerminalShop::Models::AppCreateResponse]
|
data/lib/terminal-shop/util.rb
CHANGED
@@ -105,6 +105,12 @@ module TerminalShop
|
|
105
105
|
end
|
106
106
|
end
|
107
107
|
|
108
|
+
# @private
|
109
|
+
#
|
110
|
+
# @return [Float]
|
111
|
+
#
|
112
|
+
def self.monotonic_secs = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
113
|
+
|
108
114
|
# @private
|
109
115
|
#
|
110
116
|
# @param exceptions [Array<Exception>]
|
@@ -384,6 +390,11 @@ module TerminalShop
|
|
384
390
|
"transfer-encoding" => "chunked"
|
385
391
|
}
|
386
392
|
[headers, strio]
|
393
|
+
in [_, StringIO]
|
394
|
+
[headers, body.string]
|
395
|
+
in [_, IO]
|
396
|
+
headers = {**headers, "transfer-encoding" => "chunked"}
|
397
|
+
[headers, body]
|
387
398
|
else
|
388
399
|
[headers, body]
|
389
400
|
end
|
@@ -391,24 +402,28 @@ module TerminalShop
|
|
391
402
|
|
392
403
|
# @private
|
393
404
|
#
|
394
|
-
# @param
|
405
|
+
# @param headers [Hash{String=>String}, Net::HTTPHeader]
|
406
|
+
# @param stream [Enumerable]
|
395
407
|
# @param suppress_error [Boolean]
|
396
408
|
#
|
397
409
|
# @raise [JSON::ParserError]
|
398
410
|
# @return [Object]
|
399
411
|
#
|
400
|
-
def self.decode_content(
|
401
|
-
case
|
402
|
-
in
|
412
|
+
def self.decode_content(headers, stream:, suppress_error: false)
|
413
|
+
case headers["content-type"]
|
414
|
+
in %r{^application/json}
|
415
|
+
json = stream.to_a.join("")
|
403
416
|
begin
|
404
|
-
JSON.parse(
|
417
|
+
JSON.parse(json, symbolize_names: true)
|
405
418
|
rescue JSON::ParserError => e
|
406
419
|
raise e unless suppress_error
|
407
|
-
|
420
|
+
json
|
408
421
|
end
|
422
|
+
in %r{^text/}
|
423
|
+
stream.to_a.join("")
|
409
424
|
else
|
410
425
|
# TODO: parsing other response types
|
411
|
-
|
426
|
+
StringIO.new(stream.to_a.join(""))
|
412
427
|
end
|
413
428
|
end
|
414
429
|
|
data/lib/terminal-shop.rb
CHANGED
@@ -17,94 +17,94 @@ require "uri"
|
|
17
17
|
require "connection_pool"
|
18
18
|
|
19
19
|
# Package files.
|
20
|
-
require_relative "terminal-shop/pooled_net_requester"
|
21
20
|
require_relative "terminal-shop/version"
|
22
21
|
require_relative "terminal-shop/util"
|
23
22
|
require_relative "terminal-shop/extern"
|
24
23
|
require_relative "terminal-shop/base_model"
|
25
24
|
require_relative "terminal-shop/base_page"
|
26
25
|
require_relative "terminal-shop/request_options"
|
27
|
-
require_relative "terminal-shop/base_client"
|
28
26
|
require_relative "terminal-shop/errors"
|
29
|
-
require_relative "terminal-shop/
|
30
|
-
require_relative "terminal-shop/
|
31
|
-
require_relative "terminal-shop/
|
32
|
-
require_relative "terminal-shop/models/
|
33
|
-
require_relative "terminal-shop/models/
|
34
|
-
require_relative "terminal-shop/models/profile_me_response"
|
27
|
+
require_relative "terminal-shop/base_client"
|
28
|
+
require_relative "terminal-shop/pooled_net_requester"
|
29
|
+
require_relative "terminal-shop/client"
|
30
|
+
require_relative "terminal-shop/models/app"
|
31
|
+
require_relative "terminal-shop/models/subscription"
|
35
32
|
require_relative "terminal-shop/models/address"
|
33
|
+
require_relative "terminal-shop/models/address_create_params"
|
36
34
|
require_relative "terminal-shop/models/address_create_response"
|
37
|
-
require_relative "terminal-shop/models/
|
35
|
+
require_relative "terminal-shop/models/address_delete_params"
|
38
36
|
require_relative "terminal-shop/models/address_delete_response"
|
37
|
+
require_relative "terminal-shop/models/address_list_params"
|
38
|
+
require_relative "terminal-shop/models/address_list_response"
|
39
|
+
require_relative "terminal-shop/models/app_create_params"
|
40
|
+
require_relative "terminal-shop/models/app_create_response"
|
41
|
+
require_relative "terminal-shop/models/app_delete_params"
|
42
|
+
require_relative "terminal-shop/models/app_delete_response"
|
43
|
+
require_relative "terminal-shop/models/app_get_params"
|
44
|
+
require_relative "terminal-shop/models/app_get_response"
|
45
|
+
require_relative "terminal-shop/models/app_list_params"
|
46
|
+
require_relative "terminal-shop/models/app_list_response"
|
39
47
|
require_relative "terminal-shop/models/card"
|
48
|
+
require_relative "terminal-shop/models/card_collect_params"
|
49
|
+
require_relative "terminal-shop/models/card_collect_response"
|
50
|
+
require_relative "terminal-shop/models/card_create_params"
|
40
51
|
require_relative "terminal-shop/models/card_create_response"
|
41
|
-
require_relative "terminal-shop/models/
|
52
|
+
require_relative "terminal-shop/models/card_delete_params"
|
42
53
|
require_relative "terminal-shop/models/card_delete_response"
|
43
|
-
require_relative "terminal-shop/models/
|
54
|
+
require_relative "terminal-shop/models/card_list_params"
|
55
|
+
require_relative "terminal-shop/models/card_list_response"
|
44
56
|
require_relative "terminal-shop/models/cart"
|
57
|
+
require_relative "terminal-shop/models/cart_convert_params"
|
45
58
|
require_relative "terminal-shop/models/cart_convert_response"
|
59
|
+
require_relative "terminal-shop/models/cart_get_params"
|
46
60
|
require_relative "terminal-shop/models/cart_get_response"
|
61
|
+
require_relative "terminal-shop/models/cart_set_address_params"
|
47
62
|
require_relative "terminal-shop/models/cart_set_address_response"
|
63
|
+
require_relative "terminal-shop/models/cart_set_card_params"
|
48
64
|
require_relative "terminal-shop/models/cart_set_card_response"
|
65
|
+
require_relative "terminal-shop/models/cart_set_item_params"
|
49
66
|
require_relative "terminal-shop/models/cart_set_item_response"
|
67
|
+
require_relative "terminal-shop/models/email_create_params"
|
68
|
+
require_relative "terminal-shop/models/email_create_response"
|
50
69
|
require_relative "terminal-shop/models/order"
|
51
|
-
require_relative "terminal-shop/models/
|
70
|
+
require_relative "terminal-shop/models/order_get_params"
|
52
71
|
require_relative "terminal-shop/models/order_get_response"
|
53
|
-
require_relative "terminal-shop/models/
|
54
|
-
require_relative "terminal-shop/models/
|
55
|
-
require_relative "terminal-shop/models/
|
56
|
-
require_relative "terminal-shop/models/subscription_delete_response"
|
57
|
-
require_relative "terminal-shop/models/token"
|
58
|
-
require_relative "terminal-shop/models/token_create_response"
|
59
|
-
require_relative "terminal-shop/models/token_list_response"
|
60
|
-
require_relative "terminal-shop/models/token_delete_response"
|
61
|
-
require_relative "terminal-shop/models/token_get_response"
|
62
|
-
require_relative "terminal-shop/models/app"
|
63
|
-
require_relative "terminal-shop/models/app_create_response"
|
64
|
-
require_relative "terminal-shop/models/app_list_response"
|
65
|
-
require_relative "terminal-shop/models/app_delete_response"
|
66
|
-
require_relative "terminal-shop/models/app_get_response"
|
67
|
-
require_relative "terminal-shop/models/email_create_response"
|
68
|
-
require_relative "terminal-shop/models/view_init_response"
|
72
|
+
require_relative "terminal-shop/models/order_list_params"
|
73
|
+
require_relative "terminal-shop/models/order_list_response"
|
74
|
+
require_relative "terminal-shop/models/product"
|
69
75
|
require_relative "terminal-shop/models/product_list_params"
|
70
|
-
require_relative "terminal-shop/models/
|
76
|
+
require_relative "terminal-shop/models/product_list_response"
|
77
|
+
require_relative "terminal-shop/models/product_variant"
|
78
|
+
require_relative "terminal-shop/models/profile"
|
71
79
|
require_relative "terminal-shop/models/profile_me_params"
|
72
|
-
require_relative "terminal-shop/models/
|
73
|
-
require_relative "terminal-shop/models/
|
74
|
-
require_relative "terminal-shop/models/
|
75
|
-
require_relative "terminal-shop/models/card_create_params"
|
76
|
-
require_relative "terminal-shop/models/card_list_params"
|
77
|
-
require_relative "terminal-shop/models/card_delete_params"
|
78
|
-
require_relative "terminal-shop/models/card_collect_params"
|
79
|
-
require_relative "terminal-shop/models/cart_convert_params"
|
80
|
-
require_relative "terminal-shop/models/cart_get_params"
|
81
|
-
require_relative "terminal-shop/models/cart_set_address_params"
|
82
|
-
require_relative "terminal-shop/models/cart_set_card_params"
|
83
|
-
require_relative "terminal-shop/models/cart_set_item_params"
|
84
|
-
require_relative "terminal-shop/models/order_list_params"
|
85
|
-
require_relative "terminal-shop/models/order_get_params"
|
80
|
+
require_relative "terminal-shop/models/profile_me_response"
|
81
|
+
require_relative "terminal-shop/models/profile_update_params"
|
82
|
+
require_relative "terminal-shop/models/profile_update_response"
|
86
83
|
require_relative "terminal-shop/models/subscription_create_params"
|
87
|
-
require_relative "terminal-shop/models/
|
84
|
+
require_relative "terminal-shop/models/subscription_create_response"
|
88
85
|
require_relative "terminal-shop/models/subscription_delete_params"
|
86
|
+
require_relative "terminal-shop/models/subscription_delete_response"
|
87
|
+
require_relative "terminal-shop/models/subscription_list_params"
|
88
|
+
require_relative "terminal-shop/models/subscription_list_response"
|
89
|
+
require_relative "terminal-shop/models/token"
|
89
90
|
require_relative "terminal-shop/models/token_create_params"
|
90
|
-
require_relative "terminal-shop/models/
|
91
|
+
require_relative "terminal-shop/models/token_create_response"
|
91
92
|
require_relative "terminal-shop/models/token_delete_params"
|
93
|
+
require_relative "terminal-shop/models/token_delete_response"
|
92
94
|
require_relative "terminal-shop/models/token_get_params"
|
93
|
-
require_relative "terminal-shop/models/
|
94
|
-
require_relative "terminal-shop/models/
|
95
|
-
require_relative "terminal-shop/models/
|
96
|
-
require_relative "terminal-shop/models/app_get_params"
|
97
|
-
require_relative "terminal-shop/models/email_create_params"
|
95
|
+
require_relative "terminal-shop/models/token_get_response"
|
96
|
+
require_relative "terminal-shop/models/token_list_params"
|
97
|
+
require_relative "terminal-shop/models/token_list_response"
|
98
98
|
require_relative "terminal-shop/models/view_init_params"
|
99
|
-
require_relative "terminal-shop/
|
100
|
-
require_relative "terminal-shop/resources/product"
|
101
|
-
require_relative "terminal-shop/resources/profile"
|
99
|
+
require_relative "terminal-shop/models/view_init_response"
|
102
100
|
require_relative "terminal-shop/resources/address"
|
101
|
+
require_relative "terminal-shop/resources/app"
|
103
102
|
require_relative "terminal-shop/resources/card"
|
104
103
|
require_relative "terminal-shop/resources/cart"
|
104
|
+
require_relative "terminal-shop/resources/email"
|
105
105
|
require_relative "terminal-shop/resources/order"
|
106
|
+
require_relative "terminal-shop/resources/product"
|
107
|
+
require_relative "terminal-shop/resources/profile"
|
106
108
|
require_relative "terminal-shop/resources/subscription"
|
107
109
|
require_relative "terminal-shop/resources/token"
|
108
|
-
require_relative "terminal-shop/resources/app"
|
109
|
-
require_relative "terminal-shop/resources/email"
|
110
110
|
require_relative "terminal-shop/resources/view"
|
@@ -4,7 +4,7 @@ module TerminalShop
|
|
4
4
|
class BaseClient
|
5
5
|
abstract!
|
6
6
|
|
7
|
-
|
7
|
+
RequestComponentsShape = T.type_alias do
|
8
8
|
{
|
9
9
|
method: Symbol,
|
10
10
|
path: T.any(String, T::Array[String]),
|
@@ -18,12 +18,13 @@ module TerminalShop
|
|
18
18
|
}
|
19
19
|
end
|
20
20
|
|
21
|
-
|
21
|
+
RequestInputShape = T.type_alias do
|
22
22
|
{
|
23
23
|
method: Symbol,
|
24
24
|
url: URI::Generic,
|
25
25
|
headers: T::Hash[String, String],
|
26
26
|
body: T.anything,
|
27
|
+
streaming: T::Boolean,
|
27
28
|
max_retries: Integer,
|
28
29
|
timeout: Float
|
29
30
|
}
|
@@ -31,10 +32,27 @@ module TerminalShop
|
|
31
32
|
|
32
33
|
MAX_REDIRECTS = 20
|
33
34
|
|
34
|
-
sig { params(req: TerminalShop::BaseClient::
|
35
|
+
sig { params(req: TerminalShop::BaseClient::RequestComponentsShape).void }
|
35
36
|
def self.validate!(req)
|
36
37
|
end
|
37
38
|
|
39
|
+
sig do
|
40
|
+
params(status: Integer, headers: T.any(T::Hash[String, String], Net::HTTPHeader)).returns(T::Boolean)
|
41
|
+
end
|
42
|
+
def self.should_retry?(status, headers:)
|
43
|
+
end
|
44
|
+
|
45
|
+
sig do
|
46
|
+
params(
|
47
|
+
request: TerminalShop::BaseClient::RequestInputShape,
|
48
|
+
status: Integer,
|
49
|
+
response_headers: T.any(T::Hash[String, String], Net::HTTPHeader)
|
50
|
+
)
|
51
|
+
.returns(TerminalShop::BaseClient::RequestInputShape)
|
52
|
+
end
|
53
|
+
def self.follow_redirect(request, status:, response_headers:)
|
54
|
+
end
|
55
|
+
|
38
56
|
sig { returns(T.anything) }
|
39
57
|
def requester
|
40
58
|
end
|
@@ -52,7 +70,8 @@ module TerminalShop
|
|
52
70
|
max_retry_delay: Float,
|
53
71
|
headers: T::Hash[String, T.nilable(String)],
|
54
72
|
idempotency_header: T.nilable(String)
|
55
|
-
)
|
73
|
+
)
|
74
|
+
.void
|
56
75
|
end
|
57
76
|
def initialize(
|
58
77
|
base_url:,
|
@@ -74,45 +93,38 @@ module TerminalShop
|
|
74
93
|
end
|
75
94
|
|
76
95
|
sig do
|
77
|
-
|
78
|
-
req: TerminalShop::BaseClient::
|
79
|
-
|
80
|
-
).returns(TerminalShop::BaseClient::NormalizedRequestShape)
|
96
|
+
overridable
|
97
|
+
.params(req: TerminalShop::BaseClient::RequestComponentsShape, opts: T::Hash[Symbol, T.anything])
|
98
|
+
.returns(TerminalShop::BaseClient::RequestInputShape)
|
81
99
|
end
|
82
100
|
private def build_request(req, opts)
|
83
101
|
end
|
84
102
|
|
85
|
-
sig { params(status: Integer, headers: T::Hash[String, String]).returns(T::Boolean) }
|
86
|
-
private def should_retry?(status, headers:)
|
87
|
-
end
|
88
|
-
|
89
103
|
sig { params(headers: T::Hash[String, String], retry_count: Integer).returns(Float) }
|
90
104
|
private def retry_delay(headers, retry_count:)
|
91
105
|
end
|
92
106
|
|
93
107
|
sig do
|
94
108
|
params(
|
95
|
-
request: TerminalShop::BaseClient::
|
96
|
-
status: Integer,
|
97
|
-
location_header: String
|
98
|
-
).returns(TerminalShop::BaseClient::NormalizedRequestShape)
|
99
|
-
end
|
100
|
-
private def follow_redirect(request, status:, location_header:)
|
101
|
-
end
|
102
|
-
|
103
|
-
sig do
|
104
|
-
params(
|
105
|
-
request: TerminalShop::BaseClient::NormalizedRequestShape,
|
109
|
+
request: TerminalShop::BaseClient::RequestInputShape,
|
106
110
|
redirect_count: Integer,
|
107
111
|
retry_count: Integer,
|
108
112
|
send_retry_header: T::Boolean
|
109
|
-
)
|
113
|
+
)
|
114
|
+
.returns([Net::HTTPResponse, T::Enumerable[String]])
|
110
115
|
end
|
111
116
|
private def send_request(request, redirect_count:, retry_count:, send_retry_header:)
|
112
117
|
end
|
113
118
|
|
114
|
-
sig
|
115
|
-
|
119
|
+
sig do
|
120
|
+
params(
|
121
|
+
req: TerminalShop::BaseClient::RequestComponentsShape,
|
122
|
+
headers: T.any(T::Hash[String, String], Net::HTTPHeader),
|
123
|
+
stream: T::Enumerable[String]
|
124
|
+
)
|
125
|
+
.returns(T.anything)
|
126
|
+
end
|
127
|
+
private def parse_response(req, headers:, stream:)
|
116
128
|
end
|
117
129
|
|
118
130
|
sig do
|
@@ -126,7 +138,8 @@ module TerminalShop
|
|
126
138
|
page: T.nilable(T::Class[TerminalShop::BaseModel]),
|
127
139
|
model: T.nilable(TerminalShop::Converter::Input),
|
128
140
|
options: T.nilable(T.any(TerminalShop::RequestOptions, T::Hash[Symbol, T.anything]))
|
129
|
-
)
|
141
|
+
)
|
142
|
+
.returns(T.anything)
|
130
143
|
end
|
131
144
|
def request(
|
132
145
|
method,
|