terminal-shop 0.1.0.pre.alpha.10 → 0.1.0.pre.alpha.12
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 +165 -137
- data/lib/terminal-shop/base_model.rb +2 -4
- data/lib/terminal-shop/base_page.rb +2 -6
- data/lib/terminal-shop/client.rb +0 -1
- 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 +1 -66
- 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 +6 -37
- 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 +127 -82
- data/lib/terminal-shop/resources/app.rb +2 -0
- data/lib/terminal-shop/resources/subscription.rb +0 -2
- data/lib/terminal-shop/util.rb +64 -7
- data/lib/terminal-shop/version.rb +1 -1
- data/lib/terminal-shop.rb +56 -55
- data/manifest.yaml +1 -0
- data/rbi/lib/terminal-shop/base_client.rbi +41 -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 -59
- data/rbi/lib/terminal-shop/models/subscription_list_response.rbi +2 -1
- data/rbi/lib/terminal-shop/models/token.rbi +7 -25
- 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 +38 -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 -13
- 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 +33 -23
- data/rbi/lib/terminal-shop/version.rbi +1 -1
- data/sig/terminal-shop/base_client.rbs +28 -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/models/subscription.rbs +0 -16
- data/sig/terminal-shop/models/token.rbs +3 -22
- data/sig/terminal-shop/pooled_net_requester.rbs +32 -0
- data/sig/terminal-shop/resources/app.rbs +1 -0
- data/sig/terminal-shop/resources/subscription.rbs +0 -1
- data/sig/terminal-shop/util.rbs +11 -1
- data/sig/terminal-shop/version.rbs +1 -1
- metadata +5 -3
@@ -2,12 +2,6 @@
|
|
2
2
|
|
3
3
|
module TerminalShop
|
4
4
|
module Models
|
5
|
-
# @example
|
6
|
-
# ```ruby
|
7
|
-
# token_create_response => {
|
8
|
-
# data: TerminalShop::Models::TokenCreateResponse::Data
|
9
|
-
# }
|
10
|
-
# ```
|
11
5
|
class TokenCreateResponse < TerminalShop::BaseModel
|
12
6
|
# @!attribute data
|
13
7
|
#
|
@@ -21,13 +15,6 @@ module TerminalShop
|
|
21
15
|
|
22
16
|
# def initialize: (Hash | TerminalShop::BaseModel) -> void
|
23
17
|
|
24
|
-
# @example
|
25
|
-
# ```ruby
|
26
|
-
# data => {
|
27
|
-
# id: String,
|
28
|
-
# token: String
|
29
|
-
# }
|
30
|
-
# ```
|
31
18
|
class Data < TerminalShop::BaseModel
|
32
19
|
# @!attribute id
|
33
20
|
# Personal token ID.
|
@@ -2,12 +2,6 @@
|
|
2
2
|
|
3
3
|
module TerminalShop
|
4
4
|
module Models
|
5
|
-
# @example
|
6
|
-
# ```ruby
|
7
|
-
# token_get_response => {
|
8
|
-
# data: TerminalShop::Models::TokenAPI
|
9
|
-
# }
|
10
|
-
# ```
|
11
5
|
class TokenGetResponse < TerminalShop::BaseModel
|
12
6
|
# @!attribute data
|
13
7
|
# A personal access token used to access the Terminal API. If you leak this,
|
@@ -2,12 +2,6 @@
|
|
2
2
|
|
3
3
|
module TerminalShop
|
4
4
|
module Models
|
5
|
-
# @example
|
6
|
-
# ```ruby
|
7
|
-
# token_list_response => {
|
8
|
-
# data: -> { TerminalShop::ArrayOf[TerminalShop::Models::TokenAPI] === _1 }
|
9
|
-
# }
|
10
|
-
# ```
|
11
5
|
class TokenListResponse < TerminalShop::BaseModel
|
12
6
|
# @!attribute data
|
13
7
|
# List of personal access tokens.
|
@@ -2,12 +2,6 @@
|
|
2
2
|
|
3
3
|
module TerminalShop
|
4
4
|
module Models
|
5
|
-
# @example
|
6
|
-
# ```ruby
|
7
|
-
# view_init_response => {
|
8
|
-
# data: TerminalShop::Models::ViewInitResponse::Data
|
9
|
-
# }
|
10
|
-
# ```
|
11
5
|
class ViewInitResponse < TerminalShop::BaseModel
|
12
6
|
# @!attribute data
|
13
7
|
# Initial app data.
|
@@ -22,17 +16,6 @@ module TerminalShop
|
|
22
16
|
|
23
17
|
# def initialize: (Hash | TerminalShop::BaseModel) -> void
|
24
18
|
|
25
|
-
# @example
|
26
|
-
# ```ruby
|
27
|
-
# data => {
|
28
|
-
# addresses: -> { TerminalShop::ArrayOf[TerminalShop::Models::AddressAPI] === _1 },
|
29
|
-
# apps: -> { TerminalShop::ArrayOf[TerminalShop::Models::AppAPI] === _1 },
|
30
|
-
# cards: -> { TerminalShop::ArrayOf[TerminalShop::Models::CardAPI] === _1 },
|
31
|
-
# cart: TerminalShop::Models::CartAPI,
|
32
|
-
# orders: -> { TerminalShop::ArrayOf[TerminalShop::Models::OrderAPI] === _1 },
|
33
|
-
# **_
|
34
|
-
# }
|
35
|
-
# ```
|
36
19
|
class Data < TerminalShop::BaseModel
|
37
20
|
# @!attribute addresses
|
38
21
|
#
|
@@ -4,122 +4,167 @@ 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
|
+
def calibrate_socket_timeout(conn, deadline)
|
37
|
+
timeout = deadline - TerminalShop::Util.monotonic_secs
|
38
|
+
(conn.open_timeout = timeout) unless conn.started?
|
39
|
+
conn.read_timeout = conn.write_timeout = conn.continue_timeout = timeout
|
40
|
+
end
|
41
|
+
|
42
|
+
# @private
|
43
|
+
#
|
44
|
+
# @param request [Hash{Symbol=>Object}] .
|
45
|
+
#
|
46
|
+
# @option request [Symbol] :method
|
47
|
+
#
|
48
|
+
# @option request [URI::Generic] :url
|
49
|
+
#
|
50
|
+
# @option request [Hash{String=>String}] :headers
|
51
|
+
#
|
52
|
+
# @return [Net::HTTPGenericRequest]
|
53
|
+
#
|
54
|
+
def build_request(request)
|
55
|
+
method, url, headers, body = request.fetch_values(:method, :url, :headers, :body)
|
56
|
+
req = Net::HTTPGenericRequest.new(
|
57
|
+
method.to_s.upcase,
|
58
|
+
!body.nil?,
|
59
|
+
method != :head,
|
60
|
+
url.to_s
|
61
|
+
)
|
62
|
+
|
63
|
+
headers.each { req[_1] = _2 }
|
64
|
+
|
65
|
+
case body
|
66
|
+
in nil
|
67
|
+
in String
|
68
|
+
req.body = body
|
69
|
+
in StringIO
|
70
|
+
req.body = body.string
|
71
|
+
in IO
|
72
|
+
body.rewind
|
73
|
+
req.body_stream = body
|
74
|
+
end
|
75
|
+
|
76
|
+
req
|
77
|
+
end
|
10
78
|
end
|
11
79
|
|
12
80
|
# @private
|
13
81
|
#
|
14
|
-
# @param url [
|
82
|
+
# @param url [URI::Generic]
|
15
83
|
# @param blk [Proc]
|
16
84
|
#
|
17
|
-
# @return [ConnectionPool]
|
18
|
-
#
|
19
85
|
private def with_pool(url, &blk)
|
20
86
|
origin = TerminalShop::Util.uri_origin(url)
|
21
|
-
|
87
|
+
th = Thread.current
|
88
|
+
key = :"#{object_id}-#{self.class.name}-connection_in_use_for_#{origin}"
|
22
89
|
|
23
|
-
|
90
|
+
if th[key]
|
91
|
+
tap do
|
92
|
+
conn = self.class.connect(url)
|
93
|
+
return blk.call(conn)
|
94
|
+
ensure
|
95
|
+
conn.finish if conn&.started?
|
96
|
+
end
|
97
|
+
end
|
24
98
|
|
25
99
|
pool =
|
26
100
|
@mutex.synchronize do
|
27
101
|
@pools[origin] ||= ConnectionPool.new(size: Etc.nprocessors) do
|
28
|
-
|
102
|
+
self.class.connect(url)
|
29
103
|
end
|
30
104
|
end
|
31
105
|
|
32
106
|
pool.with do |conn|
|
33
|
-
|
34
|
-
|
107
|
+
th[key] = true
|
35
108
|
blk.call(conn)
|
36
|
-
# rubocop:disable Lint/RescueException
|
37
|
-
rescue Exception => e
|
38
|
-
# rubocop:enable Lint/RescueException
|
39
|
-
# should close connection on all errors to ensure no invalid state persists
|
40
|
-
conn.finish if conn.started?
|
41
|
-
raise e
|
42
109
|
ensure
|
43
|
-
|
110
|
+
th[key] = nil
|
44
111
|
end
|
45
112
|
end
|
46
113
|
|
47
114
|
# @private
|
48
115
|
#
|
49
|
-
# @param
|
116
|
+
# @param request [Hash{Symbol=>Object}] .
|
50
117
|
#
|
51
|
-
#
|
118
|
+
# @option request [Symbol] :method
|
52
119
|
#
|
53
|
-
|
54
|
-
port =
|
55
|
-
case [url.port, url.scheme]
|
56
|
-
in [Integer, _]
|
57
|
-
url.port
|
58
|
-
in [nil, "http" | "ws"]
|
59
|
-
Net::HTTP.http_default_port
|
60
|
-
in [nil, "https" | "wss"]
|
61
|
-
Net::HTTP.https_default_port
|
62
|
-
end
|
63
|
-
|
64
|
-
Net::HTTP.new(url.host, port).tap do
|
65
|
-
_1.use_ssl = %w[https wss].include?(url.scheme)
|
66
|
-
_1.max_retries = 0
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
# @private
|
71
|
-
#
|
72
|
-
# @param req [Hash{Symbol => Object}]
|
73
|
-
# @option req [Symbol] :method
|
74
|
-
# @option req [URI::Generic] :url
|
75
|
-
# @option req [Hash{String => String}] :headers
|
76
|
-
# @option req [String, Hash, IO, StringIO] :body
|
77
|
-
# @option req [Float] :timeout
|
120
|
+
# @option request [URI::Generic] :url
|
78
121
|
#
|
79
|
-
#
|
122
|
+
# @option request [Hash{String=>String}] :headers
|
80
123
|
#
|
81
|
-
|
82
|
-
method, url, headers, body, timeout = req.fetch_values(:method, :url, :headers, :body, :timeout)
|
83
|
-
|
84
|
-
request = Net::HTTPGenericRequest.new(
|
85
|
-
method.to_s.upcase,
|
86
|
-
!body.nil?,
|
87
|
-
method != :head,
|
88
|
-
url.to_s
|
89
|
-
)
|
90
|
-
|
91
|
-
headers.each { |k, v| request[k] = v }
|
92
|
-
case body
|
93
|
-
in String | nil
|
94
|
-
request.body = body
|
95
|
-
in IO | StringIO
|
96
|
-
request.body_stream = body
|
97
|
-
end
|
98
|
-
|
99
|
-
with_pool(url) do |conn|
|
100
|
-
make_request(conn, request, timeout)
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
# @private
|
124
|
+
# @option request [Object] :body
|
105
125
|
#
|
106
|
-
#
|
107
|
-
# @param request [Net::HTTPGenericRequest]
|
108
|
-
# @param timeout [Float]
|
126
|
+
# @option request [Float] :deadline
|
109
127
|
#
|
110
|
-
# @return [Net::HTTPResponse]
|
128
|
+
# @return [Array(Net::HTTPResponse, Enumerable)]
|
111
129
|
#
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
130
|
+
def execute(request)
|
131
|
+
url, deadline = request.fetch_values(:url, :deadline)
|
132
|
+
req = self.class.build_request(request)
|
133
|
+
|
134
|
+
eof = false
|
135
|
+
enum = Enumerator.new do |y|
|
136
|
+
with_pool(url) do |conn|
|
137
|
+
conn.start unless conn.started?
|
138
|
+
self.class.calibrate_socket_timeout(conn, deadline)
|
139
|
+
|
140
|
+
conn.request(req) do |rsp|
|
141
|
+
y << [conn, rsp]
|
142
|
+
rsp.read_body do |bytes|
|
143
|
+
y << bytes
|
144
|
+
self.class.calibrate_socket_timeout(conn, deadline)
|
145
|
+
end
|
146
|
+
eof = true
|
147
|
+
end
|
148
|
+
end
|
116
149
|
end
|
117
150
|
|
118
|
-
|
119
|
-
|
120
|
-
conn
|
151
|
+
# need to protect the `Enumerator` against `#.rewind`
|
152
|
+
fused = false
|
153
|
+
conn, response = enum.next
|
154
|
+
body = Enumerator.new do |y|
|
155
|
+
next if fused
|
121
156
|
|
122
|
-
|
157
|
+
fused = true
|
158
|
+
loop { y << enum.next }
|
159
|
+
ensure
|
160
|
+
conn.finish if !eof && conn.started?
|
161
|
+
end
|
162
|
+
[response, (response.body = body)]
|
163
|
+
end
|
164
|
+
|
165
|
+
def initialize
|
166
|
+
@mutex = Mutex.new
|
167
|
+
@pools = {}
|
123
168
|
end
|
124
169
|
end
|
125
170
|
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]
|
@@ -13,8 +13,6 @@ module TerminalShop
|
|
13
13
|
#
|
14
14
|
# @option params [String] :card_id ID of the card used for the subscription.
|
15
15
|
#
|
16
|
-
# @option params [Symbol, TerminalShop::Models::SubscriptionAPI::Frequency] :frequency Frequency of the subscription.
|
17
|
-
#
|
18
16
|
# @option params [String] :product_variant_id ID of the product variant being subscribed to.
|
19
17
|
#
|
20
18
|
# @option params [Integer] :quantity Quantity of the subscription.
|
data/lib/terminal-shop/util.rb
CHANGED
@@ -6,6 +6,48 @@ module TerminalShop
|
|
6
6
|
# @private
|
7
7
|
#
|
8
8
|
module Util
|
9
|
+
# @private
|
10
|
+
#
|
11
|
+
# @return [String]
|
12
|
+
#
|
13
|
+
def self.arch
|
14
|
+
case (arch = RbConfig::CONFIG["arch"])&.downcase
|
15
|
+
in nil
|
16
|
+
"unknown"
|
17
|
+
in /aarch64|arm64/
|
18
|
+
"arm64"
|
19
|
+
in /x86_64/
|
20
|
+
"x64"
|
21
|
+
in /arm/
|
22
|
+
"arm"
|
23
|
+
else
|
24
|
+
"other:#{arch}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# @private
|
29
|
+
#
|
30
|
+
# @return [String]
|
31
|
+
#
|
32
|
+
def self.os
|
33
|
+
case (host = RbConfig::CONFIG["host_os"])&.downcase
|
34
|
+
in nil
|
35
|
+
"Unknown"
|
36
|
+
in /linux/
|
37
|
+
"Linux"
|
38
|
+
in /darwin/
|
39
|
+
"MacOS"
|
40
|
+
in /freebsd/
|
41
|
+
"FreeBSD"
|
42
|
+
in /openbsd/
|
43
|
+
"OpenBSD"
|
44
|
+
in /mswin|mingw|cygwin|ucrt/
|
45
|
+
"Windows"
|
46
|
+
else
|
47
|
+
"Other:#{host}"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
9
51
|
# @private
|
10
52
|
#
|
11
53
|
# @param input [Object]
|
@@ -105,6 +147,12 @@ module TerminalShop
|
|
105
147
|
end
|
106
148
|
end
|
107
149
|
|
150
|
+
# @private
|
151
|
+
#
|
152
|
+
# @return [Float]
|
153
|
+
#
|
154
|
+
def self.monotonic_secs = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
155
|
+
|
108
156
|
# @private
|
109
157
|
#
|
110
158
|
# @param exceptions [Array<Exception>]
|
@@ -384,6 +432,11 @@ module TerminalShop
|
|
384
432
|
"transfer-encoding" => "chunked"
|
385
433
|
}
|
386
434
|
[headers, strio]
|
435
|
+
in [_, StringIO]
|
436
|
+
[headers, body.string]
|
437
|
+
in [_, IO]
|
438
|
+
headers = {**headers, "transfer-encoding" => "chunked"}
|
439
|
+
[headers, body]
|
387
440
|
else
|
388
441
|
[headers, body]
|
389
442
|
end
|
@@ -391,24 +444,28 @@ module TerminalShop
|
|
391
444
|
|
392
445
|
# @private
|
393
446
|
#
|
394
|
-
# @param
|
447
|
+
# @param headers [Hash{String=>String}, Net::HTTPHeader]
|
448
|
+
# @param stream [Enumerable]
|
395
449
|
# @param suppress_error [Boolean]
|
396
450
|
#
|
397
451
|
# @raise [JSON::ParserError]
|
398
452
|
# @return [Object]
|
399
453
|
#
|
400
|
-
def self.decode_content(
|
401
|
-
case
|
402
|
-
in
|
454
|
+
def self.decode_content(headers, stream:, suppress_error: false)
|
455
|
+
case headers["content-type"]
|
456
|
+
in %r{^application/json}
|
457
|
+
json = stream.to_a.join
|
403
458
|
begin
|
404
|
-
JSON.parse(
|
459
|
+
JSON.parse(json, symbolize_names: true)
|
405
460
|
rescue JSON::ParserError => e
|
406
461
|
raise e unless suppress_error
|
407
|
-
|
462
|
+
json
|
408
463
|
end
|
464
|
+
in %r{^text/}
|
465
|
+
stream.to_a.join
|
409
466
|
else
|
410
467
|
# TODO: parsing other response types
|
411
|
-
|
468
|
+
StringIO.new(stream.to_a.join)
|
412
469
|
end
|
413
470
|
end
|
414
471
|
|
data/lib/terminal-shop.rb
CHANGED
@@ -7,6 +7,7 @@ require "erb"
|
|
7
7
|
require "etc"
|
8
8
|
require "json"
|
9
9
|
require "net/http"
|
10
|
+
require "rbconfig"
|
10
11
|
require "securerandom"
|
11
12
|
require "set"
|
12
13
|
require "stringio"
|
@@ -17,94 +18,94 @@ require "uri"
|
|
17
18
|
require "connection_pool"
|
18
19
|
|
19
20
|
# Package files.
|
20
|
-
require_relative "terminal-shop/pooled_net_requester"
|
21
21
|
require_relative "terminal-shop/version"
|
22
22
|
require_relative "terminal-shop/util"
|
23
23
|
require_relative "terminal-shop/extern"
|
24
24
|
require_relative "terminal-shop/base_model"
|
25
25
|
require_relative "terminal-shop/base_page"
|
26
26
|
require_relative "terminal-shop/request_options"
|
27
|
-
require_relative "terminal-shop/base_client"
|
28
27
|
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"
|
28
|
+
require_relative "terminal-shop/base_client"
|
29
|
+
require_relative "terminal-shop/pooled_net_requester"
|
30
|
+
require_relative "terminal-shop/client"
|
31
|
+
require_relative "terminal-shop/models/app"
|
32
|
+
require_relative "terminal-shop/models/subscription"
|
35
33
|
require_relative "terminal-shop/models/address"
|
34
|
+
require_relative "terminal-shop/models/address_create_params"
|
36
35
|
require_relative "terminal-shop/models/address_create_response"
|
37
|
-
require_relative "terminal-shop/models/
|
36
|
+
require_relative "terminal-shop/models/address_delete_params"
|
38
37
|
require_relative "terminal-shop/models/address_delete_response"
|
38
|
+
require_relative "terminal-shop/models/address_list_params"
|
39
|
+
require_relative "terminal-shop/models/address_list_response"
|
40
|
+
require_relative "terminal-shop/models/app_create_params"
|
41
|
+
require_relative "terminal-shop/models/app_create_response"
|
42
|
+
require_relative "terminal-shop/models/app_delete_params"
|
43
|
+
require_relative "terminal-shop/models/app_delete_response"
|
44
|
+
require_relative "terminal-shop/models/app_get_params"
|
45
|
+
require_relative "terminal-shop/models/app_get_response"
|
46
|
+
require_relative "terminal-shop/models/app_list_params"
|
47
|
+
require_relative "terminal-shop/models/app_list_response"
|
39
48
|
require_relative "terminal-shop/models/card"
|
49
|
+
require_relative "terminal-shop/models/card_collect_params"
|
50
|
+
require_relative "terminal-shop/models/card_collect_response"
|
51
|
+
require_relative "terminal-shop/models/card_create_params"
|
40
52
|
require_relative "terminal-shop/models/card_create_response"
|
41
|
-
require_relative "terminal-shop/models/
|
53
|
+
require_relative "terminal-shop/models/card_delete_params"
|
42
54
|
require_relative "terminal-shop/models/card_delete_response"
|
43
|
-
require_relative "terminal-shop/models/
|
55
|
+
require_relative "terminal-shop/models/card_list_params"
|
56
|
+
require_relative "terminal-shop/models/card_list_response"
|
44
57
|
require_relative "terminal-shop/models/cart"
|
58
|
+
require_relative "terminal-shop/models/cart_convert_params"
|
45
59
|
require_relative "terminal-shop/models/cart_convert_response"
|
60
|
+
require_relative "terminal-shop/models/cart_get_params"
|
46
61
|
require_relative "terminal-shop/models/cart_get_response"
|
62
|
+
require_relative "terminal-shop/models/cart_set_address_params"
|
47
63
|
require_relative "terminal-shop/models/cart_set_address_response"
|
64
|
+
require_relative "terminal-shop/models/cart_set_card_params"
|
48
65
|
require_relative "terminal-shop/models/cart_set_card_response"
|
66
|
+
require_relative "terminal-shop/models/cart_set_item_params"
|
49
67
|
require_relative "terminal-shop/models/cart_set_item_response"
|
68
|
+
require_relative "terminal-shop/models/email_create_params"
|
69
|
+
require_relative "terminal-shop/models/email_create_response"
|
50
70
|
require_relative "terminal-shop/models/order"
|
51
|
-
require_relative "terminal-shop/models/
|
71
|
+
require_relative "terminal-shop/models/order_get_params"
|
52
72
|
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"
|
73
|
+
require_relative "terminal-shop/models/order_list_params"
|
74
|
+
require_relative "terminal-shop/models/order_list_response"
|
75
|
+
require_relative "terminal-shop/models/product"
|
69
76
|
require_relative "terminal-shop/models/product_list_params"
|
70
|
-
require_relative "terminal-shop/models/
|
77
|
+
require_relative "terminal-shop/models/product_list_response"
|
78
|
+
require_relative "terminal-shop/models/product_variant"
|
79
|
+
require_relative "terminal-shop/models/profile"
|
71
80
|
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"
|
81
|
+
require_relative "terminal-shop/models/profile_me_response"
|
82
|
+
require_relative "terminal-shop/models/profile_update_params"
|
83
|
+
require_relative "terminal-shop/models/profile_update_response"
|
86
84
|
require_relative "terminal-shop/models/subscription_create_params"
|
87
|
-
require_relative "terminal-shop/models/
|
85
|
+
require_relative "terminal-shop/models/subscription_create_response"
|
88
86
|
require_relative "terminal-shop/models/subscription_delete_params"
|
87
|
+
require_relative "terminal-shop/models/subscription_delete_response"
|
88
|
+
require_relative "terminal-shop/models/subscription_list_params"
|
89
|
+
require_relative "terminal-shop/models/subscription_list_response"
|
90
|
+
require_relative "terminal-shop/models/token"
|
89
91
|
require_relative "terminal-shop/models/token_create_params"
|
90
|
-
require_relative "terminal-shop/models/
|
92
|
+
require_relative "terminal-shop/models/token_create_response"
|
91
93
|
require_relative "terminal-shop/models/token_delete_params"
|
94
|
+
require_relative "terminal-shop/models/token_delete_response"
|
92
95
|
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"
|
96
|
+
require_relative "terminal-shop/models/token_get_response"
|
97
|
+
require_relative "terminal-shop/models/token_list_params"
|
98
|
+
require_relative "terminal-shop/models/token_list_response"
|
98
99
|
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"
|
100
|
+
require_relative "terminal-shop/models/view_init_response"
|
102
101
|
require_relative "terminal-shop/resources/address"
|
102
|
+
require_relative "terminal-shop/resources/app"
|
103
103
|
require_relative "terminal-shop/resources/card"
|
104
104
|
require_relative "terminal-shop/resources/cart"
|
105
|
+
require_relative "terminal-shop/resources/email"
|
105
106
|
require_relative "terminal-shop/resources/order"
|
107
|
+
require_relative "terminal-shop/resources/product"
|
108
|
+
require_relative "terminal-shop/resources/profile"
|
106
109
|
require_relative "terminal-shop/resources/subscription"
|
107
110
|
require_relative "terminal-shop/resources/token"
|
108
|
-
require_relative "terminal-shop/resources/app"
|
109
|
-
require_relative "terminal-shop/resources/email"
|
110
111
|
require_relative "terminal-shop/resources/view"
|