terminal-shop 1.7.0 → 2.0.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 (235) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +17 -1
  3. data/lib/terminal-shop/base_client.rb +47 -56
  4. data/lib/terminal-shop/base_model.rb +300 -352
  5. data/lib/terminal-shop/base_page.rb +30 -31
  6. data/lib/terminal-shop/client.rb +2 -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/product.rb +7 -3
  10. data/lib/terminal-shop/models/region.rb +7 -3
  11. data/lib/terminal-shop/models/subscription.rb +7 -3
  12. data/lib/terminal-shop/pooled_net_requester.rb +30 -21
  13. data/lib/terminal-shop/request_options.rb +5 -12
  14. data/lib/terminal-shop/resources/address.rb +0 -5
  15. data/lib/terminal-shop/resources/app.rb +0 -5
  16. data/lib/terminal-shop/resources/card.rb +0 -6
  17. data/lib/terminal-shop/resources/cart.rb +0 -7
  18. data/lib/terminal-shop/resources/email.rb +0 -2
  19. data/lib/terminal-shop/resources/order.rb +0 -4
  20. data/lib/terminal-shop/resources/product.rb +0 -3
  21. data/lib/terminal-shop/resources/profile.rb +0 -3
  22. data/lib/terminal-shop/resources/subscription.rb +0 -5
  23. data/lib/terminal-shop/resources/token.rb +0 -5
  24. data/lib/terminal-shop/resources/view.rb +0 -2
  25. data/lib/terminal-shop/util.rb +59 -77
  26. data/lib/terminal-shop/version.rb +1 -1
  27. data/lib/terminal-shop.rb +16 -0
  28. data/manifest.yaml +1 -0
  29. data/rbi/lib/terminal-shop/base_client.rbi +63 -41
  30. data/rbi/lib/terminal-shop/base_model.rbi +278 -129
  31. data/rbi/lib/terminal-shop/base_page.rbi +1 -4
  32. data/rbi/lib/terminal-shop/client.rbi +29 -30
  33. data/rbi/lib/terminal-shop/errors.rbi +12 -14
  34. data/rbi/lib/terminal-shop/extern.rbi +1 -1
  35. data/rbi/lib/terminal-shop/models/address.rbi +25 -51
  36. data/rbi/lib/terminal-shop/models/address_create_params.rbi +23 -46
  37. data/rbi/lib/terminal-shop/models/address_create_response.rbi +2 -6
  38. data/rbi/lib/terminal-shop/models/address_delete_params.rbi +1 -1
  39. data/rbi/lib/terminal-shop/models/address_delete_response.rbi +1 -6
  40. data/rbi/lib/terminal-shop/models/address_get_params.rbi +1 -1
  41. data/rbi/lib/terminal-shop/models/address_get_response.rbi +8 -6
  42. data/rbi/lib/terminal-shop/models/address_list_params.rbi +1 -1
  43. data/rbi/lib/terminal-shop/models/address_list_response.rbi +5 -6
  44. data/rbi/lib/terminal-shop/models/app.rbi +9 -24
  45. data/rbi/lib/terminal-shop/models/app_create_params.rbi +3 -13
  46. data/rbi/lib/terminal-shop/models/app_create_response.rbi +10 -20
  47. data/rbi/lib/terminal-shop/models/app_delete_params.rbi +1 -1
  48. data/rbi/lib/terminal-shop/models/app_delete_response.rbi +1 -6
  49. data/rbi/lib/terminal-shop/models/app_get_params.rbi +1 -1
  50. data/rbi/lib/terminal-shop/models/app_get_response.rbi +5 -6
  51. data/rbi/lib/terminal-shop/models/app_list_params.rbi +1 -1
  52. data/rbi/lib/terminal-shop/models/app_list_response.rbi +5 -6
  53. data/rbi/lib/terminal-shop/models/card.rbi +22 -36
  54. data/rbi/lib/terminal-shop/models/card_collect_params.rbi +1 -1
  55. data/rbi/lib/terminal-shop/models/card_collect_response.rbi +11 -14
  56. data/rbi/lib/terminal-shop/models/card_create_params.rbi +4 -7
  57. data/rbi/lib/terminal-shop/models/card_create_response.rbi +2 -6
  58. data/rbi/lib/terminal-shop/models/card_delete_params.rbi +1 -1
  59. data/rbi/lib/terminal-shop/models/card_delete_response.rbi +1 -6
  60. data/rbi/lib/terminal-shop/models/card_get_params.rbi +1 -1
  61. data/rbi/lib/terminal-shop/models/card_get_response.rbi +5 -6
  62. data/rbi/lib/terminal-shop/models/card_list_params.rbi +1 -1
  63. data/rbi/lib/terminal-shop/models/card_list_response.rbi +5 -6
  64. data/rbi/lib/terminal-shop/models/cart.rbi +53 -88
  65. data/rbi/lib/terminal-shop/models/cart_clear_params.rbi +1 -1
  66. data/rbi/lib/terminal-shop/models/cart_clear_response.rbi +1 -6
  67. data/rbi/lib/terminal-shop/models/cart_convert_params.rbi +1 -1
  68. data/rbi/lib/terminal-shop/models/cart_convert_response.rbi +5 -6
  69. data/rbi/lib/terminal-shop/models/cart_get_params.rbi +1 -1
  70. data/rbi/lib/terminal-shop/models/cart_get_response.rbi +5 -6
  71. data/rbi/lib/terminal-shop/models/cart_set_address_params.rbi +3 -7
  72. data/rbi/lib/terminal-shop/models/cart_set_address_response.rbi +1 -6
  73. data/rbi/lib/terminal-shop/models/cart_set_card_params.rbi +3 -7
  74. data/rbi/lib/terminal-shop/models/cart_set_card_response.rbi +1 -6
  75. data/rbi/lib/terminal-shop/models/cart_set_item_params.rbi +5 -13
  76. data/rbi/lib/terminal-shop/models/cart_set_item_response.rbi +5 -6
  77. data/rbi/lib/terminal-shop/models/email_create_params.rbi +3 -7
  78. data/rbi/lib/terminal-shop/models/email_create_response.rbi +1 -6
  79. data/rbi/lib/terminal-shop/models/order.rbi +80 -139
  80. data/rbi/lib/terminal-shop/models/order_create_params.rbi +7 -19
  81. data/rbi/lib/terminal-shop/models/order_create_response.rbi +2 -6
  82. data/rbi/lib/terminal-shop/models/order_get_params.rbi +1 -1
  83. data/rbi/lib/terminal-shop/models/order_get_response.rbi +5 -6
  84. data/rbi/lib/terminal-shop/models/order_list_params.rbi +1 -1
  85. data/rbi/lib/terminal-shop/models/order_list_response.rbi +5 -6
  86. data/rbi/lib/terminal-shop/models/product.rbi +52 -80
  87. data/rbi/lib/terminal-shop/models/product_get_params.rbi +1 -1
  88. data/rbi/lib/terminal-shop/models/product_get_response.rbi +8 -6
  89. data/rbi/lib/terminal-shop/models/product_list_params.rbi +1 -1
  90. data/rbi/lib/terminal-shop/models/product_list_response.rbi +5 -6
  91. data/rbi/lib/terminal-shop/models/product_variant.rbi +7 -18
  92. data/rbi/lib/terminal-shop/models/profile.rbi +20 -36
  93. data/rbi/lib/terminal-shop/models/profile_me_params.rbi +1 -1
  94. data/rbi/lib/terminal-shop/models/profile_me_response.rbi +8 -6
  95. data/rbi/lib/terminal-shop/models/profile_update_params.rbi +3 -13
  96. data/rbi/lib/terminal-shop/models/profile_update_response.rbi +8 -6
  97. data/rbi/lib/terminal-shop/models/region.rbi +10 -8
  98. data/rbi/lib/terminal-shop/models/subscription.rbi +35 -75
  99. data/rbi/lib/terminal-shop/models/subscription_create_params.rbi +1 -1
  100. data/rbi/lib/terminal-shop/models/subscription_create_response.rbi +1 -6
  101. data/rbi/lib/terminal-shop/models/subscription_delete_params.rbi +1 -1
  102. data/rbi/lib/terminal-shop/models/subscription_delete_response.rbi +1 -6
  103. data/rbi/lib/terminal-shop/models/subscription_get_params.rbi +1 -1
  104. data/rbi/lib/terminal-shop/models/subscription_get_response.rbi +8 -6
  105. data/rbi/lib/terminal-shop/models/subscription_list_params.rbi +1 -1
  106. data/rbi/lib/terminal-shop/models/subscription_list_response.rbi +4 -8
  107. data/rbi/lib/terminal-shop/models/token.rbi +8 -18
  108. data/rbi/lib/terminal-shop/models/token_create_params.rbi +1 -1
  109. data/rbi/lib/terminal-shop/models/token_create_response.rbi +11 -20
  110. data/rbi/lib/terminal-shop/models/token_delete_params.rbi +1 -1
  111. data/rbi/lib/terminal-shop/models/token_delete_response.rbi +1 -6
  112. data/rbi/lib/terminal-shop/models/token_get_params.rbi +1 -1
  113. data/rbi/lib/terminal-shop/models/token_get_response.rbi +6 -6
  114. data/rbi/lib/terminal-shop/models/token_list_params.rbi +1 -1
  115. data/rbi/lib/terminal-shop/models/token_list_response.rbi +5 -6
  116. data/rbi/lib/terminal-shop/models/view_init_params.rbi +1 -1
  117. data/rbi/lib/terminal-shop/models/view_init_response.rbi +37 -81
  118. data/rbi/lib/terminal-shop/pooled_net_requester.rbi +24 -6
  119. data/rbi/lib/terminal-shop/request_options.rbi +32 -57
  120. data/rbi/lib/terminal-shop/resources/address.rbi +26 -6
  121. data/rbi/lib/terminal-shop/resources/app.rbi +18 -6
  122. data/rbi/lib/terminal-shop/resources/card.rbi +27 -8
  123. data/rbi/lib/terminal-shop/resources/cart.rbi +29 -9
  124. data/rbi/lib/terminal-shop/resources/email.rbi +7 -2
  125. data/rbi/lib/terminal-shop/resources/order.rbi +20 -5
  126. data/rbi/lib/terminal-shop/resources/product.rbi +9 -3
  127. data/rbi/lib/terminal-shop/resources/profile.rbi +4 -2
  128. data/rbi/lib/terminal-shop/resources/subscription.rbi +26 -6
  129. data/rbi/lib/terminal-shop/resources/token.rbi +18 -6
  130. data/rbi/lib/terminal-shop/resources/view.rbi +3 -1
  131. data/rbi/lib/terminal-shop/util.rbi +78 -20
  132. data/rbi/lib/terminal-shop/version.rbi +1 -1
  133. data/sig/terminal-shop/base_client.rbs +20 -15
  134. data/sig/terminal-shop/base_model.rbs +36 -18
  135. data/sig/terminal-shop/client.rbs +8 -8
  136. data/sig/terminal-shop/errors.rbs +21 -21
  137. data/sig/terminal-shop/models/address.rbs +11 -15
  138. data/sig/terminal-shop/models/address_create_params.rbs +11 -16
  139. data/sig/terminal-shop/models/address_create_response.rbs +1 -6
  140. data/sig/terminal-shop/models/address_delete_params.rbs +1 -6
  141. data/sig/terminal-shop/models/address_delete_response.rbs +1 -6
  142. data/sig/terminal-shop/models/address_get_params.rbs +1 -6
  143. data/sig/terminal-shop/models/address_get_response.rbs +1 -6
  144. data/sig/terminal-shop/models/address_list_params.rbs +1 -6
  145. data/sig/terminal-shop/models/address_list_response.rbs +1 -6
  146. data/sig/terminal-shop/models/app.rbs +6 -5
  147. data/sig/terminal-shop/models/app_create_params.rbs +5 -10
  148. data/sig/terminal-shop/models/app_create_response.rbs +4 -12
  149. data/sig/terminal-shop/models/app_delete_params.rbs +1 -6
  150. data/sig/terminal-shop/models/app_delete_response.rbs +1 -6
  151. data/sig/terminal-shop/models/app_get_params.rbs +1 -5
  152. data/sig/terminal-shop/models/app_get_response.rbs +1 -5
  153. data/sig/terminal-shop/models/app_list_params.rbs +1 -5
  154. data/sig/terminal-shop/models/app_list_response.rbs +1 -6
  155. data/sig/terminal-shop/models/card.rbs +7 -16
  156. data/sig/terminal-shop/models/card_collect_params.rbs +1 -6
  157. data/sig/terminal-shop/models/card_collect_response.rbs +4 -12
  158. data/sig/terminal-shop/models/card_create_params.rbs +4 -6
  159. data/sig/terminal-shop/models/card_create_response.rbs +1 -6
  160. data/sig/terminal-shop/models/card_delete_params.rbs +1 -6
  161. data/sig/terminal-shop/models/card_delete_response.rbs +1 -6
  162. data/sig/terminal-shop/models/card_get_params.rbs +1 -5
  163. data/sig/terminal-shop/models/card_get_response.rbs +1 -6
  164. data/sig/terminal-shop/models/card_list_params.rbs +1 -5
  165. data/sig/terminal-shop/models/card_list_response.rbs +1 -6
  166. data/sig/terminal-shop/models/cart.rbs +20 -34
  167. data/sig/terminal-shop/models/cart_clear_params.rbs +1 -6
  168. data/sig/terminal-shop/models/cart_clear_response.rbs +1 -6
  169. data/sig/terminal-shop/models/cart_convert_params.rbs +1 -6
  170. data/sig/terminal-shop/models/cart_convert_response.rbs +1 -6
  171. data/sig/terminal-shop/models/cart_get_params.rbs +1 -5
  172. data/sig/terminal-shop/models/cart_get_response.rbs +1 -6
  173. data/sig/terminal-shop/models/cart_set_address_params.rbs +4 -9
  174. data/sig/terminal-shop/models/cart_set_address_response.rbs +1 -6
  175. data/sig/terminal-shop/models/cart_set_card_params.rbs +4 -6
  176. data/sig/terminal-shop/models/cart_set_card_response.rbs +1 -6
  177. data/sig/terminal-shop/models/cart_set_item_params.rbs +5 -10
  178. data/sig/terminal-shop/models/cart_set_item_response.rbs +1 -6
  179. data/sig/terminal-shop/models/email_create_params.rbs +4 -6
  180. data/sig/terminal-shop/models/email_create_response.rbs +1 -6
  181. data/sig/terminal-shop/models/order.rbs +31 -50
  182. data/sig/terminal-shop/models/order_create_params.rbs +6 -11
  183. data/sig/terminal-shop/models/order_create_response.rbs +1 -6
  184. data/sig/terminal-shop/models/order_get_params.rbs +1 -5
  185. data/sig/terminal-shop/models/order_get_response.rbs +1 -6
  186. data/sig/terminal-shop/models/order_list_params.rbs +1 -6
  187. data/sig/terminal-shop/models/order_list_response.rbs +1 -6
  188. data/sig/terminal-shop/models/product.rbs +20 -27
  189. data/sig/terminal-shop/models/product_get_params.rbs +1 -6
  190. data/sig/terminal-shop/models/product_get_response.rbs +1 -6
  191. data/sig/terminal-shop/models/product_list_params.rbs +1 -6
  192. data/sig/terminal-shop/models/product_list_response.rbs +1 -6
  193. data/sig/terminal-shop/models/product_variant.rbs +1 -5
  194. data/sig/terminal-shop/models/profile.rbs +8 -17
  195. data/sig/terminal-shop/models/profile_me_params.rbs +1 -6
  196. data/sig/terminal-shop/models/profile_me_response.rbs +1 -6
  197. data/sig/terminal-shop/models/profile_update_params.rbs +5 -10
  198. data/sig/terminal-shop/models/profile_update_response.rbs +1 -6
  199. data/sig/terminal-shop/models/region.rbs +4 -2
  200. data/sig/terminal-shop/models/subscription.rbs +15 -27
  201. data/sig/terminal-shop/models/subscription_create_params.rbs +1 -6
  202. data/sig/terminal-shop/models/subscription_create_response.rbs +1 -6
  203. data/sig/terminal-shop/models/subscription_delete_params.rbs +1 -6
  204. data/sig/terminal-shop/models/subscription_delete_response.rbs +1 -6
  205. data/sig/terminal-shop/models/subscription_get_params.rbs +1 -6
  206. data/sig/terminal-shop/models/subscription_get_response.rbs +1 -6
  207. data/sig/terminal-shop/models/subscription_list_params.rbs +1 -6
  208. data/sig/terminal-shop/models/subscription_list_response.rbs +3 -6
  209. data/sig/terminal-shop/models/token.rbs +1 -5
  210. data/sig/terminal-shop/models/token_create_params.rbs +1 -6
  211. data/sig/terminal-shop/models/token_create_response.rbs +4 -12
  212. data/sig/terminal-shop/models/token_delete_params.rbs +1 -6
  213. data/sig/terminal-shop/models/token_delete_response.rbs +1 -6
  214. data/sig/terminal-shop/models/token_get_params.rbs +1 -5
  215. data/sig/terminal-shop/models/token_get_response.rbs +1 -6
  216. data/sig/terminal-shop/models/token_list_params.rbs +1 -6
  217. data/sig/terminal-shop/models/token_list_response.rbs +1 -6
  218. data/sig/terminal-shop/models/view_init_params.rbs +1 -5
  219. data/sig/terminal-shop/models/view_init_response.rbs +15 -23
  220. data/sig/terminal-shop/pooled_net_requester.rbs +10 -3
  221. data/sig/terminal-shop/request_options.rbs +2 -2
  222. data/sig/terminal-shop/resources/address.rbs +22 -41
  223. data/sig/terminal-shop/resources/app.rbs +16 -34
  224. data/sig/terminal-shop/resources/card.rbs +18 -40
  225. data/sig/terminal-shop/resources/cart.rbs +22 -47
  226. data/sig/terminal-shop/resources/email.rbs +4 -8
  227. data/sig/terminal-shop/resources/order.rbs +13 -26
  228. data/sig/terminal-shop/resources/product.rbs +7 -16
  229. data/sig/terminal-shop/resources/profile.rbs +8 -16
  230. data/sig/terminal-shop/resources/subscription.rbs +21 -43
  231. data/sig/terminal-shop/resources/token.rbs +14 -32
  232. data/sig/terminal-shop/resources/view.rbs +3 -7
  233. data/sig/terminal-shop/util.rbs +9 -9
  234. data/sig/terminal-shop/version.rbs +1 -1
  235. metadata +4 -4
@@ -1,60 +1,59 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TerminalShop
4
- # @private
5
- #
6
- # @abstract
7
- #
8
4
  # @example
9
- # ```ruby
10
- # if page.has_next?
11
- # page = page.next_page
12
- # end
13
- # ```
5
+ # if page.has_next?
6
+ # page = page.next_page
7
+ # end
14
8
  #
15
9
  # @example
16
- # ```ruby
17
- # page.auto_paging_each do |product|
18
- # puts(product)
19
- # end
20
- # ```
10
+ # page.auto_paging_each do |product|
11
+ # puts(product)
12
+ # end
21
13
  #
22
14
  # @example
23
- # ```ruby
24
- # products = page.to_enum.take(2)
15
+ # products =
16
+ # page
17
+ # .to_enum
18
+ # .lazy
19
+ # .select { _1.object_id.even? }
20
+ # .map(&:itself)
21
+ # .take(2)
22
+ # .to_a
25
23
  #
26
- # products => Array
27
- # ```
24
+ # products => Array
28
25
  module BasePage
26
+ # rubocop:disable Lint/UnusedMethodArgument
27
+
29
28
  # @return [Boolean]
30
- #
31
29
  def next_page? = (raise NotImplementedError)
32
30
 
33
31
  # @raise [TerminalShop::APIError]
34
32
  # @return [TerminalShop::BasePage]
35
- #
36
33
  def next_page = (raise NotImplementedError)
37
34
 
38
35
  # @param blk [Proc]
39
36
  #
40
37
  # @return [void]
41
- #
42
38
  def auto_paging_each(&) = (raise NotImplementedError)
43
39
 
44
40
  # @return [Enumerable]
45
- #
46
41
  def to_enum = super(:auto_paging_each)
47
42
 
48
43
  alias_method :enum_for, :to_enum
49
44
 
50
- # @!parse
51
- # # @private
52
- # #
53
- # # @param client [TerminalShop::BaseClient]
54
- # # @param req [Hash{Symbol=>Object}]
55
- # # @param headers [Hash{String=>String}, Net::HTTPHeader]
56
- # # @param page_data [Object]
57
- # #
58
- # def initialize(client:, req:, headers:, page_data:); end
45
+ # @api private
46
+ #
47
+ # @param client [TerminalShop::BaseClient]
48
+ # @param req [Hash{Symbol=>Object}]
49
+ # @param headers [Hash{String=>String}, Net::HTTPHeader]
50
+ # @param page_data [Object]
51
+ def initialize(client:, req:, headers:, page_data:)
52
+ @client = client
53
+ @req = req
54
+ super()
55
+ end
56
+
57
+ # rubocop:enable Lint/UnusedMethodArgument
59
58
  end
60
59
  end
@@ -16,6 +16,7 @@ module TerminalShop
16
16
  DEFAULT_MAX_RETRY_DELAY = 8.0
17
17
 
18
18
  # rubocop:disable Style/MutableConstant
19
+ # @type [Hash{Symbol=>String}]
19
20
  ENVIRONMENTS = {production: "https://api.terminal.shop/", dev: "https://api.dev.terminal.shop/"}
20
21
  # rubocop:enable Style/MutableConstant
21
22
 
@@ -58,10 +59,9 @@ module TerminalShop
58
59
  # @return [TerminalShop::Resources::View]
59
60
  attr_reader :view
60
61
 
61
- # @private
62
+ # @api private
62
63
  #
63
64
  # @return [Hash{String=>String}]
64
- #
65
65
  private def auth_headers
66
66
  return {} if @bearer_token.nil?
67
67
 
@@ -90,7 +90,6 @@ module TerminalShop
90
90
  # @param initial_retry_delay [Float]
91
91
  #
92
92
  # @param max_retry_delay [Float]
93
- #
94
93
  def initialize(
95
94
  environment: nil,
96
95
  base_url: nil,
@@ -4,7 +4,7 @@ module TerminalShop
4
4
  class Error < StandardError
5
5
  # @!parse
6
6
  # # @return [StandardError, nil]
7
- # attr_reader :cause
7
+ # attr_accessor :cause
8
8
  end
9
9
 
10
10
  class ConversionError < TerminalShop::Error
@@ -12,15 +12,15 @@ module TerminalShop
12
12
 
13
13
  class APIError < TerminalShop::Error
14
14
  # @return [URI::Generic]
15
- attr_reader :url
15
+ attr_accessor :url
16
16
 
17
17
  # @return [Integer, nil]
18
- attr_reader :status
18
+ attr_accessor :status
19
19
 
20
20
  # @return [Object, nil]
21
- attr_reader :body
21
+ attr_accessor :body
22
22
 
23
- # @private
23
+ # @api private
24
24
  #
25
25
  # @param url [URI::Generic]
26
26
  # @param status [Integer, nil]
@@ -28,7 +28,6 @@ module TerminalShop
28
28
  # @param request [nil]
29
29
  # @param response [nil]
30
30
  # @param message [String, nil]
31
- #
32
31
  def initialize(url:, status: nil, body: nil, request: nil, response: nil, message: nil)
33
32
  @url = url
34
33
  @status = status
@@ -42,13 +41,13 @@ module TerminalShop
42
41
  class APIConnectionError < TerminalShop::APIError
43
42
  # @!parse
44
43
  # # @return [nil]
45
- # attr_reader :status
44
+ # attr_accessor :status
46
45
 
47
46
  # @!parse
48
47
  # # @return [nil]
49
- # attr_reader :body
48
+ # attr_accessor :body
50
49
 
51
- # @private
50
+ # @api private
52
51
  #
53
52
  # @param url [URI::Generic]
54
53
  # @param status [nil]
@@ -56,7 +55,6 @@ module TerminalShop
56
55
  # @param request [nil]
57
56
  # @param response [nil]
58
57
  # @param message [String, nil]
59
- #
60
58
  def initialize(
61
59
  url:,
62
60
  status: nil,
@@ -70,7 +68,7 @@ module TerminalShop
70
68
  end
71
69
 
72
70
  class APITimeoutError < TerminalShop::APIConnectionError
73
- # @private
71
+ # @api private
74
72
  #
75
73
  # @param url [URI::Generic]
76
74
  # @param status [nil]
@@ -78,7 +76,6 @@ module TerminalShop
78
76
  # @param request [nil]
79
77
  # @param response [nil]
80
78
  # @param message [String, nil]
81
- #
82
79
  def initialize(
83
80
  url:,
84
81
  status: nil,
@@ -92,7 +89,7 @@ module TerminalShop
92
89
  end
93
90
 
94
91
  class APIStatusError < TerminalShop::APIError
95
- # @private
92
+ # @api private
96
93
  #
97
94
  # @param url [URI::Generic]
98
95
  # @param status [Integer]
@@ -102,7 +99,6 @@ module TerminalShop
102
99
  # @param message [String, nil]
103
100
  #
104
101
  # @return [TerminalShop::APIStatusError]
105
- #
106
102
  def self.for(url:, status:, body:, request:, response:, message: nil)
107
103
  kwargs = {url: url, status: status, body: body, request: request, response: response, message: message}
108
104
 
@@ -130,9 +126,9 @@ module TerminalShop
130
126
 
131
127
  # @!parse
132
128
  # # @return [Integer]
133
- # attr_reader :status
129
+ # attr_accessor :status
134
130
 
135
- # @private
131
+ # @api private
136
132
  #
137
133
  # @param url [URI::Generic]
138
134
  # @param status [Integer]
@@ -140,7 +136,6 @@ module TerminalShop
140
136
  # @param request [nil]
141
137
  # @param response [nil]
142
138
  # @param message [String, nil]
143
- #
144
139
  def initialize(url:, status:, body:, request:, response:, message: nil)
145
140
  message ||= {url: url.to_s, status: status, body: body}
146
141
  super(
@@ -1,10 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TerminalShop
4
- # @private
5
- #
6
- # @abstract
7
- #
4
+ # @api private
8
5
  module Extern
9
6
  end
10
7
  end
@@ -72,14 +72,18 @@ module TerminalShop
72
72
 
73
73
  # def initialize: (Hash | TerminalShop::BaseModel) -> void
74
74
 
75
- # @abstract
76
- #
77
75
  # Whether the product must be or can be subscribed to.
78
- class Subscription < TerminalShop::Enum
76
+ module Subscription
77
+ extend TerminalShop::Enum
78
+
79
79
  ALLOWED = :allowed
80
80
  REQUIRED = :required
81
81
 
82
82
  finalize!
83
+
84
+ # @!parse
85
+ # # @return [Array<Symbol>]
86
+ # def self.values; end
83
87
  end
84
88
 
85
89
  class Tags < TerminalShop::BaseModel
@@ -2,14 +2,18 @@
2
2
 
3
3
  module TerminalShop
4
4
  module Models
5
- # @abstract
6
- #
7
5
  # A Terminal shop user's region.
8
- class Region < TerminalShop::Enum
6
+ module Region
7
+ extend TerminalShop::Enum
8
+
9
9
  EU = :eu
10
10
  NA = :na
11
11
 
12
12
  finalize!
13
+
14
+ # @!parse
15
+ # # @return [Array<Symbol>]
16
+ # def self.values; end
13
17
  end
14
18
  end
15
19
  end
@@ -68,10 +68,10 @@ module TerminalShop
68
68
 
69
69
  # def initialize: (Hash | TerminalShop::BaseModel) -> void
70
70
 
71
- # @abstract
72
- #
73
71
  # Schedule of the subscription.
74
- class Schedule < TerminalShop::Union
72
+ module Schedule
73
+ extend TerminalShop::Union
74
+
75
75
  variant -> { TerminalShop::Models::SubscriptionAPI::Schedule::Fixed }
76
76
 
77
77
  variant -> { TerminalShop::Models::SubscriptionAPI::Schedule::Weekly }
@@ -109,6 +109,10 @@ module TerminalShop
109
109
 
110
110
  # def initialize: (Hash | TerminalShop::BaseModel) -> void
111
111
  end
112
+
113
+ # @!parse
114
+ # # @return [Array(TerminalShop::Models::SubscriptionAPI::Schedule::Fixed, TerminalShop::Models::SubscriptionAPI::Schedule::Weekly)]
115
+ # def self.variants; end
112
116
  end
113
117
  end
114
118
  end
@@ -1,16 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TerminalShop
4
- # @private
5
- #
4
+ # @api private
6
5
  class PooledNetRequester
6
+ # from the golang stdlib
7
+ # https://github.com/golang/go/blob/c8eced8580028328fde7c03cbfcb720ce15b2358/src/net/http/transport.go#L49
8
+ KEEP_ALIVE_TIMEOUT = 30
9
+
7
10
  class << self
8
- # @private
11
+ # @api private
9
12
  #
10
13
  # @param url [URI::Generic]
11
14
  #
12
15
  # @return [Net::HTTP]
13
- #
14
16
  def connect(url)
15
17
  port =
16
18
  case [url.port, url.scheme]
@@ -28,17 +30,16 @@ module TerminalShop
28
30
  end
29
31
  end
30
32
 
31
- # @private
33
+ # @api private
32
34
  #
33
35
  # @param conn [Net::HTTP]
34
36
  # @param deadline [Float]
35
- #
36
37
  def calibrate_socket_timeout(conn, deadline)
37
38
  timeout = deadline - TerminalShop::Util.monotonic_secs
38
39
  conn.open_timeout = conn.read_timeout = conn.write_timeout = conn.continue_timeout = timeout
39
40
  end
40
41
 
41
- # @private
42
+ # @api private
42
43
  #
43
44
  # @param request [Hash{Symbol=>Object}] .
44
45
  #
@@ -50,8 +51,8 @@ module TerminalShop
50
51
  #
51
52
  # @param blk [Proc]
52
53
  #
54
+ # @yieldparam [String]
53
55
  # @return [Net::HTTPGenericRequest]
54
- #
55
56
  def build_request(request, &)
56
57
  method, url, headers, body = request.fetch_values(:method, :url, :headers, :body)
57
58
  req = Net::HTTPGenericRequest.new(
@@ -65,6 +66,7 @@ module TerminalShop
65
66
 
66
67
  case body
67
68
  in nil
69
+ nil
68
70
  in String
69
71
  req["content-length"] ||= body.bytesize.to_s unless req["transfer-encoding"]
70
72
  req.body_stream = TerminalShop::Util::ReadIOAdapter.new(body, &)
@@ -80,13 +82,17 @@ module TerminalShop
80
82
  end
81
83
  end
82
84
 
83
- # @private
85
+ # @api private
84
86
  #
85
87
  # @param url [URI::Generic]
88
+ # @param deadline [Float]
86
89
  # @param blk [Proc]
87
90
  #
88
- private def with_pool(url, &)
91
+ # @raise [Timeout::Error]
92
+ # @yieldparam [Net::HTTP]
93
+ private def with_pool(url, deadline:, &blk)
89
94
  origin = TerminalShop::Util.uri_origin(url)
95
+ timeout = deadline - TerminalShop::Util.monotonic_secs
90
96
  pool =
91
97
  @mutex.synchronize do
92
98
  @pools[origin] ||= ConnectionPool.new(size: @size) do
@@ -94,10 +100,10 @@ module TerminalShop
94
100
  end
95
101
  end
96
102
 
97
- pool.with(&)
103
+ pool.with(timeout: timeout, &blk)
98
104
  end
99
105
 
100
- # @private
106
+ # @api private
101
107
  #
102
108
  # @param request [Hash{Symbol=>Object}] .
103
109
  #
@@ -111,15 +117,14 @@ module TerminalShop
111
117
  #
112
118
  # @option request [Float] :deadline
113
119
  #
114
- # @return [Array(Net::HTTPResponse, Enumerable)]
115
- #
120
+ # @return [Array(Integer, Net::HTTPResponse, Enumerable)]
116
121
  def execute(request)
117
122
  url, deadline = request.fetch_values(:url, :deadline)
118
123
 
119
124
  eof = false
120
125
  finished = false
121
126
  enum = Enumerator.new do |y|
122
- with_pool(url) do |conn|
127
+ with_pool(url, deadline: deadline) do |conn|
123
128
  next if finished
124
129
 
125
130
  req = self.class.build_request(request) do
@@ -127,11 +132,14 @@ module TerminalShop
127
132
  end
128
133
 
129
134
  self.class.calibrate_socket_timeout(conn, deadline)
130
- conn.start unless conn.started?
135
+ unless conn.started?
136
+ conn.keep_alive_timeout = self.class::KEEP_ALIVE_TIMEOUT
137
+ conn.start
138
+ end
131
139
 
132
140
  self.class.calibrate_socket_timeout(conn, deadline)
133
141
  conn.request(req) do |rsp|
134
- y << [conn, rsp]
142
+ y << [conn, req, rsp]
135
143
  break if finished
136
144
 
137
145
  rsp.read_body do |bytes|
@@ -143,9 +151,11 @@ module TerminalShop
143
151
  eof = true
144
152
  end
145
153
  end
154
+ rescue Timeout::Error
155
+ raise TerminalShop::APITimeoutError
146
156
  end
147
157
 
148
- conn, response = enum.next
158
+ conn, _, response = enum.next
149
159
  body = TerminalShop::Util.fused_enum(enum, external: true) do
150
160
  finished = true
151
161
  tap do
@@ -155,13 +165,12 @@ module TerminalShop
155
165
  end
156
166
  conn.finish if !eof && conn&.started?
157
167
  end
158
- [response, (response.body = body)]
168
+ [Integer(response.code), response, (response.body = body)]
159
169
  end
160
170
 
161
- # @private
171
+ # @api private
162
172
  #
163
173
  # @param size [Integer]
164
- #
165
174
  def initialize(size: Etc.nprocessors)
166
175
  @mutex = Mutex.new
167
176
  @size = size
@@ -1,10 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TerminalShop
4
- # @private
5
- #
6
- # @abstract
7
- #
4
+ # @api private
8
5
  module RequestParameters
9
6
  # @!parse
10
7
  # # Options to specify HTTP behaviour for this request.
@@ -12,7 +9,6 @@ module TerminalShop
12
9
  # attr_accessor :request_options
13
10
 
14
11
  # @param mod [Module]
15
- #
16
12
  def self.included(mod)
17
13
  return unless mod <= TerminalShop::BaseModel
18
14
 
@@ -20,15 +16,13 @@ module TerminalShop
20
16
  mod.optional(:request_options, TerminalShop::RequestOptions)
21
17
  end
22
18
 
23
- # @private
24
- #
19
+ # @api private
25
20
  module Converter
26
- # @private
21
+ # @api private
27
22
  #
28
23
  # @param params [Object]
29
24
  #
30
25
  # @return [Array(Object, Hash{Symbol=>Object})]
31
- #
32
26
  def dump_request(params)
33
27
  case (dumped = dump(params))
34
28
  in Hash
@@ -46,12 +40,11 @@ module TerminalShop
46
40
  # When making a request, you can pass an actual {RequestOptions} instance, or
47
41
  # simply pass a Hash with symbol keys matching the attributes on this class.
48
42
  class RequestOptions < TerminalShop::BaseModel
49
- # @private
43
+ # @api private
50
44
  #
51
45
  # @param opts [TerminalShop::RequestOptions, Hash{Symbol=>Object}]
52
46
  #
53
47
  # @raise [ArgumentError]
54
- #
55
48
  def self.validate!(opts)
56
49
  case opts
57
50
  in TerminalShop::RequestOptions | Hash
@@ -90,7 +83,7 @@ module TerminalShop
90
83
  # Extra data to send with the request. These are deep merged into any data
91
84
  # generated as part of the normal request.
92
85
  #
93
- # @return [Hash{Symbol=>Object}, nil]
86
+ # @return [Object, nil]
94
87
  optional :extra_body, TerminalShop::HashOf[TerminalShop::Unknown]
95
88
 
96
89
  # @!attribute max_retries
@@ -26,7 +26,6 @@ module TerminalShop
26
26
  # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
27
27
  #
28
28
  # @return [TerminalShop::Models::AddressCreateResponse]
29
- #
30
29
  def create(params)
31
30
  parsed, options = TerminalShop::Models::AddressCreateParams.dump_request(params)
32
31
  @client.request(
@@ -45,7 +44,6 @@ module TerminalShop
45
44
  # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
46
45
  #
47
46
  # @return [TerminalShop::Models::AddressListResponse]
48
- #
49
47
  def list(params = {})
50
48
  @client.request(
51
49
  method: :get,
@@ -64,7 +62,6 @@ module TerminalShop
64
62
  # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
65
63
  #
66
64
  # @return [TerminalShop::Models::AddressDeleteResponse]
67
- #
68
65
  def delete(id, params = {})
69
66
  @client.request(
70
67
  method: :delete,
@@ -83,7 +80,6 @@ module TerminalShop
83
80
  # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
84
81
  #
85
82
  # @return [TerminalShop::Models::AddressGetResponse]
86
- #
87
83
  def get(id, params = {})
88
84
  @client.request(
89
85
  method: :get,
@@ -94,7 +90,6 @@ module TerminalShop
94
90
  end
95
91
 
96
92
  # @param client [TerminalShop::Client]
97
- #
98
93
  def initialize(client:)
99
94
  @client = client
100
95
  end
@@ -14,7 +14,6 @@ module TerminalShop
14
14
  # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
15
15
  #
16
16
  # @return [TerminalShop::Models::AppCreateResponse]
17
- #
18
17
  def create(params)
19
18
  parsed, options = TerminalShop::Models::AppCreateParams.dump_request(params)
20
19
  @client.request(
@@ -33,7 +32,6 @@ module TerminalShop
33
32
  # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
34
33
  #
35
34
  # @return [TerminalShop::Models::AppListResponse]
36
- #
37
35
  def list(params = {})
38
36
  @client.request(
39
37
  method: :get,
@@ -52,7 +50,6 @@ module TerminalShop
52
50
  # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
53
51
  #
54
52
  # @return [TerminalShop::Models::AppDeleteResponse]
55
- #
56
53
  def delete(id, params = {})
57
54
  @client.request(
58
55
  method: :delete,
@@ -71,7 +68,6 @@ module TerminalShop
71
68
  # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
72
69
  #
73
70
  # @return [TerminalShop::Models::AppGetResponse]
74
- #
75
71
  def get(id, params = {})
76
72
  @client.request(
77
73
  method: :get,
@@ -82,7 +78,6 @@ module TerminalShop
82
78
  end
83
79
 
84
80
  # @param client [TerminalShop::Client]
85
- #
86
81
  def initialize(client:)
87
82
  @client = client
88
83
  end
@@ -13,7 +13,6 @@ module TerminalShop
13
13
  # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
14
14
  #
15
15
  # @return [TerminalShop::Models::CardCreateResponse]
16
- #
17
16
  def create(params)
18
17
  parsed, options = TerminalShop::Models::CardCreateParams.dump_request(params)
19
18
  @client.request(
@@ -32,7 +31,6 @@ module TerminalShop
32
31
  # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
33
32
  #
34
33
  # @return [TerminalShop::Models::CardListResponse]
35
- #
36
34
  def list(params = {})
37
35
  @client.request(
38
36
  method: :get,
@@ -51,7 +49,6 @@ module TerminalShop
51
49
  # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
52
50
  #
53
51
  # @return [TerminalShop::Models::CardDeleteResponse]
54
- #
55
52
  def delete(id, params = {})
56
53
  @client.request(
57
54
  method: :delete,
@@ -69,7 +66,6 @@ module TerminalShop
69
66
  # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
70
67
  #
71
68
  # @return [TerminalShop::Models::CardCollectResponse]
72
- #
73
69
  def collect(params = {})
74
70
  @client.request(
75
71
  method: :post,
@@ -88,7 +84,6 @@ module TerminalShop
88
84
  # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
89
85
  #
90
86
  # @return [TerminalShop::Models::CardGetResponse]
91
- #
92
87
  def get(id, params = {})
93
88
  @client.request(
94
89
  method: :get,
@@ -99,7 +94,6 @@ module TerminalShop
99
94
  end
100
95
 
101
96
  # @param client [TerminalShop::Client]
102
- #
103
97
  def initialize(client:)
104
98
  @client = client
105
99
  end