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,19 +1,21 @@
1
1
  # typed: strong
2
2
 
3
3
  module TerminalShop
4
+ # @api private
4
5
  module Converter
5
- abstract!
6
-
7
6
  Input = T.type_alias { T.any(TerminalShop::Converter, T::Class[T.anything]) }
8
7
 
8
+ # @api private
9
9
  sig { overridable.params(value: T.anything).returns(T.anything) }
10
10
  def coerce(value)
11
11
  end
12
12
 
13
+ # @api private
13
14
  sig { overridable.params(value: T.anything).returns(T.anything) }
14
15
  def dump(value)
15
16
  end
16
17
 
18
+ # @api private
17
19
  sig do
18
20
  overridable
19
21
  .params(value: T.anything)
@@ -23,6 +25,7 @@ module TerminalShop
23
25
  end
24
26
 
25
27
  class << self
28
+ # @api private
26
29
  sig do
27
30
  params(
28
31
  spec: T.any(
@@ -40,43 +43,69 @@ module TerminalShop
40
43
  def self.type_info(spec)
41
44
  end
42
45
 
46
+ # @api private
47
+ #
48
+ # Based on `target`, transform `value` into `target`, to the extent possible:
49
+ #
50
+ # 1. if the given `value` conforms to `target` already, return the given `value`
51
+ # 2. if it's possible and safe to convert the given `value` to `target`, then the
52
+ # converted value
53
+ # 3. otherwise, the given `value` unaltered
43
54
  sig { params(target: TerminalShop::Converter::Input, value: T.anything).returns(T.anything) }
44
55
  def self.coerce(target, value)
45
56
  end
46
57
 
58
+ # @api private
47
59
  sig { params(target: TerminalShop::Converter::Input, value: T.anything).returns(T.anything) }
48
60
  def self.dump(target, value)
49
61
  end
50
62
 
63
+ # @api private
64
+ #
65
+ # The underlying algorithm for computing maximal compatibility is subject to
66
+ # future improvements.
67
+ #
68
+ # Similar to `#.coerce`, used to determine the best union variant to decode into.
69
+ #
70
+ # 1. determine if strict-ish coercion is possible
71
+ # 2. return either result of successful coercion or if loose coercion is possible
72
+ # 3. return a score for recursively tallied count for fields that can be coerced
51
73
  sig { params(target: TerminalShop::Converter::Input, value: T.anything).returns(T.anything) }
52
74
  def self.try_strict_coerce(target, value)
53
75
  end
54
76
  end
55
77
  end
56
78
 
79
+ # @api private
80
+ #
81
+ # When we don't know what to expect for the value.
57
82
  class Unknown
58
- abstract!
59
-
60
83
  extend TerminalShop::Converter
61
84
 
62
- sig { params(other: T.anything).returns(T::Boolean) }
85
+ abstract!
86
+ final!
87
+
88
+ sig(:final) { params(other: T.anything).returns(T::Boolean) }
63
89
  def self.===(other)
64
90
  end
65
91
 
66
- sig { params(other: T.anything).returns(T::Boolean) }
92
+ sig(:final) { params(other: T.anything).returns(T::Boolean) }
67
93
  def self.==(other)
68
94
  end
69
95
 
70
96
  class << self
71
- sig { override.params(value: T.anything).returns(T.anything) }
97
+ # @api private
98
+ sig(:final) { override.params(value: T.anything).returns(T.anything) }
72
99
  def coerce(value)
73
100
  end
74
101
 
75
- sig { override.params(value: T.anything).returns(T.anything) }
102
+ # @api private
103
+ sig(:final) { override.params(value: T.anything).returns(T.anything) }
76
104
  def dump(value)
77
105
  end
78
106
 
79
- sig do
107
+ # @api private
108
+ sig(:final) do
80
109
  override
81
110
  .params(value: T.anything)
82
111
  .returns(T.any([T::Boolean, T.anything, NilClass], [T::Boolean, T::Boolean, Integer]))
@@ -86,29 +115,40 @@ module TerminalShop
86
115
  end
87
116
  end
88
117
 
118
+ # @api private
119
+ #
120
+ # Ruby has no Boolean class; this is something for models to refer to.
89
121
  class BooleanModel
90
- abstract!
91
-
92
122
  extend TerminalShop::Converter
93
123
 
94
- sig { params(other: T.anything).returns(T::Boolean) }
124
+ abstract!
125
+ final!
126
+
127
+ sig(:final) { params(other: T.anything).returns(T::Boolean) }
95
128
  def self.===(other)
96
129
  end
97
130
 
98
- sig { params(other: T.anything).returns(T::Boolean) }
131
+ sig(:final) { params(other: T.anything).returns(T::Boolean) }
99
132
  def self.==(other)
100
133
  end
101
134
 
102
135
  class << self
103
- sig { override.params(value: T.any(T::Boolean, T.anything)).returns(T.any(T::Boolean, T.anything)) }
136
+ # @api private
137
+ sig(:final) do
138
+ override.params(value: T.any(T::Boolean, T.anything)).returns(T.any(T::Boolean, T.anything))
139
+ end
104
140
  def coerce(value)
105
141
  end
106
142
 
107
- sig { override.params(value: T.any(T::Boolean, T.anything)).returns(T.any(T::Boolean, T.anything)) }
143
+ # @api private
144
+ sig(:final) do
145
+ override.params(value: T.any(T::Boolean, T.anything)).returns(T.any(T::Boolean, T.anything))
146
+ end
108
147
  def dump(value)
109
148
  end
110
149
 
111
- sig do
150
+ # @api private
151
+ sig(:final) do
112
152
  override
113
153
  .params(value: T.anything)
114
154
  .returns(T.any([T::Boolean, T.anything, NilClass], [T::Boolean, T::Boolean, Integer]))
@@ -118,131 +158,164 @@ module TerminalShop
118
158
  end
119
159
  end
120
160
 
121
- class Enum
122
- abstract!
123
-
124
- extend TerminalShop::Converter
161
+ # @api private
162
+ #
163
+ # A value from among a specified list of options. OpenAPI enum values map to Ruby
164
+ # values in the SDK as follows:
165
+ #
166
+ # 1. boolean => true | false
167
+ # 2. integer => Integer
168
+ # 3. float => Float
169
+ # 4. string => Symbol
170
+ #
171
+ # We can therefore convert string values to Symbols, but can't convert other
172
+ # values safely.
173
+ module Enum
174
+ include TerminalShop::Converter
125
175
 
126
- class << self
127
- sig { overridable.returns(T::Array[T.any(NilClass, T::Boolean, Integer, Float, Symbol)]) }
128
- def values
129
- end
176
+ # All of the valid Symbol values for this enum.
177
+ sig { overridable.returns(T::Array[T.any(NilClass, T::Boolean, Integer, Float, Symbol)]) }
178
+ def values
179
+ end
130
180
 
131
- sig { void }
132
- private def finalize!
133
- end
181
+ # @api private
182
+ #
183
+ # Guard against thread safety issues by instantiating `@values`.
184
+ sig { void }
185
+ private def finalize!
134
186
  end
135
187
 
136
188
  sig { params(other: T.anything).returns(T::Boolean) }
137
- def self.===(other)
189
+ def ===(other)
138
190
  end
139
191
 
140
192
  sig { params(other: T.anything).returns(T::Boolean) }
141
- def self.==(other)
193
+ def ==(other)
142
194
  end
143
195
 
144
- class << self
145
- sig { override.params(value: T.any(String, Symbol, T.anything)).returns(T.any(Symbol, T.anything)) }
146
- def coerce(value)
147
- end
196
+ # @api private
197
+ sig { override.params(value: T.any(String, Symbol, T.anything)).returns(T.any(Symbol, T.anything)) }
198
+ def coerce(value)
199
+ end
148
200
 
149
- sig { override.params(value: T.any(Symbol, T.anything)).returns(T.any(Symbol, T.anything)) }
150
- def dump(value)
151
- end
201
+ # @api private
202
+ sig { override.params(value: T.any(Symbol, T.anything)).returns(T.any(Symbol, T.anything)) }
203
+ def dump(value)
204
+ end
152
205
 
153
- sig do
154
- override
155
- .params(value: T.anything)
156
- .returns(T.any([T::Boolean, T.anything, NilClass], [T::Boolean, T::Boolean, Integer]))
157
- end
158
- def try_strict_coerce(value)
159
- end
206
+ # @api private
207
+ sig do
208
+ override
209
+ .params(value: T.anything)
210
+ .returns(T.any([T::Boolean, T.anything, NilClass], [T::Boolean, T::Boolean, Integer]))
211
+ end
212
+ def try_strict_coerce(value)
160
213
  end
161
214
  end
162
215
 
163
- class Union
164
- abstract!
216
+ # @api private
217
+ module Union
218
+ include TerminalShop::Converter
165
219
 
166
- extend TerminalShop::Converter
220
+ # @api private
221
+ #
222
+ # All of the specified variant info for this union.
223
+ sig { returns(T::Array[[T.nilable(Symbol), T.proc.returns(TerminalShop::Converter::Input)]]) }
224
+ private def known_variants
225
+ end
167
226
 
168
- class << self
169
- sig { returns(T::Array[[T.nilable(Symbol), Proc]]) }
170
- private def known_variants
171
- end
227
+ # @api private
228
+ sig { returns(T::Array[[T.nilable(Symbol), T.anything]]) }
229
+ protected def derefed_variants
230
+ end
172
231
 
173
- sig { overridable.returns(T::Array[[T.nilable(Symbol), T.anything]]) }
174
- protected def variants
175
- end
232
+ # All of the specified variants for this union.
233
+ sig { overridable.returns(T::Array[T.anything]) }
234
+ def variants
235
+ end
176
236
 
177
- sig { params(property: Symbol).void }
178
- private def discriminator(property)
179
- end
237
+ # @api private
238
+ sig { params(property: Symbol).void }
239
+ private def discriminator(property)
240
+ end
180
241
 
181
- sig do
182
- params(
183
- key: T.any(
184
- Symbol,
185
- T::Hash[Symbol, T.anything],
186
- T.proc.returns(TerminalShop::Converter::Input),
187
- TerminalShop::Converter::Input
188
- ),
189
- spec: T.any(
190
- T::Hash[Symbol, T.anything],
191
- T.proc.returns(TerminalShop::Converter::Input),
192
- TerminalShop::Converter::Input
193
- )
194
- )
195
- .void
196
- end
197
- private def variant(key, spec = nil)
198
- end
242
+ # @api private
243
+ sig do
244
+ params(
245
+ key: T.any(Symbol, TerminalShop::Util::AnyHash, T.proc.returns(T.anything), T.anything),
246
+ spec: T.any(TerminalShop::Util::AnyHash, T.proc.returns(T.anything), T.anything)
247
+ )
248
+ .void
249
+ end
250
+ private def variant(key, spec = nil)
251
+ end
199
252
 
200
- sig { params(value: T.anything).returns(T.nilable(TerminalShop::Converter::Input)) }
201
- private def resolve_variant(value)
202
- end
253
+ # @api private
254
+ sig { params(value: T.anything).returns(T.nilable(T.anything)) }
255
+ private def resolve_variant(value)
203
256
  end
204
257
 
205
258
  sig { params(other: T.anything).returns(T::Boolean) }
206
- def self.===(other)
259
+ def ===(other)
207
260
  end
208
261
 
209
262
  sig { params(other: T.anything).returns(T::Boolean) }
210
- def self.==(other)
263
+ def ==(other)
211
264
  end
212
265
 
213
- class << self
214
- sig { override.params(value: T.anything).returns(T.anything) }
215
- def coerce(value)
216
- end
266
+ # @api private
267
+ sig { override.params(value: T.anything).returns(T.anything) }
268
+ def coerce(value)
269
+ end
217
270
 
218
- sig { override.params(value: T.anything).returns(T.anything) }
219
- def dump(value)
220
- end
271
+ # @api private
272
+ sig { override.params(value: T.anything).returns(T.anything) }
273
+ def dump(value)
274
+ end
221
275
 
222
- sig do
223
- override
224
- .params(value: T.anything)
225
- .returns(T.any([T::Boolean, T.anything, NilClass], [T::Boolean, T::Boolean, Integer]))
226
- end
227
- def try_strict_coerce(value)
228
- end
276
+ # @api private
277
+ sig do
278
+ override
279
+ .params(value: T.anything)
280
+ .returns(T.any([T::Boolean, T.anything, NilClass], [T::Boolean, T::Boolean, Integer]))
281
+ end
282
+ def try_strict_coerce(value)
229
283
  end
230
284
  end
231
285
 
286
+ # @api private
287
+ #
288
+ # Array of items of a given type.
232
289
  class ArrayOf
290
+ include TerminalShop::Converter
291
+
233
292
  abstract!
293
+ final!
234
294
 
235
- include TerminalShop::Converter
295
+ sig(:final) do
296
+ params(
297
+ type_info: T.any(
298
+ TerminalShop::Util::AnyHash,
299
+ T.proc.returns(TerminalShop::Converter::Input),
300
+ TerminalShop::Converter::Input
301
+ ),
302
+ spec: TerminalShop::Util::AnyHash
303
+ )
304
+ .returns(T.attached_class)
305
+ end
306
+ def self.[](type_info, spec = {})
307
+ end
236
308
 
237
- sig { params(other: T.anything).returns(T::Boolean) }
309
+ sig(:final) { params(other: T.anything).returns(T::Boolean) }
238
310
  def ===(other)
239
311
  end
240
312
 
241
- sig { params(other: T.anything).returns(T::Boolean) }
313
+ sig(:final) { params(other: T.anything).returns(T::Boolean) }
242
314
  def ==(other)
243
315
  end
244
316
 
245
- sig do
317
+ # @api private
318
+ sig(:final) do
246
319
  override
247
320
  .params(value: T.any(T::Enumerable[T.anything], T.anything))
248
321
  .returns(T.any(T::Array[T.anything], T.anything))
@@ -250,7 +323,8 @@ module TerminalShop
250
323
  def coerce(value)
251
324
  end
252
325
 
253
- sig do
326
+ # @api private
327
+ sig(:final) do
254
328
  override
255
329
  .params(value: T.any(T::Enumerable[T.anything], T.anything))
256
330
  .returns(T.any(T::Array[T.anything], T.anything))
@@ -258,7 +332,8 @@ module TerminalShop
258
332
  def dump(value)
259
333
  end
260
334
 
261
- sig do
335
+ # @api private
336
+ sig(:final) do
262
337
  override
263
338
  .params(value: T.anything)
264
339
  .returns(T.any([T::Boolean, T.anything, NilClass], [T::Boolean, T::Boolean, Integer]))
@@ -266,55 +341,78 @@ module TerminalShop
266
341
  def try_strict_coerce(value)
267
342
  end
268
343
 
269
- sig { returns(TerminalShop::Converter::Input) }
344
+ # @api private
345
+ sig(:final) { returns(T.anything) }
270
346
  protected def item_type
271
347
  end
272
348
 
273
- sig do
349
+ # @api private
350
+ sig(:final) do
274
351
  params(
275
352
  type_info: T.any(
276
- T::Hash[Symbol, T.anything],
353
+ TerminalShop::Util::AnyHash,
277
354
  T.proc.returns(TerminalShop::Converter::Input),
278
355
  TerminalShop::Converter::Input
279
356
  ),
280
- spec: T::Hash[Symbol, T.anything]
357
+ spec: TerminalShop::Util::AnyHash
281
358
  )
282
- .returns(T.attached_class)
359
+ .void
283
360
  end
284
- def self.new(type_info, spec = {})
361
+ def initialize(type_info, spec = {})
285
362
  end
286
363
  end
287
364
 
365
+ # @api private
366
+ #
367
+ # Hash of items of a given type.
288
368
  class HashOf
369
+ include TerminalShop::Converter
370
+
289
371
  abstract!
372
+ final!
290
373
 
291
- include TerminalShop::Converter
374
+ sig(:final) do
375
+ params(
376
+ type_info: T.any(
377
+ TerminalShop::Util::AnyHash,
378
+ T.proc.returns(TerminalShop::Converter::Input),
379
+ TerminalShop::Converter::Input
380
+ ),
381
+ spec: TerminalShop::Util::AnyHash
382
+ )
383
+ .returns(T.attached_class)
384
+ end
385
+ def self.[](type_info, spec = {})
386
+ end
292
387
 
293
- sig { params(other: T.anything).returns(T::Boolean) }
388
+ sig(:final) { params(other: T.anything).returns(T::Boolean) }
294
389
  def ===(other)
295
390
  end
296
391
 
297
- sig { params(other: T.anything).returns(T::Boolean) }
392
+ sig(:final) { params(other: T.anything).returns(T::Boolean) }
298
393
  def ==(other)
299
394
  end
300
395
 
301
- sig do
396
+ # @api private
397
+ sig(:final) do
302
398
  override
303
399
  .params(value: T.any(T::Hash[T.anything, T.anything], T.anything))
304
- .returns(T.any(T::Hash[Symbol, T.anything], T.anything))
400
+ .returns(T.any(TerminalShop::Util::AnyHash, T.anything))
305
401
  end
306
402
  def coerce(value)
307
403
  end
308
404
 
309
- sig do
405
+ # @api private
406
+ sig(:final) do
310
407
  override
311
408
  .params(value: T.any(T::Hash[T.anything, T.anything], T.anything))
312
- .returns(T.any(T::Hash[Symbol, T.anything], T.anything))
409
+ .returns(T.any(TerminalShop::Util::AnyHash, T.anything))
313
410
  end
314
411
  def dump(value)
315
412
  end
316
413
 
317
- sig do
414
+ # @api private
415
+ sig(:final) do
318
416
  override
319
417
  .params(value: T.anything)
320
418
  .returns(T.any([T::Boolean, T.anything, NilClass], [T::Boolean, T::Boolean, Integer]))
@@ -322,33 +420,39 @@ module TerminalShop
322
420
  def try_strict_coerce(value)
323
421
  end
324
422
 
325
- sig { returns(TerminalShop::Converter::Input) }
423
+ # @api private
424
+ sig(:final) { returns(T.anything) }
326
425
  protected def item_type
327
426
  end
328
427
 
329
- sig do
428
+ # @api private
429
+ sig(:final) do
330
430
  params(
331
431
  type_info: T.any(
332
- T::Hash[Symbol, T.anything],
432
+ TerminalShop::Util::AnyHash,
333
433
  T.proc.returns(TerminalShop::Converter::Input),
334
434
  TerminalShop::Converter::Input
335
435
  ),
336
- spec: T::Hash[Symbol, T.anything]
436
+ spec: TerminalShop::Util::AnyHash
337
437
  )
338
- .returns(T.attached_class)
438
+ .void
339
439
  end
340
- def self.new(type_info, spec = {})
440
+ def initialize(type_info, spec = {})
341
441
  end
342
442
  end
343
443
 
344
444
  class BaseModel
345
- abstract!
346
-
347
445
  extend TerminalShop::Converter
348
446
 
447
+ abstract!
448
+
349
449
  KnownFieldShape = T.type_alias { {mode: T.nilable(Symbol), required: T::Boolean} }
350
450
 
351
451
  class << self
452
+ # @api private
453
+ #
454
+ # Assumes superclass fields are totally defined before fields are accessed /
455
+ # defined on subclasses.
352
456
  sig do
353
457
  returns(
354
458
  T::Hash[
@@ -363,6 +467,12 @@ module TerminalShop
363
467
  def known_fields
364
468
  end
365
469
 
470
+ # @api private
471
+ sig { returns(T::Hash[Symbol, Symbol]) }
472
+ def reverse_map
473
+ end
474
+
475
+ # @api private
366
476
  sig do
367
477
  returns(
368
478
  T::Hash[Symbol,
@@ -372,10 +482,12 @@ module TerminalShop
372
482
  def fields
373
483
  end
374
484
 
485
+ # @api private
375
486
  sig { returns(T::Hash[Symbol, T.proc.returns(T::Class[T.anything])]) }
376
487
  def defaults
377
488
  end
378
489
 
490
+ # @api private
379
491
  sig do
380
492
  params(
381
493
  name_sym: Symbol,
@@ -391,47 +503,56 @@ module TerminalShop
391
503
  T.proc.returns(TerminalShop::Converter::Input),
392
504
  TerminalShop::Converter::Input
393
505
  ),
394
- spec: T::Hash[Symbol, T.anything]
506
+ spec: TerminalShop::Util::AnyHash
395
507
  )
396
508
  .void
397
509
  end
398
510
  private def add_field(name_sym, required:, type_info:, spec:)
399
511
  end
400
512
 
513
+ # @api private
401
514
  sig do
402
515
  params(
403
516
  name_sym: Symbol,
404
517
  type_info: T.any(
405
- T::Hash[Symbol, T.anything],
518
+ TerminalShop::Util::AnyHash,
406
519
  T.proc.returns(TerminalShop::Converter::Input),
407
520
  TerminalShop::Converter::Input
408
521
  ),
409
- spec: T::Hash[Symbol, T.anything]
522
+ spec: TerminalShop::Util::AnyHash
410
523
  )
411
524
  .void
412
525
  end
413
526
  def required(name_sym, type_info, spec = {})
414
527
  end
415
528
 
529
+ # @api private
416
530
  sig do
417
531
  params(
418
532
  name_sym: Symbol,
419
533
  type_info: T.any(
420
- T::Hash[Symbol, T.anything],
534
+ TerminalShop::Util::AnyHash,
421
535
  T.proc.returns(TerminalShop::Converter::Input),
422
536
  TerminalShop::Converter::Input
423
537
  ),
424
- spec: T::Hash[Symbol, T.anything]
538
+ spec: TerminalShop::Util::AnyHash
425
539
  )
426
540
  .void
427
541
  end
428
542
  def optional(name_sym, type_info, spec = {})
429
543
  end
430
544
 
545
+ # @api private
546
+ #
547
+ # `request_only` attributes not excluded from `.#coerce` when receiving responses
548
+ # even if well behaved servers should not send them
431
549
  sig { params(blk: T.proc.void).void }
432
550
  private def request_only(&blk)
433
551
  end
434
552
 
553
+ # @api private
554
+ #
555
+ # `response_only` attributes are omitted from `.#dump` when making requests
435
556
  sig { params(blk: T.proc.void).void }
436
557
  private def response_only(&blk)
437
558
  end
@@ -442,6 +563,7 @@ module TerminalShop
442
563
  end
443
564
 
444
565
  class << self
566
+ # @api private
445
567
  sig do
446
568
  override
447
569
  .params(value: T.any(TerminalShop::BaseModel, T::Hash[T.anything, T.anything], T.anything))
@@ -450,6 +572,7 @@ module TerminalShop
450
572
  def coerce(value)
451
573
  end
452
574
 
575
+ # @api private
453
576
  sig do
454
577
  override
455
578
  .params(value: T.any(T.attached_class, T.anything))
@@ -458,6 +581,7 @@ module TerminalShop
458
581
  def dump(value)
459
582
  end
460
583
 
584
+ # @api private
461
585
  sig do
462
586
  override
463
587
  .params(value: T.anything)
@@ -467,20 +591,45 @@ module TerminalShop
467
591
  end
468
592
  end
469
593
 
594
+ # Returns the raw value associated with the given key, if found. Otherwise, nil is
595
+ # returned.
596
+ #
597
+ # It is valid to lookup keys that are not in the API spec, for example to access
598
+ # undocumented features. This method does not parse response data into
599
+ # higher-level types. Lookup by anything other than a Symbol is an ArgumentError.
470
600
  sig { params(key: Symbol).returns(T.nilable(T.anything)) }
471
601
  def [](key)
472
602
  end
473
603
 
474
- sig { overridable.returns(T::Hash[Symbol, T.anything]) }
604
+ # Returns a Hash of the data underlying this object. O(1)
605
+ #
606
+ # Keys are Symbols and values are the raw values from the response. The return
607
+ # value indicates which values were ever set on the object. i.e. there will be a
608
+ # key in this hash if they ever were, even if the set value was nil.
609
+ #
610
+ # This method is not recursive. The returned value is shared by the object, so it
611
+ # should not be mutated.
612
+ sig { overridable.returns(TerminalShop::Util::AnyHash) }
475
613
  def to_h
476
614
  end
477
615
 
478
- alias_method :to_hash, :to_h
616
+ # Returns a Hash of the data underlying this object. O(1)
617
+ #
618
+ # Keys are Symbols and values are the raw values from the response. The return
619
+ # value indicates which values were ever set on the object. i.e. there will be a
620
+ # key in this hash if they ever were, even if the set value was nil.
621
+ #
622
+ # This method is not recursive. The returned value is shared by the object, so it
623
+ # should not be mutated.
624
+ sig { overridable.returns(TerminalShop::Util::AnyHash) }
625
+ def to_hash
626
+ end
479
627
 
480
- sig { params(keys: T.nilable(T::Array[Symbol])).returns(T::Hash[Symbol, T.anything]) }
628
+ sig { params(keys: T.nilable(T::Array[Symbol])).returns(TerminalShop::Util::AnyHash) }
481
629
  def deconstruct_keys(keys)
482
630
  end
483
631
 
632
+ # Create a new instance of a model.
484
633
  sig { params(data: T.any(T::Hash[Symbol, T.anything], T.self_type)).returns(T.attached_class) }
485
634
  def self.new(data = {})
486
635
  end