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.
- checksums.yaml +4 -4
- data/LICENSE.txt +2 -2
- data/README.md +117 -1
- data/Rakefile +5 -3
- data/app/controllers/apiwork/errors_controller.rb +13 -0
- data/app/controllers/apiwork/exports_controller.rb +22 -0
- data/lib/apiwork/abstractable.rb +26 -0
- data/lib/apiwork/adapter/base.rb +369 -0
- data/lib/apiwork/adapter/builder/api/base.rb +66 -0
- data/lib/apiwork/adapter/builder/contract/base.rb +86 -0
- data/lib/apiwork/adapter/capability/api/base.rb +51 -0
- data/lib/apiwork/adapter/capability/api/scope.rb +64 -0
- data/lib/apiwork/adapter/capability/base.rb +291 -0
- data/lib/apiwork/adapter/capability/contract/base.rb +37 -0
- data/lib/apiwork/adapter/capability/contract/scope.rb +110 -0
- data/lib/apiwork/adapter/capability/operation/base.rb +172 -0
- data/lib/apiwork/adapter/capability/operation/metadata_shape.rb +165 -0
- data/lib/apiwork/adapter/capability/result.rb +21 -0
- data/lib/apiwork/adapter/capability/runner.rb +56 -0
- data/lib/apiwork/adapter/capability/transformer/request/base.rb +72 -0
- data/lib/apiwork/adapter/capability/transformer/response/base.rb +45 -0
- data/lib/apiwork/adapter/registry.rb +16 -0
- data/lib/apiwork/adapter/serializer/error/base.rb +72 -0
- data/lib/apiwork/adapter/serializer/error/default/api_builder.rb +32 -0
- data/lib/apiwork/adapter/serializer/error/default.rb +37 -0
- data/lib/apiwork/adapter/serializer/resource/base.rb +84 -0
- data/lib/apiwork/adapter/serializer/resource/default/contract_builder.rb +209 -0
- data/lib/apiwork/adapter/serializer/resource/default.rb +39 -0
- data/lib/apiwork/adapter/standard/capability/filtering/api_builder.rb +75 -0
- data/lib/apiwork/adapter/standard/capability/filtering/constants.rb +37 -0
- data/lib/apiwork/adapter/standard/capability/filtering/contract_builder.rb +193 -0
- data/lib/apiwork/adapter/standard/capability/filtering/operation/filter/builder.rb +47 -0
- data/lib/apiwork/adapter/standard/capability/filtering/operation/filter/operator_builder.rb +36 -0
- data/lib/apiwork/adapter/standard/capability/filtering/operation/filter.rb +462 -0
- data/lib/apiwork/adapter/standard/capability/filtering/operation.rb +22 -0
- data/lib/apiwork/adapter/standard/capability/filtering/request_transformer.rb +47 -0
- data/lib/apiwork/adapter/standard/capability/filtering.rb +18 -0
- data/lib/apiwork/adapter/standard/capability/including/contract_builder.rb +169 -0
- data/lib/apiwork/adapter/standard/capability/including/operation.rb +20 -0
- data/lib/apiwork/adapter/standard/capability/including.rb +16 -0
- data/lib/apiwork/adapter/standard/capability/pagination/api_builder.rb +34 -0
- data/lib/apiwork/adapter/standard/capability/pagination/contract_builder.rb +35 -0
- data/lib/apiwork/adapter/standard/capability/pagination/operation/paginate/cursor.rb +84 -0
- data/lib/apiwork/adapter/standard/capability/pagination/operation/paginate/offset.rb +66 -0
- data/lib/apiwork/adapter/standard/capability/pagination/operation/paginate.rb +24 -0
- data/lib/apiwork/adapter/standard/capability/pagination/operation.rb +24 -0
- data/lib/apiwork/adapter/standard/capability/pagination.rb +21 -0
- data/lib/apiwork/adapter/standard/capability/sorting/api_builder.rb +19 -0
- data/lib/apiwork/adapter/standard/capability/sorting/contract_builder.rb +84 -0
- data/lib/apiwork/adapter/standard/capability/sorting/operation/sort.rb +83 -0
- data/lib/apiwork/adapter/standard/capability/sorting/operation.rb +22 -0
- data/lib/apiwork/adapter/standard/capability/sorting.rb +17 -0
- data/lib/apiwork/adapter/standard/capability/writing/constants.rb +15 -0
- data/lib/apiwork/adapter/standard/capability/writing/contract_builder.rb +253 -0
- data/lib/apiwork/adapter/standard/capability/writing/operation/issue_mapper.rb +210 -0
- data/lib/apiwork/adapter/standard/capability/writing/operation.rb +32 -0
- data/lib/apiwork/adapter/standard/capability/writing/request_transformer.rb +37 -0
- data/lib/apiwork/adapter/standard/capability/writing.rb +17 -0
- data/lib/apiwork/adapter/standard/includes_resolver.rb +106 -0
- data/lib/apiwork/adapter/standard.rb +22 -0
- data/lib/apiwork/adapter/wrapper/base.rb +70 -0
- data/lib/apiwork/adapter/wrapper/collection/base.rb +60 -0
- data/lib/apiwork/adapter/wrapper/collection/default.rb +47 -0
- data/lib/apiwork/adapter/wrapper/error/base.rb +30 -0
- data/lib/apiwork/adapter/wrapper/error/default.rb +34 -0
- data/lib/apiwork/adapter/wrapper/member/base.rb +58 -0
- data/lib/apiwork/adapter/wrapper/member/default.rb +40 -0
- data/lib/apiwork/adapter/wrapper/shape.rb +203 -0
- data/lib/apiwork/adapter.rb +50 -0
- data/lib/apiwork/api/base.rb +802 -0
- data/lib/apiwork/api/element.rb +110 -0
- data/lib/apiwork/api/enum_registry/definition.rb +51 -0
- data/lib/apiwork/api/enum_registry.rb +98 -0
- data/lib/apiwork/api/info/contact.rb +67 -0
- data/lib/apiwork/api/info/license.rb +50 -0
- data/lib/apiwork/api/info/server.rb +50 -0
- data/lib/apiwork/api/info.rb +221 -0
- data/lib/apiwork/api/object.rb +235 -0
- data/lib/apiwork/api/registry.rb +33 -0
- data/lib/apiwork/api/representation_registry.rb +76 -0
- data/lib/apiwork/api/resource/action.rb +41 -0
- data/lib/apiwork/api/resource.rb +648 -0
- data/lib/apiwork/api/router.rb +104 -0
- data/lib/apiwork/api/type_registry/definition.rb +117 -0
- data/lib/apiwork/api/type_registry.rb +99 -0
- data/lib/apiwork/api/union.rb +49 -0
- data/lib/apiwork/api.rb +85 -0
- data/lib/apiwork/configurable.rb +71 -0
- data/lib/apiwork/configuration/option.rb +125 -0
- data/lib/apiwork/configuration/validatable.rb +25 -0
- data/lib/apiwork/configuration.rb +95 -0
- data/lib/apiwork/configuration_error.rb +6 -0
- data/lib/apiwork/constraint_error.rb +20 -0
- data/lib/apiwork/contract/action/request.rb +79 -0
- data/lib/apiwork/contract/action/response.rb +87 -0
- data/lib/apiwork/contract/action.rb +258 -0
- data/lib/apiwork/contract/base.rb +714 -0
- data/lib/apiwork/contract/element.rb +130 -0
- data/lib/apiwork/contract/object/coercer.rb +194 -0
- data/lib/apiwork/contract/object/deserializer.rb +101 -0
- data/lib/apiwork/contract/object/transformer.rb +95 -0
- data/lib/apiwork/contract/object/validator/result.rb +27 -0
- data/lib/apiwork/contract/object/validator.rb +734 -0
- data/lib/apiwork/contract/object.rb +566 -0
- data/lib/apiwork/contract/request_parser/result.rb +25 -0
- data/lib/apiwork/contract/request_parser.rb +72 -0
- data/lib/apiwork/contract/response_parser/result.rb +25 -0
- data/lib/apiwork/contract/response_parser.rb +35 -0
- data/lib/apiwork/contract/union.rb +56 -0
- data/lib/apiwork/contract_error.rb +9 -0
- data/lib/apiwork/controller.rb +300 -0
- data/lib/apiwork/domain_error.rb +13 -0
- data/lib/apiwork/element.rb +386 -0
- data/lib/apiwork/engine.rb +20 -0
- data/lib/apiwork/error.rb +6 -0
- data/lib/apiwork/error_code/definition.rb +63 -0
- data/lib/apiwork/error_code/registry.rb +18 -0
- data/lib/apiwork/error_code.rb +132 -0
- data/lib/apiwork/export/base.rb +291 -0
- data/lib/apiwork/export/open_api.rb +600 -0
- data/lib/apiwork/export/pipeline/writer.rb +66 -0
- data/lib/apiwork/export/pipeline.rb +84 -0
- data/lib/apiwork/export/registry.rb +16 -0
- data/lib/apiwork/export/surface_resolver.rb +189 -0
- data/lib/apiwork/export/type_analysis.rb +170 -0
- data/lib/apiwork/export/type_script.rb +23 -0
- data/lib/apiwork/export/type_script_mapper.rb +349 -0
- data/lib/apiwork/export/zod.rb +39 -0
- data/lib/apiwork/export/zod_mapper.rb +421 -0
- data/lib/apiwork/export.rb +80 -0
- data/lib/apiwork/http_error.rb +16 -0
- data/lib/apiwork/introspection/action/request.rb +66 -0
- data/lib/apiwork/introspection/action/response.rb +57 -0
- data/lib/apiwork/introspection/action.rb +124 -0
- data/lib/apiwork/introspection/api/info/contact.rb +59 -0
- data/lib/apiwork/introspection/api/info/license.rb +49 -0
- data/lib/apiwork/introspection/api/info/server.rb +50 -0
- data/lib/apiwork/introspection/api/info.rb +107 -0
- data/lib/apiwork/introspection/api/resource.rb +83 -0
- data/lib/apiwork/introspection/api.rb +92 -0
- data/lib/apiwork/introspection/contract.rb +63 -0
- data/lib/apiwork/introspection/dump/action.rb +101 -0
- data/lib/apiwork/introspection/dump/api.rb +119 -0
- data/lib/apiwork/introspection/dump/contract.rb +129 -0
- data/lib/apiwork/introspection/dump/param.rb +486 -0
- data/lib/apiwork/introspection/dump/resource.rb +112 -0
- data/lib/apiwork/introspection/dump/type.rb +339 -0
- data/lib/apiwork/introspection/dump.rb +17 -0
- data/lib/apiwork/introspection/enum.rb +63 -0
- data/lib/apiwork/introspection/error_code.rb +44 -0
- data/lib/apiwork/introspection/param/array.rb +88 -0
- data/lib/apiwork/introspection/param/base.rb +285 -0
- data/lib/apiwork/introspection/param/binary.rb +73 -0
- data/lib/apiwork/introspection/param/boolean.rb +73 -0
- data/lib/apiwork/introspection/param/date.rb +73 -0
- data/lib/apiwork/introspection/param/date_time.rb +73 -0
- data/lib/apiwork/introspection/param/decimal.rb +121 -0
- data/lib/apiwork/introspection/param/integer.rb +131 -0
- data/lib/apiwork/introspection/param/literal.rb +45 -0
- data/lib/apiwork/introspection/param/number.rb +121 -0
- data/lib/apiwork/introspection/param/object.rb +59 -0
- data/lib/apiwork/introspection/param/reference.rb +45 -0
- data/lib/apiwork/introspection/param/string.rb +122 -0
- data/lib/apiwork/introspection/param/time.rb +73 -0
- data/lib/apiwork/introspection/param/union.rb +57 -0
- data/lib/apiwork/introspection/param/unknown.rb +26 -0
- data/lib/apiwork/introspection/param/uuid.rb +73 -0
- data/lib/apiwork/introspection/param.rb +31 -0
- data/lib/apiwork/introspection/type.rb +129 -0
- data/lib/apiwork/introspection.rb +28 -0
- data/lib/apiwork/issue.rb +80 -0
- data/lib/apiwork/json_pointer.rb +21 -0
- data/lib/apiwork/object.rb +1618 -0
- data/lib/apiwork/reference_generator.rb +622 -0
- data/lib/apiwork/registry.rb +56 -0
- data/lib/apiwork/representation/association.rb +391 -0
- data/lib/apiwork/representation/attribute.rb +335 -0
- data/lib/apiwork/representation/base.rb +819 -0
- data/lib/apiwork/representation/deserializer.rb +95 -0
- data/lib/apiwork/representation/element.rb +128 -0
- data/lib/apiwork/representation/inheritance.rb +78 -0
- data/lib/apiwork/representation/model_detector.rb +75 -0
- data/lib/apiwork/representation/root_key.rb +35 -0
- data/lib/apiwork/representation/serializer.rb +127 -0
- data/lib/apiwork/request.rb +79 -0
- data/lib/apiwork/response.rb +56 -0
- data/lib/apiwork/union.rb +102 -0
- data/lib/apiwork/version.rb +2 -2
- data/lib/apiwork.rb +61 -3
- data/lib/generators/apiwork/api_generator.rb +38 -0
- data/lib/generators/apiwork/contract_generator.rb +25 -0
- data/lib/generators/apiwork/install_generator.rb +27 -0
- data/lib/generators/apiwork/representation_generator.rb +25 -0
- data/lib/generators/apiwork/templates/api/api.rb.tt +4 -0
- data/lib/generators/apiwork/templates/contract/contract.rb.tt +6 -0
- data/lib/generators/apiwork/templates/install/application_contract.rb.tt +5 -0
- data/lib/generators/apiwork/templates/install/application_representation.rb.tt +5 -0
- data/lib/generators/apiwork/templates/representation/representation.rb.tt +6 -0
- data/lib/tasks/apiwork.rake +102 -0
- metadata +319 -19
- data/.rubocop.yml +0 -8
- data/sig/apiwork.rbs +0 -4
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Apiwork
|
|
4
|
+
module Introspection
|
|
5
|
+
module Param
|
|
6
|
+
# @api public
|
|
7
|
+
# Integer param representing whole number values.
|
|
8
|
+
#
|
|
9
|
+
# @example Basic usage
|
|
10
|
+
# param.type # => :integer
|
|
11
|
+
# param.scalar? # => true
|
|
12
|
+
# param.integer? # => true
|
|
13
|
+
# param.numeric? # => true
|
|
14
|
+
#
|
|
15
|
+
# @example Constraints
|
|
16
|
+
# param.min # => 0 or nil
|
|
17
|
+
# param.max # => 100 or nil
|
|
18
|
+
# param.format # => :int32 or nil
|
|
19
|
+
# param.boundable? # => true
|
|
20
|
+
# param.formattable? # => true
|
|
21
|
+
#
|
|
22
|
+
# @example Enum
|
|
23
|
+
# if param.enum?
|
|
24
|
+
# param.enum # => [1, 2, 3]
|
|
25
|
+
# param.enum_reference? # => false
|
|
26
|
+
# end
|
|
27
|
+
class Integer < Base
|
|
28
|
+
# @api public
|
|
29
|
+
# The minimum for this param.
|
|
30
|
+
#
|
|
31
|
+
# @return [Numeric, nil]
|
|
32
|
+
def min
|
|
33
|
+
@dump[:min]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# @api public
|
|
37
|
+
# The maximum for this param.
|
|
38
|
+
#
|
|
39
|
+
# @return [Numeric, nil]
|
|
40
|
+
def max
|
|
41
|
+
@dump[:max]
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# @api public
|
|
45
|
+
# The format for this param.
|
|
46
|
+
#
|
|
47
|
+
# @return [Symbol, nil]
|
|
48
|
+
def format
|
|
49
|
+
@dump[:format]
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# @api public
|
|
53
|
+
# Whether this param is scalar.
|
|
54
|
+
#
|
|
55
|
+
# @return [Boolean]
|
|
56
|
+
def scalar?
|
|
57
|
+
true
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# @api public
|
|
61
|
+
# Whether this param has an enum.
|
|
62
|
+
#
|
|
63
|
+
# @return [Boolean]
|
|
64
|
+
def enum?
|
|
65
|
+
@dump[:enum].present?
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# @api public
|
|
69
|
+
# The enum for this param.
|
|
70
|
+
#
|
|
71
|
+
# @return [Array<Integer>, Symbol, nil]
|
|
72
|
+
def enum
|
|
73
|
+
@dump[:enum]
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# @api public
|
|
77
|
+
# Whether this param is an enum reference.
|
|
78
|
+
#
|
|
79
|
+
# @return [Boolean]
|
|
80
|
+
def enum_reference?
|
|
81
|
+
@dump[:enum].is_a?(Symbol)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# @api public
|
|
85
|
+
# Whether this param is numeric.
|
|
86
|
+
#
|
|
87
|
+
# @return [Boolean]
|
|
88
|
+
def numeric?
|
|
89
|
+
true
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# @api public
|
|
93
|
+
# Whether this param is boundable.
|
|
94
|
+
#
|
|
95
|
+
# @return [Boolean]
|
|
96
|
+
def boundable?
|
|
97
|
+
true
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# @api public
|
|
101
|
+
# Whether this param is formattable.
|
|
102
|
+
#
|
|
103
|
+
# @return [Boolean]
|
|
104
|
+
def formattable?
|
|
105
|
+
true
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# @api public
|
|
109
|
+
# Whether this param is an integer.
|
|
110
|
+
#
|
|
111
|
+
# @return [Boolean]
|
|
112
|
+
def integer?
|
|
113
|
+
true
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# @api public
|
|
117
|
+
# Converts this param to a hash.
|
|
118
|
+
#
|
|
119
|
+
# @return [Hash]
|
|
120
|
+
def to_h
|
|
121
|
+
result = super
|
|
122
|
+
result[:enum] = enum if enum?
|
|
123
|
+
result[:format] = format
|
|
124
|
+
result[:max] = max
|
|
125
|
+
result[:min] = min
|
|
126
|
+
result
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Apiwork
|
|
4
|
+
module Introspection
|
|
5
|
+
module Param
|
|
6
|
+
# @api public
|
|
7
|
+
# Literal param representing a constant value.
|
|
8
|
+
#
|
|
9
|
+
# @example Basic usage
|
|
10
|
+
# param.type # => :literal
|
|
11
|
+
# param.literal? # => true
|
|
12
|
+
# param.scalar? # => false
|
|
13
|
+
#
|
|
14
|
+
# @example Value
|
|
15
|
+
# param.value # => "active" or 42 or true
|
|
16
|
+
class Literal < Base
|
|
17
|
+
# @api public
|
|
18
|
+
# The value for this param.
|
|
19
|
+
#
|
|
20
|
+
# @return [String, Numeric, Boolean, nil]
|
|
21
|
+
def value
|
|
22
|
+
@dump[:value]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# @api public
|
|
26
|
+
# Whether this param is a literal.
|
|
27
|
+
#
|
|
28
|
+
# @return [Boolean]
|
|
29
|
+
def literal?
|
|
30
|
+
true
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# @api public
|
|
34
|
+
# Converts this param to a hash.
|
|
35
|
+
#
|
|
36
|
+
# @return [Hash]
|
|
37
|
+
def to_h
|
|
38
|
+
result = super
|
|
39
|
+
result[:value] = value
|
|
40
|
+
result
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Apiwork
|
|
4
|
+
module Introspection
|
|
5
|
+
module Param
|
|
6
|
+
# @api public
|
|
7
|
+
# Number param representing floating-point number values.
|
|
8
|
+
#
|
|
9
|
+
# @example Basic usage
|
|
10
|
+
# param.type # => :number
|
|
11
|
+
# param.scalar? # => true
|
|
12
|
+
# param.number? # => 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 # => [0.5, 1.0, 1.5]
|
|
24
|
+
# param.enum_reference? # => false
|
|
25
|
+
# end
|
|
26
|
+
class Number < 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 number.
|
|
93
|
+
#
|
|
94
|
+
# @return [Boolean]
|
|
95
|
+
def number?
|
|
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
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Apiwork
|
|
4
|
+
module Introspection
|
|
5
|
+
module Param
|
|
6
|
+
# @api public
|
|
7
|
+
# Object param representing structured data with named fields.
|
|
8
|
+
#
|
|
9
|
+
# @example Basic usage
|
|
10
|
+
# param.type # => :object
|
|
11
|
+
# param.object? # => true
|
|
12
|
+
# param.scalar? # => false
|
|
13
|
+
#
|
|
14
|
+
# @example Fields
|
|
15
|
+
# param.shape # => { name: Param, email: Param }
|
|
16
|
+
#
|
|
17
|
+
# @example Partial objects (for updates)
|
|
18
|
+
# param.partial? # => true if all fields are optional
|
|
19
|
+
class Object < Base
|
|
20
|
+
# @api public
|
|
21
|
+
# The shape for this param.
|
|
22
|
+
#
|
|
23
|
+
# @return [Hash{Symbol => Param::Base}]
|
|
24
|
+
def shape
|
|
25
|
+
return @shape if defined?(@shape)
|
|
26
|
+
|
|
27
|
+
@shape = @dump[:shape]&.transform_values { |dump| Param.build(dump) } || {}
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# @api public
|
|
31
|
+
# Whether this param is partial.
|
|
32
|
+
#
|
|
33
|
+
# @return [Boolean]
|
|
34
|
+
def partial?
|
|
35
|
+
@dump[:partial]
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# @api public
|
|
39
|
+
# Whether this param is an object.
|
|
40
|
+
#
|
|
41
|
+
# @return [Boolean]
|
|
42
|
+
def object?
|
|
43
|
+
true
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# @api public
|
|
47
|
+
# Converts this param to a hash.
|
|
48
|
+
#
|
|
49
|
+
# @return [Hash]
|
|
50
|
+
def to_h
|
|
51
|
+
result = super
|
|
52
|
+
result[:partial] = partial?
|
|
53
|
+
result[:shape] = shape.transform_values(&:to_h)
|
|
54
|
+
result
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Apiwork
|
|
4
|
+
module Introspection
|
|
5
|
+
module Param
|
|
6
|
+
# @api public
|
|
7
|
+
# Reference param representing a reference to a named type.
|
|
8
|
+
#
|
|
9
|
+
# @example Basic usage
|
|
10
|
+
# param.type # => :reference
|
|
11
|
+
# param.reference? # => true
|
|
12
|
+
# param.scalar? # => false
|
|
13
|
+
#
|
|
14
|
+
# @example Reference
|
|
15
|
+
# param.reference # => :address
|
|
16
|
+
class Reference < Base
|
|
17
|
+
# @api public
|
|
18
|
+
# The reference for this param.
|
|
19
|
+
#
|
|
20
|
+
# @return [Symbol]
|
|
21
|
+
def reference
|
|
22
|
+
@dump[:reference]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# @api public
|
|
26
|
+
# Whether this param is a reference.
|
|
27
|
+
#
|
|
28
|
+
# @return [Boolean]
|
|
29
|
+
def reference?
|
|
30
|
+
true
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# @api public
|
|
34
|
+
# Converts this param to a hash.
|
|
35
|
+
#
|
|
36
|
+
# @return [Hash]
|
|
37
|
+
def to_h
|
|
38
|
+
result = super
|
|
39
|
+
result[:reference] = reference
|
|
40
|
+
result
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Apiwork
|
|
4
|
+
module Introspection
|
|
5
|
+
module Param
|
|
6
|
+
# @api public
|
|
7
|
+
# String param representing text values.
|
|
8
|
+
#
|
|
9
|
+
# @example Basic usage
|
|
10
|
+
# param.type # => :string
|
|
11
|
+
# param.scalar? # => true
|
|
12
|
+
# param.string? # => true
|
|
13
|
+
#
|
|
14
|
+
# @example Constraints
|
|
15
|
+
# param.min # => 1 or nil
|
|
16
|
+
# param.max # => 255 or nil
|
|
17
|
+
# param.format # => :email or nil
|
|
18
|
+
# param.boundable? # => true
|
|
19
|
+
# param.formattable? # => true
|
|
20
|
+
#
|
|
21
|
+
# @example Enum
|
|
22
|
+
# if param.enum?
|
|
23
|
+
# param.enum # => ["draft", "published"]
|
|
24
|
+
# param.enum_reference? # => false
|
|
25
|
+
# end
|
|
26
|
+
class String < Base
|
|
27
|
+
# @api public
|
|
28
|
+
# The format for this param.
|
|
29
|
+
#
|
|
30
|
+
# @return [Symbol, nil]
|
|
31
|
+
def format
|
|
32
|
+
@dump[:format]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# @api public
|
|
36
|
+
# The minimum for this param.
|
|
37
|
+
#
|
|
38
|
+
# @return [Integer, nil]
|
|
39
|
+
def min
|
|
40
|
+
@dump[:min]
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# @api public
|
|
44
|
+
# The maximum for this param.
|
|
45
|
+
#
|
|
46
|
+
# @return [Integer, nil]
|
|
47
|
+
def max
|
|
48
|
+
@dump[:max]
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# @api public
|
|
52
|
+
# Whether this param is scalar.
|
|
53
|
+
#
|
|
54
|
+
# @return [Boolean]
|
|
55
|
+
def scalar?
|
|
56
|
+
true
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# @api public
|
|
60
|
+
# Whether this param has an enum.
|
|
61
|
+
#
|
|
62
|
+
# @return [Boolean]
|
|
63
|
+
def enum?
|
|
64
|
+
@dump[:enum].present?
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# @api public
|
|
68
|
+
# The enum for this param.
|
|
69
|
+
#
|
|
70
|
+
# @return [Array<String>, Symbol, nil]
|
|
71
|
+
def enum
|
|
72
|
+
@dump[:enum]
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# @api public
|
|
76
|
+
# Whether this param is an enum reference.
|
|
77
|
+
#
|
|
78
|
+
# @return [Boolean]
|
|
79
|
+
def enum_reference?
|
|
80
|
+
@dump[:enum].is_a?(Symbol)
|
|
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 formattable.
|
|
93
|
+
#
|
|
94
|
+
# @return [Boolean]
|
|
95
|
+
def formattable?
|
|
96
|
+
true
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# @api public
|
|
100
|
+
# Whether this param is a string.
|
|
101
|
+
#
|
|
102
|
+
# @return [Boolean]
|
|
103
|
+
def string?
|
|
104
|
+
true
|
|
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[:format] = format
|
|
115
|
+
result[:max] = max
|
|
116
|
+
result[:min] = min
|
|
117
|
+
result
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Apiwork
|
|
4
|
+
module Introspection
|
|
5
|
+
module Param
|
|
6
|
+
# @api public
|
|
7
|
+
# Time param representing time-of-day values.
|
|
8
|
+
#
|
|
9
|
+
# @example Basic usage
|
|
10
|
+
# param.type # => :time
|
|
11
|
+
# param.scalar? # => true
|
|
12
|
+
# param.time? # => true
|
|
13
|
+
#
|
|
14
|
+
# @example Capabilities
|
|
15
|
+
# param.formattable? # => false
|
|
16
|
+
#
|
|
17
|
+
# @example Enum
|
|
18
|
+
# if param.enum?
|
|
19
|
+
# param.enum # => ["09:00", "17:00"]
|
|
20
|
+
# param.enum_reference? # => false
|
|
21
|
+
# end
|
|
22
|
+
class Time < 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 time.
|
|
57
|
+
#
|
|
58
|
+
# @return [Boolean]
|
|
59
|
+
def time?
|
|
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,57 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Apiwork
|
|
4
|
+
module Introspection
|
|
5
|
+
module Param
|
|
6
|
+
# @api public
|
|
7
|
+
# Union param representing a value that can be one of several types.
|
|
8
|
+
#
|
|
9
|
+
# @example Basic usage
|
|
10
|
+
# param.type # => :union
|
|
11
|
+
# param.union? # => true
|
|
12
|
+
# param.scalar? # => false
|
|
13
|
+
#
|
|
14
|
+
# @example Variants
|
|
15
|
+
# param.variants # => [Param, Param, ...]
|
|
16
|
+
#
|
|
17
|
+
# @example Discriminated unions
|
|
18
|
+
# param.discriminator # => :type or nil
|
|
19
|
+
class Union < Base
|
|
20
|
+
# @api public
|
|
21
|
+
# The variants for this param.
|
|
22
|
+
#
|
|
23
|
+
# @return [Array<Param::Base>]
|
|
24
|
+
def variants
|
|
25
|
+
@variants ||= @dump[:variants].map { |dump| Param.build(dump) }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# @api public
|
|
29
|
+
# The discriminator for this param.
|
|
30
|
+
#
|
|
31
|
+
# @return [Symbol, nil]
|
|
32
|
+
def discriminator
|
|
33
|
+
@dump[:discriminator]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# @api public
|
|
37
|
+
# Whether this param is a union.
|
|
38
|
+
#
|
|
39
|
+
# @return [Boolean]
|
|
40
|
+
def union?
|
|
41
|
+
true
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# @api public
|
|
45
|
+
# Converts this param to a hash.
|
|
46
|
+
#
|
|
47
|
+
# @return [Hash]
|
|
48
|
+
def to_h
|
|
49
|
+
result = super
|
|
50
|
+
result[:discriminator] = discriminator
|
|
51
|
+
result[:variants] = variants.map(&:to_h)
|
|
52
|
+
result
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Apiwork
|
|
4
|
+
module Introspection
|
|
5
|
+
module Param
|
|
6
|
+
# @api public
|
|
7
|
+
# Unknown param representing an unrecognized type.
|
|
8
|
+
#
|
|
9
|
+
# Used as a fallback when the type cannot be determined during introspection.
|
|
10
|
+
#
|
|
11
|
+
# @example Basic usage
|
|
12
|
+
# param.type # => :unknown
|
|
13
|
+
# param.unknown? # => true
|
|
14
|
+
# param.scalar? # => false
|
|
15
|
+
class Unknown < Base
|
|
16
|
+
# @api public
|
|
17
|
+
# Whether this param is of unknown type.
|
|
18
|
+
#
|
|
19
|
+
# @return [Boolean]
|
|
20
|
+
def unknown?
|
|
21
|
+
true
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|