terminal-shop 1.7.0 → 1.8.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.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -1
  3. data/lib/terminal-shop/base_client.rb +36 -46
  4. data/lib/terminal-shop/base_model.rb +65 -130
  5. data/lib/terminal-shop/base_page.rb +18 -18
  6. data/lib/terminal-shop/client.rb +1 -3
  7. data/lib/terminal-shop/errors.rb +12 -17
  8. data/lib/terminal-shop/extern.rb +1 -4
  9. data/lib/terminal-shop/models/subscription.rb +6 -0
  10. data/lib/terminal-shop/pooled_net_requester.rb +19 -21
  11. data/lib/terminal-shop/request_options.rb +4 -11
  12. data/lib/terminal-shop/resources/address.rb +0 -5
  13. data/lib/terminal-shop/resources/app.rb +0 -5
  14. data/lib/terminal-shop/resources/card.rb +0 -6
  15. data/lib/terminal-shop/resources/cart.rb +0 -7
  16. data/lib/terminal-shop/resources/email.rb +0 -2
  17. data/lib/terminal-shop/resources/order.rb +0 -4
  18. data/lib/terminal-shop/resources/product.rb +0 -3
  19. data/lib/terminal-shop/resources/profile.rb +0 -3
  20. data/lib/terminal-shop/resources/subscription.rb +0 -5
  21. data/lib/terminal-shop/resources/token.rb +0 -5
  22. data/lib/terminal-shop/resources/view.rb +0 -2
  23. data/lib/terminal-shop/util.rb +44 -71
  24. data/lib/terminal-shop/version.rb +1 -1
  25. data/lib/terminal-shop.rb +1 -0
  26. data/manifest.yaml +1 -0
  27. data/rbi/lib/terminal-shop/base_client.rbi +23 -0
  28. data/rbi/lib/terminal-shop/base_model.rbi +178 -52
  29. data/rbi/lib/terminal-shop/base_page.rbi +1 -2
  30. data/rbi/lib/terminal-shop/client.rbi +11 -0
  31. data/rbi/lib/terminal-shop/errors.rbi +33 -0
  32. data/rbi/lib/terminal-shop/extern.rbi +1 -1
  33. data/rbi/lib/terminal-shop/models/address.rbi +10 -0
  34. data/rbi/lib/terminal-shop/models/address_create_params.rbi +8 -0
  35. data/rbi/lib/terminal-shop/models/address_create_response.rbi +1 -0
  36. data/rbi/lib/terminal-shop/models/address_get_response.rbi +1 -0
  37. data/rbi/lib/terminal-shop/models/address_list_response.rbi +1 -0
  38. data/rbi/lib/terminal-shop/models/app.rbi +5 -0
  39. data/rbi/lib/terminal-shop/models/app_create_response.rbi +2 -0
  40. data/rbi/lib/terminal-shop/models/app_get_response.rbi +1 -0
  41. data/rbi/lib/terminal-shop/models/app_list_response.rbi +1 -0
  42. data/rbi/lib/terminal-shop/models/card.rbi +8 -0
  43. data/rbi/lib/terminal-shop/models/card_collect_response.rbi +4 -0
  44. data/rbi/lib/terminal-shop/models/card_create_params.rbi +2 -0
  45. data/rbi/lib/terminal-shop/models/card_create_response.rbi +1 -0
  46. data/rbi/lib/terminal-shop/models/card_get_response.rbi +1 -0
  47. data/rbi/lib/terminal-shop/models/card_list_response.rbi +1 -0
  48. data/rbi/lib/terminal-shop/models/cart.rbi +19 -0
  49. data/rbi/lib/terminal-shop/models/cart_convert_response.rbi +1 -0
  50. data/rbi/lib/terminal-shop/models/cart_get_response.rbi +1 -0
  51. data/rbi/lib/terminal-shop/models/cart_set_address_params.rbi +1 -0
  52. data/rbi/lib/terminal-shop/models/cart_set_card_params.rbi +1 -0
  53. data/rbi/lib/terminal-shop/models/cart_set_item_params.rbi +2 -0
  54. data/rbi/lib/terminal-shop/models/cart_set_item_response.rbi +1 -0
  55. data/rbi/lib/terminal-shop/models/email_create_params.rbi +1 -0
  56. data/rbi/lib/terminal-shop/models/order.rbi +28 -0
  57. data/rbi/lib/terminal-shop/models/order_create_params.rbi +3 -0
  58. data/rbi/lib/terminal-shop/models/order_create_response.rbi +1 -0
  59. data/rbi/lib/terminal-shop/models/order_get_response.rbi +1 -0
  60. data/rbi/lib/terminal-shop/models/order_list_response.rbi +1 -0
  61. data/rbi/lib/terminal-shop/models/product.rbi +12 -6
  62. data/rbi/lib/terminal-shop/models/product_get_response.rbi +1 -0
  63. data/rbi/lib/terminal-shop/models/product_list_response.rbi +1 -0
  64. data/rbi/lib/terminal-shop/models/product_variant.rbi +4 -0
  65. data/rbi/lib/terminal-shop/models/profile.rbi +8 -0
  66. data/rbi/lib/terminal-shop/models/profile_me_response.rbi +1 -0
  67. data/rbi/lib/terminal-shop/models/profile_update_response.rbi +1 -0
  68. data/rbi/lib/terminal-shop/models/region.rbi +3 -6
  69. data/rbi/lib/terminal-shop/models/subscription.rbi +18 -11
  70. data/rbi/lib/terminal-shop/models/subscription_get_response.rbi +1 -0
  71. data/rbi/lib/terminal-shop/models/subscription_list_response.rbi +1 -0
  72. data/rbi/lib/terminal-shop/models/token.rbi +5 -0
  73. data/rbi/lib/terminal-shop/models/token_create_response.rbi +3 -0
  74. data/rbi/lib/terminal-shop/models/token_get_response.rbi +2 -0
  75. data/rbi/lib/terminal-shop/models/token_list_response.rbi +1 -0
  76. data/rbi/lib/terminal-shop/models/view_init_response.rbi +5 -0
  77. data/rbi/lib/terminal-shop/pooled_net_requester.rbi +10 -3
  78. data/rbi/lib/terminal-shop/request_options.rbi +21 -2
  79. data/rbi/lib/terminal-shop/resources/address.rbi +22 -2
  80. data/rbi/lib/terminal-shop/resources/app.rbi +14 -2
  81. data/rbi/lib/terminal-shop/resources/card.rbi +22 -3
  82. data/rbi/lib/terminal-shop/resources/cart.rbi +23 -3
  83. data/rbi/lib/terminal-shop/resources/email.rbi +6 -1
  84. data/rbi/lib/terminal-shop/resources/order.rbi +17 -2
  85. data/rbi/lib/terminal-shop/resources/product.rbi +7 -1
  86. data/rbi/lib/terminal-shop/resources/profile.rbi +2 -0
  87. data/rbi/lib/terminal-shop/resources/subscription.rbi +21 -2
  88. data/rbi/lib/terminal-shop/resources/token.rbi +14 -2
  89. data/rbi/lib/terminal-shop/resources/view.rbi +2 -0
  90. data/rbi/lib/terminal-shop/util.rbi +55 -8
  91. data/rbi/lib/terminal-shop/version.rbi +1 -1
  92. data/sig/terminal-shop/base_client.rbs +6 -1
  93. data/sig/terminal-shop/base_model.rbs +8 -6
  94. data/sig/terminal-shop/errors.rbs +4 -4
  95. data/sig/terminal-shop/models/subscription.rbs +1 -1
  96. data/sig/terminal-shop/pooled_net_requester.rbs +7 -2
  97. data/sig/terminal-shop/util.rbs +4 -4
  98. data/sig/terminal-shop/version.rbs +1 -1
  99. metadata +4 -4
@@ -1,42 +1,52 @@
1
1
  # typed: strong
2
2
 
3
3
  module TerminalShop
4
+ # @api private
4
5
  module Util
6
+ # @api private
5
7
  sig { returns(Float) }
6
8
  def self.monotonic_secs
7
9
  end
8
10
 
9
11
  class << self
12
+ # @api private
10
13
  sig { returns(String) }
11
14
  def arch
12
15
  end
13
16
 
17
+ # @api private
14
18
  sig { returns(String) }
15
19
  def os
16
20
  end
17
21
  end
18
22
 
19
23
  class << self
20
- sig { params(input: T.anything).returns(T.any(T::Boolean, T.anything)) }
24
+ # @api private
25
+ sig { params(input: T.anything).returns(T::Boolean) }
21
26
  def primitive?(input)
22
27
  end
23
28
 
29
+ # @api private
24
30
  sig { params(input: T.anything).returns(T.any(T::Boolean, T.anything)) }
25
31
  def coerce_boolean(input)
26
32
  end
27
33
 
34
+ # @api private
28
35
  sig { params(input: T.anything).returns(T.nilable(T::Boolean)) }
29
36
  def coerce_boolean!(input)
30
37
  end
31
38
 
39
+ # @api private
32
40
  sig { params(input: T.anything).returns(T.any(Integer, T.anything)) }
33
41
  def coerce_integer(input)
34
42
  end
35
43
 
44
+ # @api private
36
45
  sig { params(input: T.anything).returns(T.any(Float, T.anything)) }
37
46
  def coerce_float(input)
38
47
  end
39
48
 
49
+ # @api private
40
50
  sig { params(input: T.anything).returns(T.any(T::Hash[T.anything, T.anything], T.anything)) }
41
51
  def coerce_hash(input)
42
52
  end
@@ -45,17 +55,29 @@ module TerminalShop
45
55
  OMIT = T.let(T.anything, T.anything)
46
56
 
47
57
  class << self
58
+ # @api private
48
59
  sig { params(lhs: T.anything, rhs: T.anything, concat: T::Boolean).returns(T.anything) }
49
60
  private def deep_merge_lr(lhs, rhs, concat: false)
50
61
  end
51
62
 
63
+ # @api private
64
+ #
65
+ # Recursively merge one hash with another. If the values at a given key are not
66
+ # both hashes, just take the new value.
52
67
  sig do
53
68
  params(values: T::Array[T.anything], sentinel: T.nilable(T.anything), concat: T::Boolean)
54
69
  .returns(T.anything)
55
70
  end
56
- def deep_merge(*values, sentinel: nil, concat: false)
71
+ def deep_merge(
72
+ *values,
73
+ # the value to return if no values are provided.
74
+ sentinel: nil,
75
+ # whether to merge sequences by concatenation.
76
+ concat: false
77
+ )
57
78
  end
58
79
 
80
+ # @api private
59
81
  sig do
60
82
  params(
61
83
  data: T.any(T::Hash[Symbol, T.anything], T::Array[T.anything], T.anything),
@@ -70,20 +92,24 @@ module TerminalShop
70
92
  end
71
93
 
72
94
  class << self
95
+ # @api private
73
96
  sig { params(uri: URI::Generic).returns(String) }
74
97
  def uri_origin(uri)
75
98
  end
76
99
 
100
+ # @api private
77
101
  sig { params(path: T.any(String, T::Array[String])).returns(String) }
78
102
  def interpolate_path(path)
79
103
  end
80
104
  end
81
105
 
82
106
  class << self
107
+ # @api private
83
108
  sig { params(query: T.nilable(String)).returns(T::Hash[String, T::Array[String]]) }
84
109
  def decode_query(query)
85
110
  end
86
111
 
112
+ # @api private
87
113
  sig do
88
114
  params(query: T.nilable(T::Hash[String, T.nilable(T.any(T::Array[String], String))]))
89
115
  .returns(T.nilable(String))
@@ -103,14 +129,17 @@ module TerminalShop
103
129
  end
104
130
 
105
131
  class << self
132
+ # @api private
106
133
  sig { params(url: T.any(URI::Generic, String)).returns(TerminalShop::Util::ParsedUriShape) }
107
134
  def parse_uri(url)
108
135
  end
109
136
 
137
+ # @api private
110
138
  sig { params(parsed: TerminalShop::Util::ParsedUriShape).returns(URI::Generic) }
111
139
  def unparse_uri(parsed)
112
140
  end
113
141
 
142
+ # @api private
114
143
  sig do
115
144
  params(lhs: TerminalShop::Util::ParsedUriShape, rhs: TerminalShop::Util::ParsedUriShape)
116
145
  .returns(URI::Generic)
@@ -120,6 +149,7 @@ module TerminalShop
120
149
  end
121
150
 
122
151
  class << self
152
+ # @api private
123
153
  sig do
124
154
  params(
125
155
  headers: T::Hash[String,
@@ -131,15 +161,21 @@ module TerminalShop
131
161
  end
132
162
  end
133
163
 
164
+ # @api private
165
+ #
166
+ # An adapter that satisfies the IO interface required by `::IO.copy_stream`
134
167
  class ReadIOAdapter
168
+ # @api private
135
169
  sig { params(max_len: T.nilable(Integer)).returns(String) }
136
170
  private def read_enum(max_len)
137
171
  end
138
172
 
173
+ # @api private
139
174
  sig { params(max_len: T.nilable(Integer), out_string: T.nilable(String)).returns(T.nilable(String)) }
140
175
  def read(max_len = nil, out_string = nil)
141
176
  end
142
177
 
178
+ # @api private
143
179
  sig do
144
180
  params(
145
181
  stream: T.any(String, IO, StringIO, T::Enumerable[String]),
@@ -158,20 +194,24 @@ module TerminalShop
158
194
  end
159
195
 
160
196
  class << self
197
+ # @api private
161
198
  sig do
162
199
  params(y: Enumerator::Yielder, boundary: String, key: T.any(Symbol, String), val: T.anything).void
163
200
  end
164
201
  private def encode_multipart_formdata(y, boundary:, key:, val:)
165
202
  end
166
203
 
204
+ # @api private
167
205
  sig { params(body: T.anything).returns([String, T::Enumerable[String]]) }
168
206
  private def encode_multipart_streaming(body)
169
207
  end
170
208
 
209
+ # @api private
171
210
  sig { params(headers: T::Hash[String, String], body: T.anything).returns(T.anything) }
172
211
  def encode_content(headers, body)
173
212
  end
174
213
 
214
+ # @api private
175
215
  sig do
176
216
  params(
177
217
  headers: T.any(T::Hash[String, String], Net::HTTPHeader),
@@ -185,6 +225,9 @@ module TerminalShop
185
225
  end
186
226
 
187
227
  class << self
228
+ # @api private
229
+ #
230
+ # https://doc.rust-lang.org/std/iter/trait.FusedIterator.html
188
231
  sig do
189
232
  params(enum: T::Enumerable[T.anything], external: T::Boolean, close: T.proc.void)
190
233
  .returns(T::Enumerable[T.anything])
@@ -192,30 +235,34 @@ module TerminalShop
192
235
  def fused_enum(enum, external: false, &close)
193
236
  end
194
237
 
238
+ # @api private
195
239
  sig { params(enum: T.nilable(T::Enumerable[T.anything])).void }
196
240
  def close_fused!(enum)
197
241
  end
198
242
 
243
+ # @api private
199
244
  sig do
200
- params(
201
- enum: T.nilable(T::Enumerable[T.anything]),
202
- blk: T.proc.params(arg0: Enumerator::Yielder).void
203
- ).void
245
+ params(enum: T.nilable(T::Enumerable[T.anything]), blk: T.proc.params(arg0: Enumerator::Yielder).void)
246
+ .returns(T::Enumerable[T.anything])
204
247
  end
205
248
  def chain_fused(enum, &blk)
206
249
  end
207
250
  end
208
251
 
209
- SSEMessage = T.type_alias do
252
+ ServerSentEvent = T.type_alias do
210
253
  {event: T.nilable(String), data: T.nilable(String), id: T.nilable(String), retry: T.nilable(Integer)}
211
254
  end
212
255
 
213
256
  class << self
257
+ # @api private
214
258
  sig { params(enum: T::Enumerable[String]).returns(T::Enumerable[String]) }
215
259
  def decode_lines(enum)
216
260
  end
217
261
 
218
- sig { params(lines: T::Enumerable[String]).returns(TerminalShop::Util::SSEMessage) }
262
+ # @api private
263
+ #
264
+ # https://html.spec.whatwg.org/multipage/server-sent-events.html#parsing-an-event-stream
265
+ sig { params(lines: T::Enumerable[String]).returns(TerminalShop::Util::ServerSentEvent) }
219
266
  def decode_sse(lines)
220
267
  end
221
268
  end
@@ -1,5 +1,5 @@
1
1
  # typed: strong
2
2
 
3
3
  module TerminalShop
4
- VERSION = "1.7.0"
4
+ VERSION = "1.8.0"
5
5
  end
@@ -45,7 +45,12 @@ module TerminalShop
45
45
  response_headers: ::Hash[String, String]
46
46
  ) -> TerminalShop::BaseClient::request_input
47
47
 
48
- # @private
48
+ def self.reap_connection!: (
49
+ Integer | TerminalShop::APIConnectionError status,
50
+ stream: Enumerable[String]?
51
+ ) -> void
52
+
53
+ # @api private
49
54
  attr_accessor requester: top
50
55
 
51
56
  def initialize: (
@@ -85,9 +85,11 @@ module TerminalShop
85
85
  class Union
86
86
  extend TerminalShop::Converter
87
87
 
88
- private def self.known_variants: -> ::Array[[Symbol?, Proc]]
88
+ private def self.known_variants: -> ::Array[[Symbol?, (^-> TerminalShop::Converter::input)]]
89
89
 
90
- def self.variants: -> ::Array[[Symbol?, top]]
90
+ def self.derefed_variants: -> ::Array[[Symbol?, top]]
91
+
92
+ def self.variants: -> ::Array[top]
91
93
 
92
94
  private def self.discriminator: (Symbol property) -> void
93
95
 
@@ -118,7 +120,7 @@ module TerminalShop
118
120
  ) -> ([true, top, nil] | [false, bool, Integer])
119
121
  end
120
122
 
121
- class ArrayOf
123
+ class ArrayOf[Elem]
122
124
  include TerminalShop::Converter
123
125
 
124
126
  def ===: (top other) -> bool
@@ -133,7 +135,7 @@ module TerminalShop
133
135
  top value
134
136
  ) -> ([true, top, nil] | [false, bool, Integer])
135
137
 
136
- def item_type: -> TerminalShop::Converter::input
138
+ def item_type: -> Elem
137
139
 
138
140
  def initialize: (
139
141
  ::Hash[Symbol, top]
@@ -143,7 +145,7 @@ module TerminalShop
143
145
  ) -> void
144
146
  end
145
147
 
146
- class HashOf
148
+ class HashOf[Elem]
147
149
  include TerminalShop::Converter
148
150
 
149
151
  def ===: (top other) -> bool
@@ -158,7 +160,7 @@ module TerminalShop
158
160
  top value
159
161
  ) -> ([true, top, nil] | [false, bool, Integer])
160
162
 
161
- def item_type: -> TerminalShop::Converter::input
163
+ def item_type: -> Elem
162
164
 
163
165
  def initialize: (
164
166
  ::Hash[Symbol, top]
@@ -1,17 +1,17 @@
1
1
  module TerminalShop
2
2
  class Error < StandardError
3
- attr_reader cause: StandardError?
3
+ attr_accessor cause: StandardError?
4
4
  end
5
5
 
6
6
  class ConversionError < TerminalShop::Error
7
7
  end
8
8
 
9
9
  class APIError < TerminalShop::Error
10
- attr_reader url: URI::Generic
10
+ attr_accessor url: URI::Generic
11
11
 
12
- attr_reader status: Integer?
12
+ attr_accessor status: Integer?
13
13
 
14
- attr_reader body: top?
14
+ attr_accessor body: top?
15
15
 
16
16
  def initialize: (
17
17
  url: URI::Generic,
@@ -85,7 +85,7 @@ module TerminalShop
85
85
  def to_hash: -> TerminalShop::Models::SubscriptionAPI::Schedule::weekly
86
86
  end
87
87
 
88
- private def self.variants: -> [[nil, TerminalShop::Models::SubscriptionAPI::Schedule::Fixed], [nil, TerminalShop::Models::SubscriptionAPI::Schedule::Weekly]]
88
+ def self.variants: -> [TerminalShop::Models::SubscriptionAPI::Schedule::Fixed, TerminalShop::Models::SubscriptionAPI::Schedule::Weekly]
89
89
  end
90
90
  end
91
91
  end
@@ -19,11 +19,16 @@ module TerminalShop
19
19
  (String arg0) -> void
20
20
  } -> top
21
21
 
22
- private def with_pool: (URI::Generic url) { (top arg0) -> void } -> void
22
+ private def with_pool: (
23
+ URI::Generic url,
24
+ deadline: Float
25
+ ) {
26
+ (top arg0) -> void
27
+ } -> void
23
28
 
24
29
  def execute: (
25
30
  TerminalShop::PooledNetRequester::request request
26
- ) -> [top, Enumerable[String]]
31
+ ) -> [Integer, top, Enumerable[String]]
27
32
 
28
33
  def initialize: (size: Integer) -> void
29
34
  end
@@ -6,7 +6,7 @@ module TerminalShop
6
6
 
7
7
  def self?.os: -> String
8
8
 
9
- def self?.primitive?: (top input) -> (bool | top)
9
+ def self?.primitive?: (top input) -> bool
10
10
 
11
11
  def self?.coerce_boolean: (top input) -> (bool | top)
12
12
 
@@ -122,15 +122,15 @@ module TerminalShop
122
122
  Enumerable[top]? enum
123
123
  ) {
124
124
  (Enumerator::Yielder arg0) -> void
125
- } -> void
125
+ } -> Enumerable[top]
126
126
 
127
- type sse_message =
127
+ type server_sent_event =
128
128
  { event: String?, data: String?, id: String?, retry: Integer? }
129
129
 
130
130
  def self?.decode_lines: (Enumerable[String] enum) -> Enumerable[String]
131
131
 
132
132
  def self?.decode_sse: (
133
133
  Enumerable[String] lines
134
- ) -> TerminalShop::Util::sse_message
134
+ ) -> TerminalShop::Util::server_sent_event
135
135
  end
136
136
  end
@@ -1,3 +1,3 @@
1
1
  module TerminalShop
2
- VERSION: "1.6.0"
2
+ VERSION: "1.7.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: terminal-shop
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Terminal
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-03-13 00:00:00.000000000 Z
11
+ date: 2025-03-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: connection_pool
@@ -346,10 +346,10 @@ files:
346
346
  - sig/terminal-shop/resources/view.rbs
347
347
  - sig/terminal-shop/util.rbs
348
348
  - sig/terminal-shop/version.rbs
349
- homepage: https://gemdocs.org/gems/terminal-shop/latest
349
+ homepage: https://gemdocs.org/gems/terminal-shop
350
350
  licenses: []
351
351
  metadata:
352
- homepage_uri: https://gemdocs.org/gems/terminal-shop/latest
352
+ homepage_uri: https://gemdocs.org/gems/terminal-shop
353
353
  source_code_uri: https://github.com/terminaldotshop/terminal-sdk-ruby
354
354
  rubygems_mfa_required: 'false'
355
355
  post_install_message: