terminal-shop 0.1.0.pre.alpha.5

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 (276) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +127 -0
  3. data/lib/terminal-shop/base_client.rb +452 -0
  4. data/lib/terminal-shop/base_model.rb +1189 -0
  5. data/lib/terminal-shop/base_page.rb +44 -0
  6. data/lib/terminal-shop/client.rb +135 -0
  7. data/lib/terminal-shop/errors.rb +187 -0
  8. data/lib/terminal-shop/extern.rb +10 -0
  9. data/lib/terminal-shop/models/address.rb +101 -0
  10. data/lib/terminal-shop/models/address_create_params.rb +86 -0
  11. data/lib/terminal-shop/models/address_create_response.rb +26 -0
  12. data/lib/terminal-shop/models/address_delete_params.rb +18 -0
  13. data/lib/terminal-shop/models/address_delete_response.rb +25 -0
  14. data/lib/terminal-shop/models/address_list_params.rb +18 -0
  15. data/lib/terminal-shop/models/address_list_response.rb +26 -0
  16. data/lib/terminal-shop/models/app.rb +44 -0
  17. data/lib/terminal-shop/models/app_create_params.rb +18 -0
  18. data/lib/terminal-shop/models/app_create_response.rb +54 -0
  19. data/lib/terminal-shop/models/app_delete_params.rb +18 -0
  20. data/lib/terminal-shop/models/app_delete_response.rb +25 -0
  21. data/lib/terminal-shop/models/app_get_params.rb +18 -0
  22. data/lib/terminal-shop/models/app_get_response.rb +26 -0
  23. data/lib/terminal-shop/models/app_list_params.rb +18 -0
  24. data/lib/terminal-shop/models/app_list_response.rb +26 -0
  25. data/lib/terminal-shop/models/card.rb +83 -0
  26. data/lib/terminal-shop/models/card_collect_params.rb +18 -0
  27. data/lib/terminal-shop/models/card_collect_response.rb +50 -0
  28. data/lib/terminal-shop/models/card_create_params.rb +26 -0
  29. data/lib/terminal-shop/models/card_create_response.rb +26 -0
  30. data/lib/terminal-shop/models/card_delete_params.rb +18 -0
  31. data/lib/terminal-shop/models/card_delete_response.rb +25 -0
  32. data/lib/terminal-shop/models/card_list_params.rb +18 -0
  33. data/lib/terminal-shop/models/card_list_response.rb +26 -0
  34. data/lib/terminal-shop/models/cart.rb +200 -0
  35. data/lib/terminal-shop/models/cart_convert_params.rb +18 -0
  36. data/lib/terminal-shop/models/cart_convert_response.rb +26 -0
  37. data/lib/terminal-shop/models/cart_get_params.rb +18 -0
  38. data/lib/terminal-shop/models/cart_get_response.rb +26 -0
  39. data/lib/terminal-shop/models/cart_set_address_params.rb +25 -0
  40. data/lib/terminal-shop/models/cart_set_address_response.rb +25 -0
  41. data/lib/terminal-shop/models/cart_set_card_params.rb +25 -0
  42. data/lib/terminal-shop/models/cart_set_card_response.rb +25 -0
  43. data/lib/terminal-shop/models/cart_set_item_params.rb +32 -0
  44. data/lib/terminal-shop/models/cart_set_item_response.rb +26 -0
  45. data/lib/terminal-shop/models/email_create_params.rb +25 -0
  46. data/lib/terminal-shop/models/email_create_response.rb +25 -0
  47. data/lib/terminal-shop/models/order.rb +303 -0
  48. data/lib/terminal-shop/models/order_get_params.rb +18 -0
  49. data/lib/terminal-shop/models/order_get_response.rb +26 -0
  50. data/lib/terminal-shop/models/order_list_params.rb +18 -0
  51. data/lib/terminal-shop/models/order_list_response.rb +26 -0
  52. data/lib/terminal-shop/models/product.rb +141 -0
  53. data/lib/terminal-shop/models/product_list_params.rb +18 -0
  54. data/lib/terminal-shop/models/product_list_response.rb +26 -0
  55. data/lib/terminal-shop/models/product_variant.rb +44 -0
  56. data/lib/terminal-shop/models/profile.rb +83 -0
  57. data/lib/terminal-shop/models/profile_me_params.rb +18 -0
  58. data/lib/terminal-shop/models/profile_me_response.rb +26 -0
  59. data/lib/terminal-shop/models/profile_update_params.rb +32 -0
  60. data/lib/terminal-shop/models/profile_update_response.rb +26 -0
  61. data/lib/terminal-shop/models/subscription.rb +113 -0
  62. data/lib/terminal-shop/models/subscription_create_params.rb +18 -0
  63. data/lib/terminal-shop/models/subscription_create_response.rb +25 -0
  64. data/lib/terminal-shop/models/subscription_delete_params.rb +18 -0
  65. data/lib/terminal-shop/models/subscription_delete_response.rb +25 -0
  66. data/lib/terminal-shop/models/subscription_list_params.rb +18 -0
  67. data/lib/terminal-shop/models/subscription_list_response.rb +26 -0
  68. data/lib/terminal-shop/models/token.rb +68 -0
  69. data/lib/terminal-shop/models/token_create_params.rb +18 -0
  70. data/lib/terminal-shop/models/token_create_response.rb +55 -0
  71. data/lib/terminal-shop/models/token_delete_params.rb +18 -0
  72. data/lib/terminal-shop/models/token_delete_response.rb +25 -0
  73. data/lib/terminal-shop/models/token_get_params.rb +18 -0
  74. data/lib/terminal-shop/models/token_get_response.rb +27 -0
  75. data/lib/terminal-shop/models/token_list_params.rb +18 -0
  76. data/lib/terminal-shop/models/token_list_response.rb +26 -0
  77. data/lib/terminal-shop/models/view_init_params.rb +18 -0
  78. data/lib/terminal-shop/models/view_init_response.rb +103 -0
  79. data/lib/terminal-shop/pooled_net_requester.rb +94 -0
  80. data/lib/terminal-shop/request_options.rb +115 -0
  81. data/lib/terminal-shop/resources/address.rb +84 -0
  82. data/lib/terminal-shop/resources/app.rb +93 -0
  83. data/lib/terminal-shop/resources/card.rb +89 -0
  84. data/lib/terminal-shop/resources/cart.rb +112 -0
  85. data/lib/terminal-shop/resources/email.rb +34 -0
  86. data/lib/terminal-shop/resources/order.rb +49 -0
  87. data/lib/terminal-shop/resources/product.rb +30 -0
  88. data/lib/terminal-shop/resources/profile.rb +53 -0
  89. data/lib/terminal-shop/resources/subscription.rb +82 -0
  90. data/lib/terminal-shop/resources/token.rb +85 -0
  91. data/lib/terminal-shop/resources/view.rb +31 -0
  92. data/lib/terminal-shop/util.rb +460 -0
  93. data/lib/terminal-shop/version.rb +5 -0
  94. data/lib/terminal-shop.rb +110 -0
  95. data/manifest.yaml +12 -0
  96. data/rbi/lib/terminal-shop/base_client.rbi +145 -0
  97. data/rbi/lib/terminal-shop/base_model.rbi +514 -0
  98. data/rbi/lib/terminal-shop/base_page.rbi +38 -0
  99. data/rbi/lib/terminal-shop/client.rbi +80 -0
  100. data/rbi/lib/terminal-shop/errors.rbi +133 -0
  101. data/rbi/lib/terminal-shop/extern.rbi +7 -0
  102. data/rbi/lib/terminal-shop/models/address.rbi +77 -0
  103. data/rbi/lib/terminal-shop/models/address_create_params.rbi +87 -0
  104. data/rbi/lib/terminal-shop/models/address_create_response.rbi +18 -0
  105. data/rbi/lib/terminal-shop/models/address_delete_params.rbi +18 -0
  106. data/rbi/lib/terminal-shop/models/address_delete_response.rbi +18 -0
  107. data/rbi/lib/terminal-shop/models/address_list_params.rbi +18 -0
  108. data/rbi/lib/terminal-shop/models/address_list_response.rbi +18 -0
  109. data/rbi/lib/terminal-shop/models/app.rbi +24 -0
  110. data/rbi/lib/terminal-shop/models/app_create_params.rbi +18 -0
  111. data/rbi/lib/terminal-shop/models/app_create_response.rbi +34 -0
  112. data/rbi/lib/terminal-shop/models/app_delete_params.rbi +18 -0
  113. data/rbi/lib/terminal-shop/models/app_delete_response.rbi +18 -0
  114. data/rbi/lib/terminal-shop/models/app_get_params.rbi +18 -0
  115. data/rbi/lib/terminal-shop/models/app_get_response.rbi +18 -0
  116. data/rbi/lib/terminal-shop/models/app_list_params.rbi +18 -0
  117. data/rbi/lib/terminal-shop/models/app_list_response.rbi +18 -0
  118. data/rbi/lib/terminal-shop/models/card.rbi +59 -0
  119. data/rbi/lib/terminal-shop/models/card_collect_params.rbi +18 -0
  120. data/rbi/lib/terminal-shop/models/card_collect_response.rbi +31 -0
  121. data/rbi/lib/terminal-shop/models/card_create_params.rbi +26 -0
  122. data/rbi/lib/terminal-shop/models/card_create_response.rbi +18 -0
  123. data/rbi/lib/terminal-shop/models/card_delete_params.rbi +18 -0
  124. data/rbi/lib/terminal-shop/models/card_delete_response.rbi +18 -0
  125. data/rbi/lib/terminal-shop/models/card_list_params.rbi +18 -0
  126. data/rbi/lib/terminal-shop/models/card_list_response.rbi +18 -0
  127. data/rbi/lib/terminal-shop/models/cart.rbi +127 -0
  128. data/rbi/lib/terminal-shop/models/cart_convert_params.rbi +18 -0
  129. data/rbi/lib/terminal-shop/models/cart_convert_response.rbi +18 -0
  130. data/rbi/lib/terminal-shop/models/cart_get_params.rbi +18 -0
  131. data/rbi/lib/terminal-shop/models/cart_get_response.rbi +18 -0
  132. data/rbi/lib/terminal-shop/models/cart_set_address_params.rbi +26 -0
  133. data/rbi/lib/terminal-shop/models/cart_set_address_response.rbi +18 -0
  134. data/rbi/lib/terminal-shop/models/cart_set_card_params.rbi +26 -0
  135. data/rbi/lib/terminal-shop/models/cart_set_card_response.rbi +18 -0
  136. data/rbi/lib/terminal-shop/models/cart_set_item_params.rbi +38 -0
  137. data/rbi/lib/terminal-shop/models/cart_set_item_response.rbi +18 -0
  138. data/rbi/lib/terminal-shop/models/email_create_params.rbi +26 -0
  139. data/rbi/lib/terminal-shop/models/email_create_response.rbi +18 -0
  140. data/rbi/lib/terminal-shop/models/order.rbi +216 -0
  141. data/rbi/lib/terminal-shop/models/order_get_params.rbi +18 -0
  142. data/rbi/lib/terminal-shop/models/order_get_response.rbi +18 -0
  143. data/rbi/lib/terminal-shop/models/order_list_params.rbi +18 -0
  144. data/rbi/lib/terminal-shop/models/order_list_response.rbi +18 -0
  145. data/rbi/lib/terminal-shop/models/product.rbi +94 -0
  146. data/rbi/lib/terminal-shop/models/product_list_params.rbi +18 -0
  147. data/rbi/lib/terminal-shop/models/product_list_response.rbi +18 -0
  148. data/rbi/lib/terminal-shop/models/product_variant.rbi +24 -0
  149. data/rbi/lib/terminal-shop/models/profile.rbi +61 -0
  150. data/rbi/lib/terminal-shop/models/profile_me_params.rbi +18 -0
  151. data/rbi/lib/terminal-shop/models/profile_me_response.rbi +18 -0
  152. data/rbi/lib/terminal-shop/models/profile_update_params.rbi +38 -0
  153. data/rbi/lib/terminal-shop/models/profile_update_response.rbi +18 -0
  154. data/rbi/lib/terminal-shop/models/subscription.rbi +75 -0
  155. data/rbi/lib/terminal-shop/models/subscription_create_params.rbi +18 -0
  156. data/rbi/lib/terminal-shop/models/subscription_create_response.rbi +18 -0
  157. data/rbi/lib/terminal-shop/models/subscription_delete_params.rbi +18 -0
  158. data/rbi/lib/terminal-shop/models/subscription_delete_response.rbi +18 -0
  159. data/rbi/lib/terminal-shop/models/subscription_list_params.rbi +18 -0
  160. data/rbi/lib/terminal-shop/models/subscription_list_response.rbi +18 -0
  161. data/rbi/lib/terminal-shop/models/token.rbi +37 -0
  162. data/rbi/lib/terminal-shop/models/token_create_params.rbi +18 -0
  163. data/rbi/lib/terminal-shop/models/token_create_response.rbi +34 -0
  164. data/rbi/lib/terminal-shop/models/token_delete_params.rbi +18 -0
  165. data/rbi/lib/terminal-shop/models/token_delete_response.rbi +18 -0
  166. data/rbi/lib/terminal-shop/models/token_get_params.rbi +18 -0
  167. data/rbi/lib/terminal-shop/models/token_get_response.rbi +18 -0
  168. data/rbi/lib/terminal-shop/models/token_list_params.rbi +18 -0
  169. data/rbi/lib/terminal-shop/models/token_list_response.rbi +18 -0
  170. data/rbi/lib/terminal-shop/models/view_init_params.rbi +18 -0
  171. data/rbi/lib/terminal-shop/models/view_init_response.rbi +91 -0
  172. data/rbi/lib/terminal-shop/request_options.rbi +40 -0
  173. data/rbi/lib/terminal-shop/resources/address.rbi +60 -0
  174. data/rbi/lib/terminal-shop/resources/app.rbi +54 -0
  175. data/rbi/lib/terminal-shop/resources/card.rbi +57 -0
  176. data/rbi/lib/terminal-shop/resources/cart.rbi +67 -0
  177. data/rbi/lib/terminal-shop/resources/email.rbi +20 -0
  178. data/rbi/lib/terminal-shop/resources/order.rbi +34 -0
  179. data/rbi/lib/terminal-shop/resources/product.rbi +25 -0
  180. data/rbi/lib/terminal-shop/resources/profile.rbi +35 -0
  181. data/rbi/lib/terminal-shop/resources/subscription.rbi +58 -0
  182. data/rbi/lib/terminal-shop/resources/token.rbi +57 -0
  183. data/rbi/lib/terminal-shop/resources/view.rbi +25 -0
  184. data/rbi/lib/terminal-shop/util.rbi +128 -0
  185. data/rbi/lib/terminal-shop/version.rbi +5 -0
  186. data/sig/terminal-shop/base_client.rbs +100 -0
  187. data/sig/terminal-shop/base_model.rbs +246 -0
  188. data/sig/terminal-shop/base_page.rbs +20 -0
  189. data/sig/terminal-shop/client.rbs +52 -0
  190. data/sig/terminal-shop/errors.rbs +98 -0
  191. data/sig/terminal-shop/extern.rbs +4 -0
  192. data/sig/terminal-shop/models/address.rbs +60 -0
  193. data/sig/terminal-shop/models/address_create_params.rbs +62 -0
  194. data/sig/terminal-shop/models/address_create_response.rbs +18 -0
  195. data/sig/terminal-shop/models/address_delete_params.rbs +19 -0
  196. data/sig/terminal-shop/models/address_delete_response.rbs +18 -0
  197. data/sig/terminal-shop/models/address_list_params.rbs +19 -0
  198. data/sig/terminal-shop/models/address_list_response.rbs +19 -0
  199. data/sig/terminal-shop/models/app.rbs +21 -0
  200. data/sig/terminal-shop/models/app_create_params.rbs +19 -0
  201. data/sig/terminal-shop/models/app_create_response.rbs +36 -0
  202. data/sig/terminal-shop/models/app_delete_params.rbs +19 -0
  203. data/sig/terminal-shop/models/app_delete_response.rbs +18 -0
  204. data/sig/terminal-shop/models/app_get_params.rbs +18 -0
  205. data/sig/terminal-shop/models/app_get_response.rbs +17 -0
  206. data/sig/terminal-shop/models/app_list_params.rbs +18 -0
  207. data/sig/terminal-shop/models/app_list_response.rbs +18 -0
  208. data/sig/terminal-shop/models/card.rbs +51 -0
  209. data/sig/terminal-shop/models/card_collect_params.rbs +19 -0
  210. data/sig/terminal-shop/models/card_collect_response.rbs +34 -0
  211. data/sig/terminal-shop/models/card_create_params.rbs +22 -0
  212. data/sig/terminal-shop/models/card_create_response.rbs +18 -0
  213. data/sig/terminal-shop/models/card_delete_params.rbs +19 -0
  214. data/sig/terminal-shop/models/card_delete_response.rbs +18 -0
  215. data/sig/terminal-shop/models/card_list_params.rbs +18 -0
  216. data/sig/terminal-shop/models/card_list_response.rbs +18 -0
  217. data/sig/terminal-shop/models/cart.rbs +119 -0
  218. data/sig/terminal-shop/models/cart_convert_params.rbs +19 -0
  219. data/sig/terminal-shop/models/cart_convert_response.rbs +18 -0
  220. data/sig/terminal-shop/models/cart_get_params.rbs +18 -0
  221. data/sig/terminal-shop/models/cart_get_response.rbs +18 -0
  222. data/sig/terminal-shop/models/cart_set_address_params.rbs +25 -0
  223. data/sig/terminal-shop/models/cart_set_address_response.rbs +18 -0
  224. data/sig/terminal-shop/models/cart_set_card_params.rbs +22 -0
  225. data/sig/terminal-shop/models/cart_set_card_response.rbs +18 -0
  226. data/sig/terminal-shop/models/cart_set_item_params.rbs +29 -0
  227. data/sig/terminal-shop/models/cart_set_item_response.rbs +18 -0
  228. data/sig/terminal-shop/models/email_create_params.rbs +22 -0
  229. data/sig/terminal-shop/models/email_create_response.rbs +18 -0
  230. data/sig/terminal-shop/models/order.rbs +179 -0
  231. data/sig/terminal-shop/models/order_get_params.rbs +18 -0
  232. data/sig/terminal-shop/models/order_get_response.rbs +18 -0
  233. data/sig/terminal-shop/models/order_list_params.rbs +19 -0
  234. data/sig/terminal-shop/models/order_list_response.rbs +18 -0
  235. data/sig/terminal-shop/models/product.rbs +76 -0
  236. data/sig/terminal-shop/models/product_list_params.rbs +19 -0
  237. data/sig/terminal-shop/models/product_list_response.rbs +19 -0
  238. data/sig/terminal-shop/models/product_variant.rbs +21 -0
  239. data/sig/terminal-shop/models/profile.rbs +53 -0
  240. data/sig/terminal-shop/models/profile_me_params.rbs +19 -0
  241. data/sig/terminal-shop/models/profile_me_response.rbs +18 -0
  242. data/sig/terminal-shop/models/profile_update_params.rbs +28 -0
  243. data/sig/terminal-shop/models/profile_update_response.rbs +18 -0
  244. data/sig/terminal-shop/models/subscription.rbs +60 -0
  245. data/sig/terminal-shop/models/subscription_create_params.rbs +19 -0
  246. data/sig/terminal-shop/models/subscription_create_response.rbs +18 -0
  247. data/sig/terminal-shop/models/subscription_delete_params.rbs +19 -0
  248. data/sig/terminal-shop/models/subscription_delete_response.rbs +18 -0
  249. data/sig/terminal-shop/models/subscription_list_params.rbs +19 -0
  250. data/sig/terminal-shop/models/subscription_list_response.rbs +19 -0
  251. data/sig/terminal-shop/models/token.rbs +40 -0
  252. data/sig/terminal-shop/models/token_create_params.rbs +19 -0
  253. data/sig/terminal-shop/models/token_create_response.rbs +36 -0
  254. data/sig/terminal-shop/models/token_delete_params.rbs +19 -0
  255. data/sig/terminal-shop/models/token_delete_response.rbs +18 -0
  256. data/sig/terminal-shop/models/token_get_params.rbs +18 -0
  257. data/sig/terminal-shop/models/token_get_response.rbs +18 -0
  258. data/sig/terminal-shop/models/token_list_params.rbs +19 -0
  259. data/sig/terminal-shop/models/token_list_response.rbs +18 -0
  260. data/sig/terminal-shop/models/view_init_params.rbs +18 -0
  261. data/sig/terminal-shop/models/view_init_response.rbs +71 -0
  262. data/sig/terminal-shop/request_options.rbs +42 -0
  263. data/sig/terminal-shop/resources/address.rbs +41 -0
  264. data/sig/terminal-shop/resources/app.rbs +46 -0
  265. data/sig/terminal-shop/resources/card.rbs +42 -0
  266. data/sig/terminal-shop/resources/cart.rbs +51 -0
  267. data/sig/terminal-shop/resources/email.rbs +16 -0
  268. data/sig/terminal-shop/resources/order.rbs +25 -0
  269. data/sig/terminal-shop/resources/product.rbs +15 -0
  270. data/sig/terminal-shop/resources/profile.rbs +25 -0
  271. data/sig/terminal-shop/resources/subscription.rbs +43 -0
  272. data/sig/terminal-shop/resources/token.rbs +43 -0
  273. data/sig/terminal-shop/resources/view.rbs +15 -0
  274. data/sig/terminal-shop/util.rbs +85 -0
  275. data/sig/terminal-shop/version.rbs +3 -0
  276. metadata +333 -0
@@ -0,0 +1,103 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TerminalShop
4
+ module Models
5
+ # @example
6
+ # ```ruby
7
+ # view_init_response => {
8
+ # data: TerminalShop::Models::ViewInitResponse::Data
9
+ # }
10
+ # ```
11
+ class ViewInitResponse < TerminalShop::BaseModel
12
+ # @!attribute data
13
+ # Initial app data.
14
+ #
15
+ # @return [TerminalShop::Models::ViewInitResponse::Data]
16
+ required :data, -> { TerminalShop::Models::ViewInitResponse::Data }
17
+
18
+ # @!parse
19
+ # # @param data [TerminalShop::Models::ViewInitResponse::Data]
20
+ # #
21
+ # def initialize(data:, **) = super
22
+
23
+ # def initialize: (Hash | TerminalShop::BaseModel) -> void
24
+
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
+ class Data < TerminalShop::BaseModel
37
+ # @!attribute addresses
38
+ #
39
+ # @return [Array<TerminalShop::Models::AddressAPI>]
40
+ required :addresses, -> { TerminalShop::ArrayOf[TerminalShop::Models::AddressAPI] }
41
+
42
+ # @!attribute apps
43
+ #
44
+ # @return [Array<TerminalShop::Models::AppAPI>]
45
+ required :apps, -> { TerminalShop::ArrayOf[TerminalShop::Models::AppAPI] }
46
+
47
+ # @!attribute cards
48
+ #
49
+ # @return [Array<TerminalShop::Models::CardAPI>]
50
+ required :cards, -> { TerminalShop::ArrayOf[TerminalShop::Models::CardAPI] }
51
+
52
+ # @!attribute cart
53
+ # The current Terminal shop user's cart.
54
+ #
55
+ # @return [TerminalShop::Models::CartAPI]
56
+ required :cart, -> { TerminalShop::Models::CartAPI }
57
+
58
+ # @!attribute orders
59
+ #
60
+ # @return [Array<TerminalShop::Models::OrderAPI>]
61
+ required :orders, -> { TerminalShop::ArrayOf[TerminalShop::Models::OrderAPI] }
62
+
63
+ # @!attribute products
64
+ #
65
+ # @return [Array<TerminalShop::Models::ProductAPI>]
66
+ required :products, -> { TerminalShop::ArrayOf[TerminalShop::Models::ProductAPI] }
67
+
68
+ # @!attribute profile
69
+ # A Terminal shop user's profile. (We have users, btw.)
70
+ #
71
+ # @return [TerminalShop::Models::ProfileAPI]
72
+ required :profile, -> { TerminalShop::Models::ProfileAPI }
73
+
74
+ # @!attribute subscriptions
75
+ #
76
+ # @return [Array<TerminalShop::Models::SubscriptionAPI>]
77
+ required :subscriptions, -> { TerminalShop::ArrayOf[TerminalShop::Models::SubscriptionAPI] }
78
+
79
+ # @!attribute tokens
80
+ #
81
+ # @return [Array<TerminalShop::Models::TokenAPI>]
82
+ required :tokens, -> { TerminalShop::ArrayOf[TerminalShop::Models::TokenAPI] }
83
+
84
+ # @!parse
85
+ # # Initial app data.
86
+ # #
87
+ # # @param addresses [Array<TerminalShop::Models::AddressAPI>]
88
+ # # @param apps [Array<TerminalShop::Models::AppAPI>]
89
+ # # @param cards [Array<TerminalShop::Models::CardAPI>]
90
+ # # @param cart [TerminalShop::Models::CartAPI]
91
+ # # @param orders [Array<TerminalShop::Models::OrderAPI>]
92
+ # # @param products [Array<TerminalShop::Models::ProductAPI>]
93
+ # # @param profile [TerminalShop::Models::ProfileAPI]
94
+ # # @param subscriptions [Array<TerminalShop::Models::SubscriptionAPI>]
95
+ # # @param tokens [Array<TerminalShop::Models::TokenAPI>]
96
+ # #
97
+ # def initialize(addresses:, apps:, cards:, cart:, orders:, products:, profile:, subscriptions:, tokens:, **) = super
98
+
99
+ # def initialize: (Hash | TerminalShop::BaseModel) -> void
100
+ end
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,94 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TerminalShop
4
+ # @private
5
+ #
6
+ class PooledNetRequester
7
+ def initialize
8
+ @mutex = Mutex.new
9
+ @pools = {}
10
+ end
11
+
12
+ # @private
13
+ #
14
+ # @param url [URL::Generic]
15
+ # @param timeout [Float]
16
+ #
17
+ # @return [ConnectionPool]
18
+ #
19
+ private def get_pool(url)
20
+ origin = TerminalShop::Util.uri_origin(url)
21
+ @mutex.synchronize do
22
+ @pools[origin] ||= ConnectionPool.new(size: Etc.nprocessors) do
23
+ port =
24
+ case [url.port, url.scheme]
25
+ in [Integer, _]
26
+ url.port
27
+ in [nil, "http" | "ws"]
28
+ Net::HTTP.http_default_port
29
+ in [nil, "https" | "wss"]
30
+ Net::HTTP.https_default_port
31
+ end
32
+
33
+ session = Net::HTTP.new(url.host, port)
34
+ session.use_ssl = %w[https wss].include?(url.scheme)
35
+ session.max_retries = 0
36
+ session
37
+ end
38
+ end
39
+ end
40
+
41
+ # @private
42
+ #
43
+ # @param req [Hash{Symbol => Object}]
44
+ # @option req [Symbol] :method
45
+ # @option req [URI::Generic] :url
46
+ # @option req [Hash{String => String}] :headers
47
+ # @option req [String, Hash] :body
48
+ # @option req [Float] :timeout
49
+ #
50
+ # @return [Net::HTTPResponse]
51
+ #
52
+ def execute(req)
53
+ method, url, headers, body, timeout = req.fetch_values(:method, :url, :headers, :body, :timeout)
54
+
55
+ request = Net::HTTPGenericRequest.new(
56
+ method.to_s.upcase,
57
+ !body.nil?,
58
+ ![:head, :options].include?(method),
59
+ url.to_s
60
+ )
61
+
62
+ headers.each { |k, v| request[k] = v }
63
+ case body
64
+ in String | nil
65
+ request.body = body
66
+ in IO | StringIO
67
+ request.body_stream = body
68
+ end
69
+
70
+ # This timeout is for acquiring a connection from the pool
71
+ # The default 5 seconds seems too short, lets just have a nearly unbounded queue for now
72
+ #
73
+ # TODO: revisit this around granular timeout / concurrency control
74
+ get_pool(url).with(timeout: 600) do |conn|
75
+ conn.open_timeout = timeout
76
+ conn.read_timeout = timeout
77
+ conn.write_timeout = timeout
78
+ conn.continue_timeout = timeout
79
+
80
+ conn.start unless conn.started?
81
+
82
+ conn.request(request)
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)
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,115 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TerminalShop
4
+ # @private
5
+ #
6
+ # @abstract
7
+ #
8
+ module RequestParameters
9
+ # @!parse
10
+ # # Options to specify HTTP behaviour for this request.
11
+ # # @return [TerminalShop::RequestOptions, Hash{Symbol=>Object}]
12
+ # attr_accessor :request_options
13
+
14
+ # @param mod [Module]
15
+ #
16
+ def self.included(mod)
17
+ return unless mod <= TerminalShop::BaseModel
18
+
19
+ mod.extend(TerminalShop::RequestParameters::Converter)
20
+ mod.optional(:request_options, TerminalShop::RequestOptions)
21
+ end
22
+
23
+ # @private
24
+ #
25
+ module Converter
26
+ # @private
27
+ #
28
+ # @param params [Object]
29
+ #
30
+ # @return [Array(Object, Hash{Symbol=>Object})]
31
+ #
32
+ def dump_request(params)
33
+ case (dumped = dump(params))
34
+ in Hash
35
+ [dumped.except(:request_options), dumped[:request_options]]
36
+ else
37
+ [dumped, nil]
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ # Specify HTTP behaviour to use for a specific request. These options supplement
44
+ # or override those provided at the client level.
45
+ #
46
+ # When making a request, you can pass an actual {RequestOptions} instance, or
47
+ # simply pass a Hash with symbol keys matching the attributes on this class.
48
+ class RequestOptions < TerminalShop::BaseModel
49
+ # @private
50
+ #
51
+ # @param opts [TerminalShop::RequestOptions, Hash{Symbol=>Object}]
52
+ #
53
+ # @raise [ArgumentError]
54
+ #
55
+ def self.validate!(opts)
56
+ case opts
57
+ in TerminalShop::RequestOptions | Hash
58
+ opts.to_h.each_key do |k|
59
+ unless fields.include?(k)
60
+ raise ArgumentError.new("Request `opts` keys must be one of #{fields.keys}, got #{k.inspect}")
61
+ end
62
+ end
63
+ else
64
+ raise ArgumentError.new("Request `opts` must be a Hash or RequestOptions, got #{opts.inspect}")
65
+ end
66
+ end
67
+
68
+ # @!attribute idempotency_key
69
+ # Idempotency key to send with request and all associated retries. Will only be
70
+ # sent for write requests.
71
+ #
72
+ # @return [String, nil]
73
+ optional :idempotency_key, String
74
+
75
+ # @!attribute extra_query
76
+ # Extra query params to send with the request. These are `.merge`’d into any
77
+ # `query` given at the client level.
78
+ #
79
+ # @return [Hash{String=>Array<String>, String, nil}, nil]
80
+ optional :extra_query, TerminalShop::HashOf[TerminalShop::ArrayOf[String]]
81
+
82
+ # @!attribute extra_headers
83
+ # Extra headers to send with the request. These are `.merged`’d into any
84
+ # `extra_headers` given at the client level.
85
+ #
86
+ # @return [Hash{String=>String, nil}, nil]
87
+ optional :extra_headers, TerminalShop::HashOf[String, nil?: true]
88
+
89
+ # @!attribute extra_body
90
+ # Extra data to send with the request. These are deep merged into any data
91
+ # generated as part of the normal request.
92
+ #
93
+ # @return [Hash{Symbol=>Object}, nil]
94
+ optional :extra_body, TerminalShop::HashOf[TerminalShop::Unknown]
95
+
96
+ # @!attribute max_retries
97
+ # Maximum number of retries to attempt after a failed initial request.
98
+ #
99
+ # @return [Integer, nil]
100
+ optional :max_retries, Integer
101
+
102
+ # @!attribute timeout
103
+ # Request timeout in seconds.
104
+ #
105
+ # @return [Float, nil]
106
+ optional :timeout, Float
107
+
108
+ # @!parse
109
+ # # Returns a new instance of RequestOptions.
110
+ # #
111
+ # # @param values [Hash{Symbol=>Object}]
112
+ # #
113
+ # def initialize(values = {}) = super
114
+ end
115
+ end
@@ -0,0 +1,84 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TerminalShop
4
+ module Resources
5
+ class Address
6
+ # Create and add a shipping address to the current user.
7
+ #
8
+ # @param params [TerminalShop::Models::AddressCreateParams, Hash{Symbol=>Object}] .
9
+ #
10
+ # @option params [String] :city City of the address.
11
+ #
12
+ # @option params [String] :country ISO 3166-1 alpha-2 country code of the address.
13
+ #
14
+ # @option params [String] :name The recipient's name.
15
+ #
16
+ # @option params [String] :street1 Street of the address.
17
+ #
18
+ # @option params [String] :zip Zip code of the address.
19
+ #
20
+ # @option params [String] :phone Phone number of the recipient.
21
+ #
22
+ # @option params [String] :province Province or state of the address.
23
+ #
24
+ # @option params [String] :street2 Apartment, suite, etc. of the address.
25
+ #
26
+ # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
27
+ #
28
+ # @return [TerminalShop::Models::AddressCreateResponse]
29
+ #
30
+ def create(params)
31
+ parsed, options = TerminalShop::Models::AddressCreateParams.dump_request(params)
32
+ @client.request(
33
+ method: :post,
34
+ path: "address",
35
+ body: parsed,
36
+ model: TerminalShop::Models::AddressCreateResponse,
37
+ options: options
38
+ )
39
+ end
40
+
41
+ # Get the shipping addresses associated with the current user.
42
+ #
43
+ # @param params [TerminalShop::Models::AddressListParams, Hash{Symbol=>Object}] .
44
+ #
45
+ # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
46
+ #
47
+ # @return [TerminalShop::Models::AddressListResponse]
48
+ #
49
+ def list(params = {})
50
+ @client.request(
51
+ method: :get,
52
+ path: "address",
53
+ model: TerminalShop::Models::AddressListResponse,
54
+ options: params[:request_options]
55
+ )
56
+ end
57
+
58
+ # Delete a shipping address from the current user.
59
+ #
60
+ # @param id [String] ID of the shipping address to delete.
61
+ #
62
+ # @param params [TerminalShop::Models::AddressDeleteParams, Hash{Symbol=>Object}] .
63
+ #
64
+ # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
65
+ #
66
+ # @return [TerminalShop::Models::AddressDeleteResponse]
67
+ #
68
+ def delete(id, params = {})
69
+ @client.request(
70
+ method: :delete,
71
+ path: ["address/%0s", id],
72
+ model: TerminalShop::Models::AddressDeleteResponse,
73
+ options: params[:request_options]
74
+ )
75
+ end
76
+
77
+ # @param client [TerminalShop::Client]
78
+ #
79
+ def initialize(client:)
80
+ @client = client
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TerminalShop
4
+ module Resources
5
+ class App
6
+ # Create an app.
7
+ #
8
+ # @param params [TerminalShop::Models::AppCreateParams, Hash{Symbol=>Object}] .
9
+ #
10
+ # @option params [String] :id Unique object identifier. The format and length of IDs may change over time.
11
+ #
12
+ # @option params [String] :name Name of the app.
13
+ #
14
+ # @option params [String] :redirect_uri Redirect URI of the app.
15
+ #
16
+ # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
17
+ #
18
+ # @return [TerminalShop::Models::AppCreateResponse]
19
+ #
20
+ def create(params)
21
+ parsed, options = TerminalShop::Models::AppCreateParams.dump_request(params)
22
+ @client.request(
23
+ method: :post,
24
+ path: "app",
25
+ body: parsed,
26
+ model: TerminalShop::Models::AppCreateResponse,
27
+ options: options
28
+ )
29
+ end
30
+
31
+ # List the current user's registered apps.
32
+ #
33
+ # @param params [TerminalShop::Models::AppListParams, Hash{Symbol=>Object}] .
34
+ #
35
+ # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
36
+ #
37
+ # @return [TerminalShop::Models::AppListResponse]
38
+ #
39
+ def list(params = {})
40
+ @client.request(
41
+ method: :get,
42
+ path: "app",
43
+ model: TerminalShop::Models::AppListResponse,
44
+ options: params[:request_options]
45
+ )
46
+ end
47
+
48
+ # Delete the app with the given ID.
49
+ #
50
+ # @param id [String] ID of the app to delete.
51
+ #
52
+ # @param params [TerminalShop::Models::AppDeleteParams, Hash{Symbol=>Object}] .
53
+ #
54
+ # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
55
+ #
56
+ # @return [TerminalShop::Models::AppDeleteResponse]
57
+ #
58
+ def delete(id, params = {})
59
+ @client.request(
60
+ method: :delete,
61
+ path: ["app/%0s", id],
62
+ model: TerminalShop::Models::AppDeleteResponse,
63
+ options: params[:request_options]
64
+ )
65
+ end
66
+
67
+ # Get the app with the given ID.
68
+ #
69
+ # @param id [String] ID of the app to get.
70
+ #
71
+ # @param params [TerminalShop::Models::AppGetParams, Hash{Symbol=>Object}] .
72
+ #
73
+ # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
74
+ #
75
+ # @return [TerminalShop::Models::AppGetResponse]
76
+ #
77
+ def get(id, params = {})
78
+ @client.request(
79
+ method: :get,
80
+ path: ["app/%0s", id],
81
+ model: TerminalShop::Models::AppGetResponse,
82
+ options: params[:request_options]
83
+ )
84
+ end
85
+
86
+ # @param client [TerminalShop::Client]
87
+ #
88
+ def initialize(client:)
89
+ @client = client
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TerminalShop
4
+ module Resources
5
+ class Card
6
+ # Attach a credit card (tokenized via Stripe) to the current user.
7
+ #
8
+ # @param params [TerminalShop::Models::CardCreateParams, Hash{Symbol=>Object}] .
9
+ #
10
+ # @option params [String] :token Stripe card token. Learn how to
11
+ # [create one here](https://docs.stripe.com/api/tokens/create_card).
12
+ #
13
+ # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
14
+ #
15
+ # @return [TerminalShop::Models::CardCreateResponse]
16
+ #
17
+ def create(params)
18
+ parsed, options = TerminalShop::Models::CardCreateParams.dump_request(params)
19
+ @client.request(
20
+ method: :post,
21
+ path: "card",
22
+ body: parsed,
23
+ model: TerminalShop::Models::CardCreateResponse,
24
+ options: options
25
+ )
26
+ end
27
+
28
+ # List the credit cards associated with the current user.
29
+ #
30
+ # @param params [TerminalShop::Models::CardListParams, Hash{Symbol=>Object}] .
31
+ #
32
+ # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
33
+ #
34
+ # @return [TerminalShop::Models::CardListResponse]
35
+ #
36
+ def list(params = {})
37
+ @client.request(
38
+ method: :get,
39
+ path: "card",
40
+ model: TerminalShop::Models::CardListResponse,
41
+ options: params[:request_options]
42
+ )
43
+ end
44
+
45
+ # Delete a credit card associated with the current user.
46
+ #
47
+ # @param id [String] ID of the card to delete.
48
+ #
49
+ # @param params [TerminalShop::Models::CardDeleteParams, Hash{Symbol=>Object}] .
50
+ #
51
+ # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
52
+ #
53
+ # @return [TerminalShop::Models::CardDeleteResponse]
54
+ #
55
+ def delete(id, params = {})
56
+ @client.request(
57
+ method: :delete,
58
+ path: ["card/%0s", id],
59
+ model: TerminalShop::Models::CardDeleteResponse,
60
+ options: params[:request_options]
61
+ )
62
+ end
63
+
64
+ # Create a temporary URL for collecting credit card information for the current
65
+ # user.
66
+ #
67
+ # @param params [TerminalShop::Models::CardCollectParams, Hash{Symbol=>Object}] .
68
+ #
69
+ # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
70
+ #
71
+ # @return [TerminalShop::Models::CardCollectResponse]
72
+ #
73
+ def collect(params = {})
74
+ @client.request(
75
+ method: :post,
76
+ path: "card/collect",
77
+ model: TerminalShop::Models::CardCollectResponse,
78
+ options: params[:request_options]
79
+ )
80
+ end
81
+
82
+ # @param client [TerminalShop::Client]
83
+ #
84
+ def initialize(client:)
85
+ @client = client
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,112 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TerminalShop
4
+ module Resources
5
+ class Cart
6
+ # Convert the current user's cart to an order.
7
+ #
8
+ # @param params [TerminalShop::Models::CartConvertParams, Hash{Symbol=>Object}] .
9
+ #
10
+ # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
11
+ #
12
+ # @return [TerminalShop::Models::CartConvertResponse]
13
+ #
14
+ def convert(params = {})
15
+ @client.request(
16
+ method: :post,
17
+ path: "cart/convert",
18
+ model: TerminalShop::Models::CartConvertResponse,
19
+ options: params[:request_options]
20
+ )
21
+ end
22
+
23
+ # Get the current user's cart.
24
+ #
25
+ # @param params [TerminalShop::Models::CartGetParams, Hash{Symbol=>Object}] .
26
+ #
27
+ # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
28
+ #
29
+ # @return [TerminalShop::Models::CartGetResponse]
30
+ #
31
+ def get(params = {})
32
+ @client.request(
33
+ method: :get,
34
+ path: "cart",
35
+ model: TerminalShop::Models::CartGetResponse,
36
+ options: params[:request_options]
37
+ )
38
+ end
39
+
40
+ # Set the shipping address for the current user's cart.
41
+ #
42
+ # @param params [TerminalShop::Models::CartSetAddressParams, Hash{Symbol=>Object}] .
43
+ #
44
+ # @option params [String] :address_id ID of the shipping address to set for the current user's cart.
45
+ #
46
+ # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
47
+ #
48
+ # @return [TerminalShop::Models::CartSetAddressResponse]
49
+ #
50
+ def set_address(params)
51
+ parsed, options = TerminalShop::Models::CartSetAddressParams.dump_request(params)
52
+ @client.request(
53
+ method: :put,
54
+ path: "cart/address",
55
+ body: parsed,
56
+ model: TerminalShop::Models::CartSetAddressResponse,
57
+ options: options
58
+ )
59
+ end
60
+
61
+ # Set the credit card for the current user's cart.
62
+ #
63
+ # @param params [TerminalShop::Models::CartSetCardParams, Hash{Symbol=>Object}] .
64
+ #
65
+ # @option params [String] :card_id ID of the credit card to set for the current user's cart.
66
+ #
67
+ # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
68
+ #
69
+ # @return [TerminalShop::Models::CartSetCardResponse]
70
+ #
71
+ def set_card(params)
72
+ parsed, options = TerminalShop::Models::CartSetCardParams.dump_request(params)
73
+ @client.request(
74
+ method: :put,
75
+ path: "cart/card",
76
+ body: parsed,
77
+ model: TerminalShop::Models::CartSetCardResponse,
78
+ options: options
79
+ )
80
+ end
81
+
82
+ # Add an item to the current user's cart.
83
+ #
84
+ # @param params [TerminalShop::Models::CartSetItemParams, Hash{Symbol=>Object}] .
85
+ #
86
+ # @option params [String] :product_variant_id ID of the product variant to add to the cart.
87
+ #
88
+ # @option params [Integer] :quantity Quantity of the item to add to the cart.
89
+ #
90
+ # @option params [TerminalShop::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
91
+ #
92
+ # @return [TerminalShop::Models::CartSetItemResponse]
93
+ #
94
+ def set_item(params)
95
+ parsed, options = TerminalShop::Models::CartSetItemParams.dump_request(params)
96
+ @client.request(
97
+ method: :put,
98
+ path: "cart/item",
99
+ body: parsed,
100
+ model: TerminalShop::Models::CartSetItemResponse,
101
+ options: options
102
+ )
103
+ end
104
+
105
+ # @param client [TerminalShop::Client]
106
+ #
107
+ def initialize(client:)
108
+ @client = client
109
+ end
110
+ end
111
+ end
112
+ end