apiwork 0.0.0.pre → 0.1.1

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 (202) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +2 -2
  3. data/README.md +117 -1
  4. data/Rakefile +5 -3
  5. data/app/controllers/apiwork/errors_controller.rb +13 -0
  6. data/app/controllers/apiwork/exports_controller.rb +22 -0
  7. data/lib/apiwork/abstractable.rb +26 -0
  8. data/lib/apiwork/adapter/base.rb +369 -0
  9. data/lib/apiwork/adapter/builder/api/base.rb +66 -0
  10. data/lib/apiwork/adapter/builder/contract/base.rb +86 -0
  11. data/lib/apiwork/adapter/capability/api/base.rb +51 -0
  12. data/lib/apiwork/adapter/capability/api/scope.rb +64 -0
  13. data/lib/apiwork/adapter/capability/base.rb +291 -0
  14. data/lib/apiwork/adapter/capability/contract/base.rb +37 -0
  15. data/lib/apiwork/adapter/capability/contract/scope.rb +110 -0
  16. data/lib/apiwork/adapter/capability/operation/base.rb +172 -0
  17. data/lib/apiwork/adapter/capability/operation/metadata_shape.rb +165 -0
  18. data/lib/apiwork/adapter/capability/result.rb +21 -0
  19. data/lib/apiwork/adapter/capability/runner.rb +56 -0
  20. data/lib/apiwork/adapter/capability/transformer/request/base.rb +72 -0
  21. data/lib/apiwork/adapter/capability/transformer/response/base.rb +45 -0
  22. data/lib/apiwork/adapter/registry.rb +16 -0
  23. data/lib/apiwork/adapter/serializer/error/base.rb +72 -0
  24. data/lib/apiwork/adapter/serializer/error/default/api_builder.rb +32 -0
  25. data/lib/apiwork/adapter/serializer/error/default.rb +37 -0
  26. data/lib/apiwork/adapter/serializer/resource/base.rb +84 -0
  27. data/lib/apiwork/adapter/serializer/resource/default/contract_builder.rb +209 -0
  28. data/lib/apiwork/adapter/serializer/resource/default.rb +39 -0
  29. data/lib/apiwork/adapter/standard/capability/filtering/api_builder.rb +75 -0
  30. data/lib/apiwork/adapter/standard/capability/filtering/constants.rb +37 -0
  31. data/lib/apiwork/adapter/standard/capability/filtering/contract_builder.rb +193 -0
  32. data/lib/apiwork/adapter/standard/capability/filtering/operation/filter/builder.rb +47 -0
  33. data/lib/apiwork/adapter/standard/capability/filtering/operation/filter/operator_builder.rb +36 -0
  34. data/lib/apiwork/adapter/standard/capability/filtering/operation/filter.rb +462 -0
  35. data/lib/apiwork/adapter/standard/capability/filtering/operation.rb +22 -0
  36. data/lib/apiwork/adapter/standard/capability/filtering/request_transformer.rb +47 -0
  37. data/lib/apiwork/adapter/standard/capability/filtering.rb +18 -0
  38. data/lib/apiwork/adapter/standard/capability/including/contract_builder.rb +169 -0
  39. data/lib/apiwork/adapter/standard/capability/including/operation.rb +20 -0
  40. data/lib/apiwork/adapter/standard/capability/including.rb +16 -0
  41. data/lib/apiwork/adapter/standard/capability/pagination/api_builder.rb +34 -0
  42. data/lib/apiwork/adapter/standard/capability/pagination/contract_builder.rb +35 -0
  43. data/lib/apiwork/adapter/standard/capability/pagination/operation/paginate/cursor.rb +84 -0
  44. data/lib/apiwork/adapter/standard/capability/pagination/operation/paginate/offset.rb +66 -0
  45. data/lib/apiwork/adapter/standard/capability/pagination/operation/paginate.rb +24 -0
  46. data/lib/apiwork/adapter/standard/capability/pagination/operation.rb +24 -0
  47. data/lib/apiwork/adapter/standard/capability/pagination.rb +21 -0
  48. data/lib/apiwork/adapter/standard/capability/sorting/api_builder.rb +19 -0
  49. data/lib/apiwork/adapter/standard/capability/sorting/contract_builder.rb +84 -0
  50. data/lib/apiwork/adapter/standard/capability/sorting/operation/sort.rb +83 -0
  51. data/lib/apiwork/adapter/standard/capability/sorting/operation.rb +22 -0
  52. data/lib/apiwork/adapter/standard/capability/sorting.rb +17 -0
  53. data/lib/apiwork/adapter/standard/capability/writing/constants.rb +15 -0
  54. data/lib/apiwork/adapter/standard/capability/writing/contract_builder.rb +253 -0
  55. data/lib/apiwork/adapter/standard/capability/writing/operation/issue_mapper.rb +210 -0
  56. data/lib/apiwork/adapter/standard/capability/writing/operation.rb +32 -0
  57. data/lib/apiwork/adapter/standard/capability/writing/request_transformer.rb +37 -0
  58. data/lib/apiwork/adapter/standard/capability/writing.rb +17 -0
  59. data/lib/apiwork/adapter/standard/includes_resolver.rb +106 -0
  60. data/lib/apiwork/adapter/standard.rb +22 -0
  61. data/lib/apiwork/adapter/wrapper/base.rb +70 -0
  62. data/lib/apiwork/adapter/wrapper/collection/base.rb +60 -0
  63. data/lib/apiwork/adapter/wrapper/collection/default.rb +47 -0
  64. data/lib/apiwork/adapter/wrapper/error/base.rb +30 -0
  65. data/lib/apiwork/adapter/wrapper/error/default.rb +34 -0
  66. data/lib/apiwork/adapter/wrapper/member/base.rb +58 -0
  67. data/lib/apiwork/adapter/wrapper/member/default.rb +40 -0
  68. data/lib/apiwork/adapter/wrapper/shape.rb +203 -0
  69. data/lib/apiwork/adapter.rb +50 -0
  70. data/lib/apiwork/api/base.rb +802 -0
  71. data/lib/apiwork/api/element.rb +110 -0
  72. data/lib/apiwork/api/enum_registry/definition.rb +51 -0
  73. data/lib/apiwork/api/enum_registry.rb +98 -0
  74. data/lib/apiwork/api/info/contact.rb +67 -0
  75. data/lib/apiwork/api/info/license.rb +50 -0
  76. data/lib/apiwork/api/info/server.rb +50 -0
  77. data/lib/apiwork/api/info.rb +221 -0
  78. data/lib/apiwork/api/object.rb +235 -0
  79. data/lib/apiwork/api/registry.rb +33 -0
  80. data/lib/apiwork/api/representation_registry.rb +76 -0
  81. data/lib/apiwork/api/resource/action.rb +41 -0
  82. data/lib/apiwork/api/resource.rb +648 -0
  83. data/lib/apiwork/api/router.rb +104 -0
  84. data/lib/apiwork/api/type_registry/definition.rb +117 -0
  85. data/lib/apiwork/api/type_registry.rb +99 -0
  86. data/lib/apiwork/api/union.rb +49 -0
  87. data/lib/apiwork/api.rb +85 -0
  88. data/lib/apiwork/configurable.rb +71 -0
  89. data/lib/apiwork/configuration/option.rb +125 -0
  90. data/lib/apiwork/configuration/validatable.rb +25 -0
  91. data/lib/apiwork/configuration.rb +95 -0
  92. data/lib/apiwork/configuration_error.rb +6 -0
  93. data/lib/apiwork/constraint_error.rb +20 -0
  94. data/lib/apiwork/contract/action/request.rb +79 -0
  95. data/lib/apiwork/contract/action/response.rb +87 -0
  96. data/lib/apiwork/contract/action.rb +258 -0
  97. data/lib/apiwork/contract/base.rb +714 -0
  98. data/lib/apiwork/contract/element.rb +130 -0
  99. data/lib/apiwork/contract/object/coercer.rb +194 -0
  100. data/lib/apiwork/contract/object/deserializer.rb +101 -0
  101. data/lib/apiwork/contract/object/transformer.rb +95 -0
  102. data/lib/apiwork/contract/object/validator/result.rb +27 -0
  103. data/lib/apiwork/contract/object/validator.rb +734 -0
  104. data/lib/apiwork/contract/object.rb +566 -0
  105. data/lib/apiwork/contract/request_parser/result.rb +25 -0
  106. data/lib/apiwork/contract/request_parser.rb +72 -0
  107. data/lib/apiwork/contract/response_parser/result.rb +25 -0
  108. data/lib/apiwork/contract/response_parser.rb +35 -0
  109. data/lib/apiwork/contract/union.rb +56 -0
  110. data/lib/apiwork/contract_error.rb +9 -0
  111. data/lib/apiwork/controller.rb +300 -0
  112. data/lib/apiwork/domain_error.rb +13 -0
  113. data/lib/apiwork/element.rb +386 -0
  114. data/lib/apiwork/engine.rb +20 -0
  115. data/lib/apiwork/error.rb +6 -0
  116. data/lib/apiwork/error_code/definition.rb +63 -0
  117. data/lib/apiwork/error_code/registry.rb +18 -0
  118. data/lib/apiwork/error_code.rb +132 -0
  119. data/lib/apiwork/export/base.rb +291 -0
  120. data/lib/apiwork/export/open_api.rb +600 -0
  121. data/lib/apiwork/export/pipeline/writer.rb +66 -0
  122. data/lib/apiwork/export/pipeline.rb +84 -0
  123. data/lib/apiwork/export/registry.rb +16 -0
  124. data/lib/apiwork/export/surface_resolver.rb +189 -0
  125. data/lib/apiwork/export/type_analysis.rb +170 -0
  126. data/lib/apiwork/export/type_script.rb +23 -0
  127. data/lib/apiwork/export/type_script_mapper.rb +349 -0
  128. data/lib/apiwork/export/zod.rb +39 -0
  129. data/lib/apiwork/export/zod_mapper.rb +421 -0
  130. data/lib/apiwork/export.rb +80 -0
  131. data/lib/apiwork/http_error.rb +16 -0
  132. data/lib/apiwork/introspection/action/request.rb +66 -0
  133. data/lib/apiwork/introspection/action/response.rb +57 -0
  134. data/lib/apiwork/introspection/action.rb +124 -0
  135. data/lib/apiwork/introspection/api/info/contact.rb +59 -0
  136. data/lib/apiwork/introspection/api/info/license.rb +49 -0
  137. data/lib/apiwork/introspection/api/info/server.rb +50 -0
  138. data/lib/apiwork/introspection/api/info.rb +107 -0
  139. data/lib/apiwork/introspection/api/resource.rb +83 -0
  140. data/lib/apiwork/introspection/api.rb +92 -0
  141. data/lib/apiwork/introspection/contract.rb +63 -0
  142. data/lib/apiwork/introspection/dump/action.rb +101 -0
  143. data/lib/apiwork/introspection/dump/api.rb +119 -0
  144. data/lib/apiwork/introspection/dump/contract.rb +129 -0
  145. data/lib/apiwork/introspection/dump/param.rb +486 -0
  146. data/lib/apiwork/introspection/dump/resource.rb +112 -0
  147. data/lib/apiwork/introspection/dump/type.rb +339 -0
  148. data/lib/apiwork/introspection/dump.rb +17 -0
  149. data/lib/apiwork/introspection/enum.rb +63 -0
  150. data/lib/apiwork/introspection/error_code.rb +44 -0
  151. data/lib/apiwork/introspection/param/array.rb +88 -0
  152. data/lib/apiwork/introspection/param/base.rb +285 -0
  153. data/lib/apiwork/introspection/param/binary.rb +73 -0
  154. data/lib/apiwork/introspection/param/boolean.rb +73 -0
  155. data/lib/apiwork/introspection/param/date.rb +73 -0
  156. data/lib/apiwork/introspection/param/date_time.rb +73 -0
  157. data/lib/apiwork/introspection/param/decimal.rb +121 -0
  158. data/lib/apiwork/introspection/param/integer.rb +131 -0
  159. data/lib/apiwork/introspection/param/literal.rb +45 -0
  160. data/lib/apiwork/introspection/param/number.rb +121 -0
  161. data/lib/apiwork/introspection/param/object.rb +59 -0
  162. data/lib/apiwork/introspection/param/reference.rb +45 -0
  163. data/lib/apiwork/introspection/param/string.rb +122 -0
  164. data/lib/apiwork/introspection/param/time.rb +73 -0
  165. data/lib/apiwork/introspection/param/union.rb +57 -0
  166. data/lib/apiwork/introspection/param/unknown.rb +26 -0
  167. data/lib/apiwork/introspection/param/uuid.rb +73 -0
  168. data/lib/apiwork/introspection/param.rb +31 -0
  169. data/lib/apiwork/introspection/type.rb +129 -0
  170. data/lib/apiwork/introspection.rb +28 -0
  171. data/lib/apiwork/issue.rb +80 -0
  172. data/lib/apiwork/json_pointer.rb +21 -0
  173. data/lib/apiwork/object.rb +1618 -0
  174. data/lib/apiwork/reference_generator.rb +622 -0
  175. data/lib/apiwork/registry.rb +56 -0
  176. data/lib/apiwork/representation/association.rb +391 -0
  177. data/lib/apiwork/representation/attribute.rb +335 -0
  178. data/lib/apiwork/representation/base.rb +819 -0
  179. data/lib/apiwork/representation/deserializer.rb +95 -0
  180. data/lib/apiwork/representation/element.rb +128 -0
  181. data/lib/apiwork/representation/inheritance.rb +78 -0
  182. data/lib/apiwork/representation/model_detector.rb +75 -0
  183. data/lib/apiwork/representation/root_key.rb +35 -0
  184. data/lib/apiwork/representation/serializer.rb +127 -0
  185. data/lib/apiwork/request.rb +79 -0
  186. data/lib/apiwork/response.rb +56 -0
  187. data/lib/apiwork/union.rb +102 -0
  188. data/lib/apiwork/version.rb +2 -2
  189. data/lib/apiwork.rb +61 -3
  190. data/lib/generators/apiwork/api_generator.rb +38 -0
  191. data/lib/generators/apiwork/contract_generator.rb +25 -0
  192. data/lib/generators/apiwork/install_generator.rb +27 -0
  193. data/lib/generators/apiwork/representation_generator.rb +25 -0
  194. data/lib/generators/apiwork/templates/api/api.rb.tt +4 -0
  195. data/lib/generators/apiwork/templates/contract/contract.rb.tt +6 -0
  196. data/lib/generators/apiwork/templates/install/application_contract.rb.tt +5 -0
  197. data/lib/generators/apiwork/templates/install/application_representation.rb.tt +5 -0
  198. data/lib/generators/apiwork/templates/representation/representation.rb.tt +6 -0
  199. data/lib/tasks/apiwork.rake +102 -0
  200. metadata +319 -19
  201. data/.rubocop.yml +0 -8
  202. data/sig/apiwork.rbs +0 -4
@@ -0,0 +1,285 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Apiwork
4
+ module Introspection
5
+ module Param
6
+ class Base
7
+ def initialize(dump)
8
+ @dump = dump
9
+ end
10
+
11
+ # @api public
12
+ # The type for this param.
13
+ #
14
+ # @return [Symbol]
15
+ def type
16
+ @dump[:type]
17
+ end
18
+
19
+ # @api public
20
+ # Whether this param is nullable.
21
+ #
22
+ # @return [Boolean]
23
+ def nullable?
24
+ @dump[:nullable]
25
+ end
26
+
27
+ # @api public
28
+ # Whether this param is optional.
29
+ #
30
+ # @return [Boolean]
31
+ def optional?
32
+ @dump[:optional]
33
+ end
34
+
35
+ # @api public
36
+ # Whether this param is deprecated.
37
+ #
38
+ # @return [Boolean]
39
+ def deprecated?
40
+ @dump[:deprecated]
41
+ end
42
+
43
+ # @api public
44
+ # The description for this param.
45
+ #
46
+ # @return [String, nil]
47
+ def description
48
+ @dump[:description]
49
+ end
50
+
51
+ # @api public
52
+ # The example for this param.
53
+ #
54
+ # @return [Object, nil]
55
+ def example
56
+ @dump[:example]
57
+ end
58
+
59
+ # @api public
60
+ # The default for this param.
61
+ #
62
+ # @return [Object, nil]
63
+ def default
64
+ @dump[:default]
65
+ end
66
+
67
+ # @api public
68
+ # Whether this param has a default.
69
+ #
70
+ # @return [Boolean]
71
+ def default?
72
+ @dump.key?(:default)
73
+ end
74
+
75
+ # @api public
76
+ # The tag for this param.
77
+ #
78
+ # @return [String, nil]
79
+ def tag
80
+ @dump[:tag]
81
+ end
82
+
83
+ # @api public
84
+ # Whether this param is scalar.
85
+ #
86
+ # @return [Boolean]
87
+ def scalar?
88
+ false
89
+ end
90
+
91
+ # @api public
92
+ # Whether this param is an array.
93
+ #
94
+ # @return [Boolean]
95
+ def array?
96
+ false
97
+ end
98
+
99
+ # @api public
100
+ # Whether this param is an object.
101
+ #
102
+ # @return [Boolean]
103
+ def object?
104
+ false
105
+ end
106
+
107
+ # @api public
108
+ # Whether this param is a union.
109
+ #
110
+ # @return [Boolean]
111
+ def union?
112
+ false
113
+ end
114
+
115
+ # @api public
116
+ # Whether this param is a literal.
117
+ #
118
+ # @return [Boolean]
119
+ def literal?
120
+ false
121
+ end
122
+
123
+ # @api public
124
+ # Whether this param is numeric.
125
+ #
126
+ # @return [Boolean]
127
+ def numeric?
128
+ false
129
+ end
130
+
131
+ # @api public
132
+ # Whether this param is boundable.
133
+ #
134
+ # @return [Boolean]
135
+ def boundable?
136
+ false
137
+ end
138
+
139
+ # @api public
140
+ # Whether this param is a string.
141
+ #
142
+ # @return [Boolean]
143
+ def string?
144
+ false
145
+ end
146
+
147
+ # @api public
148
+ # Whether this param is an integer.
149
+ #
150
+ # @return [Boolean]
151
+ def integer?
152
+ false
153
+ end
154
+
155
+ # @api public
156
+ # Whether this param is a number.
157
+ #
158
+ # @return [Boolean]
159
+ def number?
160
+ false
161
+ end
162
+
163
+ # @api public
164
+ # Whether this param is a decimal.
165
+ #
166
+ # @return [Boolean]
167
+ def decimal?
168
+ false
169
+ end
170
+
171
+ # @api public
172
+ # Whether this param is a boolean.
173
+ #
174
+ # @return [Boolean]
175
+ def boolean?
176
+ false
177
+ end
178
+
179
+ # @api public
180
+ # Whether this param is a datetime.
181
+ #
182
+ # @return [Boolean]
183
+ def datetime?
184
+ false
185
+ end
186
+
187
+ # @api public
188
+ # Whether this param is a date.
189
+ #
190
+ # @return [Boolean]
191
+ def date?
192
+ false
193
+ end
194
+
195
+ # @api public
196
+ # Whether this param is a time.
197
+ #
198
+ # @return [Boolean]
199
+ def time?
200
+ false
201
+ end
202
+
203
+ # @api public
204
+ # Whether this param is a UUID.
205
+ #
206
+ # @return [Boolean]
207
+ def uuid?
208
+ false
209
+ end
210
+
211
+ # @api public
212
+ # Whether this param is binary data.
213
+ #
214
+ # @return [Boolean]
215
+ def binary?
216
+ false
217
+ end
218
+
219
+ # @api public
220
+ # Whether this param is of unknown type.
221
+ #
222
+ # @return [Boolean]
223
+ def unknown?
224
+ false
225
+ end
226
+
227
+ # @api public
228
+ # Whether this param is a reference.
229
+ #
230
+ # @return [Boolean]
231
+ def reference?
232
+ false
233
+ end
234
+
235
+ # @api public
236
+ # Whether this param has an enum.
237
+ #
238
+ # @return [Boolean]
239
+ def enum?
240
+ false
241
+ end
242
+
243
+ # @api public
244
+ # Whether this param is an enum reference.
245
+ #
246
+ # @return [Boolean]
247
+ def enum_reference?
248
+ false
249
+ end
250
+
251
+ # @api public
252
+ # Whether this param is formattable.
253
+ #
254
+ # @return [Boolean]
255
+ def formattable?
256
+ false
257
+ end
258
+
259
+ # @api public
260
+ # Whether this param is partial.
261
+ #
262
+ # @return [Boolean]
263
+ def partial?
264
+ false
265
+ end
266
+
267
+ # @api public
268
+ # Converts this param to a hash.
269
+ #
270
+ # @return [Hash]
271
+ def to_h
272
+ {
273
+ default: default,
274
+ deprecated: deprecated?,
275
+ description: description,
276
+ example: example,
277
+ nullable: nullable?,
278
+ optional: optional?,
279
+ type: type,
280
+ }
281
+ end
282
+ end
283
+ end
284
+ end
285
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Apiwork
4
+ module Introspection
5
+ module Param
6
+ # @api public
7
+ # Binary param representing base64-encoded binary data.
8
+ #
9
+ # @example Basic usage
10
+ # param.type # => :binary
11
+ # param.scalar? # => true
12
+ # param.binary? # => true
13
+ #
14
+ # @example Capabilities
15
+ # param.formattable? # => false
16
+ #
17
+ # @example Enum
18
+ # if param.enum?
19
+ # param.enum # => ["SGVsbG8=", "V29ybGQ="]
20
+ # param.enum_reference? # => false
21
+ # end
22
+ class Binary < Base
23
+ # @api public
24
+ # Whether this param is scalar.
25
+ #
26
+ # @return [Boolean]
27
+ def scalar?
28
+ true
29
+ end
30
+
31
+ # @api public
32
+ # Whether this param has an enum.
33
+ #
34
+ # @return [Boolean]
35
+ def enum?
36
+ @dump[:enum].present?
37
+ end
38
+
39
+ # @api public
40
+ # The enum for this param.
41
+ #
42
+ # @return [Array<String>, Symbol, nil]
43
+ def enum
44
+ @dump[:enum]
45
+ end
46
+
47
+ # @api public
48
+ # Whether this param is an enum reference.
49
+ #
50
+ # @return [Boolean]
51
+ def enum_reference?
52
+ @dump[:enum].is_a?(Symbol)
53
+ end
54
+
55
+ # @api public
56
+ # Whether this param is binary data.
57
+ #
58
+ # @return [Boolean]
59
+ def binary?
60
+ true
61
+ end
62
+
63
+ # @api public
64
+ # Whether this param is formattable.
65
+ #
66
+ # @return [Boolean]
67
+ def formattable?
68
+ false
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Apiwork
4
+ module Introspection
5
+ module Param
6
+ # @api public
7
+ # Boolean param representing true/false values.
8
+ #
9
+ # @example Basic usage
10
+ # param.type # => :boolean
11
+ # param.scalar? # => true
12
+ # param.boolean? # => true
13
+ #
14
+ # @example Capabilities
15
+ # param.formattable? # => false
16
+ #
17
+ # @example Enum
18
+ # if param.enum?
19
+ # param.enum # => [true]
20
+ # param.enum_reference? # => false
21
+ # end
22
+ class Boolean < Base
23
+ # @api public
24
+ # Whether this param is scalar.
25
+ #
26
+ # @return [Boolean]
27
+ def scalar?
28
+ true
29
+ end
30
+
31
+ # @api public
32
+ # Whether this param has an enum.
33
+ #
34
+ # @return [Boolean]
35
+ def enum?
36
+ @dump[:enum].present?
37
+ end
38
+
39
+ # @api public
40
+ # The enum for this param.
41
+ #
42
+ # @return [Array<Boolean>, Symbol, nil]
43
+ def enum
44
+ @dump[:enum]
45
+ end
46
+
47
+ # @api public
48
+ # Whether this param is an enum reference.
49
+ #
50
+ # @return [Boolean]
51
+ def enum_reference?
52
+ @dump[:enum].is_a?(Symbol)
53
+ end
54
+
55
+ # @api public
56
+ # Whether this param is a boolean.
57
+ #
58
+ # @return [Boolean]
59
+ def boolean?
60
+ true
61
+ end
62
+
63
+ # @api public
64
+ # Whether this param is formattable.
65
+ #
66
+ # @return [Boolean]
67
+ def formattable?
68
+ false
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Apiwork
4
+ module Introspection
5
+ module Param
6
+ # @api public
7
+ # Date param representing date values (year, month, day).
8
+ #
9
+ # @example Basic usage
10
+ # param.type # => :date
11
+ # param.scalar? # => true
12
+ # param.date? # => true
13
+ #
14
+ # @example Capabilities
15
+ # param.formattable? # => false
16
+ #
17
+ # @example Enum
18
+ # if param.enum?
19
+ # param.enum # => ["2024-01-01", "2024-12-31"]
20
+ # param.enum_reference? # => false
21
+ # end
22
+ class Date < Base
23
+ # @api public
24
+ # Whether this param is scalar.
25
+ #
26
+ # @return [Boolean]
27
+ def scalar?
28
+ true
29
+ end
30
+
31
+ # @api public
32
+ # Whether this param has an enum.
33
+ #
34
+ # @return [Boolean]
35
+ def enum?
36
+ @dump[:enum].present?
37
+ end
38
+
39
+ # @api public
40
+ # The enum for this param.
41
+ #
42
+ # @return [Array<String>, Symbol, nil]
43
+ def enum
44
+ @dump[:enum]
45
+ end
46
+
47
+ # @api public
48
+ # Whether this param is an enum reference.
49
+ #
50
+ # @return [Boolean]
51
+ def enum_reference?
52
+ @dump[:enum].is_a?(Symbol)
53
+ end
54
+
55
+ # @api public
56
+ # Whether this param is a date.
57
+ #
58
+ # @return [Boolean]
59
+ def date?
60
+ true
61
+ end
62
+
63
+ # @api public
64
+ # Whether this param is formattable.
65
+ #
66
+ # @return [Boolean]
67
+ def formattable?
68
+ false
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Apiwork
4
+ module Introspection
5
+ module Param
6
+ # @api public
7
+ # DateTime param representing date and time values with timezone.
8
+ #
9
+ # @example Basic usage
10
+ # param.type # => :datetime
11
+ # param.scalar? # => true
12
+ # param.datetime? # => true
13
+ #
14
+ # @example Capabilities
15
+ # param.formattable? # => false
16
+ #
17
+ # @example Enum
18
+ # if param.enum?
19
+ # param.enum # => ["2024-01-01T00:00:00Z"]
20
+ # param.enum_reference? # => false
21
+ # end
22
+ class DateTime < Base
23
+ # @api public
24
+ # Whether this param is scalar.
25
+ #
26
+ # @return [Boolean]
27
+ def scalar?
28
+ true
29
+ end
30
+
31
+ # @api public
32
+ # Whether this param has an enum.
33
+ #
34
+ # @return [Boolean]
35
+ def enum?
36
+ @dump[:enum].present?
37
+ end
38
+
39
+ # @api public
40
+ # The enum for this param.
41
+ #
42
+ # @return [Array<String>, Symbol, nil]
43
+ def enum
44
+ @dump[:enum]
45
+ end
46
+
47
+ # @api public
48
+ # Whether this param is an enum reference.
49
+ #
50
+ # @return [Boolean]
51
+ def enum_reference?
52
+ @dump[:enum].is_a?(Symbol)
53
+ end
54
+
55
+ # @api public
56
+ # Whether this param is a datetime.
57
+ #
58
+ # @return [Boolean]
59
+ def datetime?
60
+ true
61
+ end
62
+
63
+ # @api public
64
+ # Whether this param is formattable.
65
+ #
66
+ # @return [Boolean]
67
+ def formattable?
68
+ false
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,121 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Apiwork
4
+ module Introspection
5
+ module Param
6
+ # @api public
7
+ # Decimal param representing precise decimal number values.
8
+ #
9
+ # @example Basic usage
10
+ # param.type # => :decimal
11
+ # param.scalar? # => true
12
+ # param.decimal? # => true
13
+ # param.numeric? # => true
14
+ #
15
+ # @example Constraints
16
+ # param.min # => 0.0 or nil
17
+ # param.max # => 100.0 or nil
18
+ # param.boundable? # => true
19
+ # param.formattable? # => false
20
+ #
21
+ # @example Enum
22
+ # if param.enum?
23
+ # param.enum # => [9.99, 19.99, 29.99]
24
+ # param.enum_reference? # => false
25
+ # end
26
+ class Decimal < Base
27
+ # @api public
28
+ # The minimum for this param.
29
+ #
30
+ # @return [Numeric, nil]
31
+ def min
32
+ @dump[:min]
33
+ end
34
+
35
+ # @api public
36
+ # The maximum for this param.
37
+ #
38
+ # @return [Numeric, nil]
39
+ def max
40
+ @dump[:max]
41
+ end
42
+
43
+ # @api public
44
+ # Whether this param is scalar.
45
+ #
46
+ # @return [Boolean]
47
+ def scalar?
48
+ true
49
+ end
50
+
51
+ # @api public
52
+ # Whether this param has an enum.
53
+ #
54
+ # @return [Boolean]
55
+ def enum?
56
+ @dump[:enum].present?
57
+ end
58
+
59
+ # @api public
60
+ # The enum for this param.
61
+ #
62
+ # @return [Array<Numeric>, Symbol, nil]
63
+ def enum
64
+ @dump[:enum]
65
+ end
66
+
67
+ # @api public
68
+ # Whether this param is an enum reference.
69
+ #
70
+ # @return [Boolean]
71
+ def enum_reference?
72
+ @dump[:enum].is_a?(Symbol)
73
+ end
74
+
75
+ # @api public
76
+ # Whether this param is numeric.
77
+ #
78
+ # @return [Boolean]
79
+ def numeric?
80
+ true
81
+ end
82
+
83
+ # @api public
84
+ # Whether this param is boundable.
85
+ #
86
+ # @return [Boolean]
87
+ def boundable?
88
+ true
89
+ end
90
+
91
+ # @api public
92
+ # Whether this param is a decimal.
93
+ #
94
+ # @return [Boolean]
95
+ def decimal?
96
+ true
97
+ end
98
+
99
+ # @api public
100
+ # Whether this param is formattable.
101
+ #
102
+ # @return [Boolean]
103
+ def formattable?
104
+ false
105
+ end
106
+
107
+ # @api public
108
+ # Converts this param to a hash.
109
+ #
110
+ # @return [Hash]
111
+ def to_h
112
+ result = super
113
+ result[:enum] = enum if enum?
114
+ result[:max] = max
115
+ result[:min] = min
116
+ result
117
+ end
118
+ end
119
+ end
120
+ end
121
+ end