yori 0.1.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 (58) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +14 -0
  3. data/.gitignore +11 -0
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +15 -0
  6. data/.ruby-version +1 -0
  7. data/.travis.yml +7 -0
  8. data/CODE_OF_CONDUCT.md +74 -0
  9. data/Gemfile +6 -0
  10. data/Gemfile.lock +35 -0
  11. data/LICENSE.txt +21 -0
  12. data/README.md +44 -0
  13. data/Rakefile +6 -0
  14. data/bin/console +14 -0
  15. data/bin/setup +8 -0
  16. data/lib/yori.rb +16 -0
  17. data/lib/yori/errors/field_must_not_be_specified_error.rb +5 -0
  18. data/lib/yori/errors/invalid_schema_error.rb +5 -0
  19. data/lib/yori/errors/missing_required_field_error.rb +5 -0
  20. data/lib/yori/errors/unknown_component_error.rb +7 -0
  21. data/lib/yori/schema/any.rb +22 -0
  22. data/lib/yori/schema/v3.rb +10 -0
  23. data/lib/yori/schema/v3/callback.rb +15 -0
  24. data/lib/yori/schema/v3/components.rb +70 -0
  25. data/lib/yori/schema/v3/composer.rb +36 -0
  26. data/lib/yori/schema/v3/contact.rb +15 -0
  27. data/lib/yori/schema/v3/discriminator.rb +25 -0
  28. data/lib/yori/schema/v3/encoding.rb +33 -0
  29. data/lib/yori/schema/v3/example.rb +20 -0
  30. data/lib/yori/schema/v3/external_documentation.rb +18 -0
  31. data/lib/yori/schema/v3/header.rb +32 -0
  32. data/lib/yori/schema/v3/info.rb +27 -0
  33. data/lib/yori/schema/v3/license.rb +18 -0
  34. data/lib/yori/schema/v3/link.rb +46 -0
  35. data/lib/yori/schema/v3/media_type.rb +35 -0
  36. data/lib/yori/schema/v3/oauth_flow.rb +35 -0
  37. data/lib/yori/schema/v3/oauth_flows.rb +51 -0
  38. data/lib/yori/schema/v3/openapi.rb +61 -0
  39. data/lib/yori/schema/v3/operation.rb +72 -0
  40. data/lib/yori/schema/v3/parameter.rb +63 -0
  41. data/lib/yori/schema/v3/path_item.rb +47 -0
  42. data/lib/yori/schema/v3/paths.rb +44 -0
  43. data/lib/yori/schema/v3/request_body.rb +27 -0
  44. data/lib/yori/schema/v3/response.rb +34 -0
  45. data/lib/yori/schema/v3/responses.rb +42 -0
  46. data/lib/yori/schema/v3/root.rb +40 -0
  47. data/lib/yori/schema/v3/schema.rb +35 -0
  48. data/lib/yori/schema/v3/security_requirement.rb +23 -0
  49. data/lib/yori/schema/v3/security_scheme.rb +93 -0
  50. data/lib/yori/schema/v3/server.rb +24 -0
  51. data/lib/yori/schema/v3/server_variable.rb +25 -0
  52. data/lib/yori/schema/v3/tag.rb +28 -0
  53. data/lib/yori/schema/v3/xml.rb +28 -0
  54. data/lib/yori/schema_base.rb +110 -0
  55. data/lib/yori/schema_validator.rb +40 -0
  56. data/lib/yori/version.rb +3 -0
  57. data/yori.gemspec +44 -0
  58. metadata +142 -0
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yori/schema/v3/external_documentation'
4
+ require 'yori/schema/v3/parameter'
5
+ require 'yori/schema/v3/request_body'
6
+ require 'yori/schema/v3/responses'
7
+ require 'yori/schema/v3/callback'
8
+ require 'yori/schema/v3/security_requirement'
9
+ require 'yori/schema/v3/server'
10
+
11
+ module Yori
12
+ module Schema
13
+ module V3
14
+ # Operaion: Describes a single API operation on a path.
15
+ class Operation < Yori::SchemaBase
16
+ # @!method tags
17
+ # A list of tags for API documentation control.
18
+ # Tags can be used for logical grouping of operations by resources or any other qualifier.
19
+ # @!method summary A short summary of what the operation does.
20
+ # @!method description
21
+ # A verbose explanation of the operation behavior.
22
+ # CommonMark syntax MAY be used for rich text representation.
23
+ # @!method operationId
24
+ # Unique string used to identify the operation. The id MUST be unique among all operations described in the API.
25
+ # Tools and libraries MAY use the operationId to uniquely identify an operation,
26
+ # therefore, it is RECOMMENDED to follow common programming naming conventions.
27
+ # @!method deprecated
28
+ # Declares this operation to be deprecated. Consumers SHOULD refrain from usage of the declared operation.
29
+ # Default value is false.
30
+ fields :tags, :summary, :description, :operationId, :deprecated
31
+ # @!method externalDocs
32
+ # Additional external documentation for this operation.
33
+ field_block :externalDocs, Yori::Schema::V3::ExternalDocumentation
34
+ # @!method parameters
35
+ # A list of parameters that are applicable for this operation.
36
+ # If a parameter is already defined at the Path Item, the new definition will override it but can never remove it.
37
+ # The list MUST NOT include duplicated parameters. A unique parameter is defined by a combination of a name and location.
38
+ # The list can use the Reference Object to link to parameters that are defined at the OpenAPI Object's components/parameters.
39
+ array_field_block :parameters, :parameter, Yori::Schema::V3::Parameter
40
+ # @!method requestBody
41
+ # The request body applicable for this operation.
42
+ # The requestBody is only supported in HTTP methods where the HTTP 1.1 specification RFC7231 has explicitly defined semantics for request bodies.
43
+ # In other cases where the HTTP spec is vague, requestBody SHALL be ignored by consumers.
44
+ field_block :requestBody, Yori::Schema::V3::RequestBody
45
+ # @!method responses
46
+ # REQUIRED. The list of possible responses as they are returned from executing this operation.
47
+ field_block :responses, Yori::Schema::V3::Responses
48
+ # @!method callbacks
49
+ # A map of possible out-of band callbacks related to the parent operation.
50
+ # The key is a unique identifier for the Callback Object.
51
+ # Each value in the map is a Callback Object that describes a request that may be initiated by the API provider and the expected responses.
52
+ # The key value used to identify the callback object is an expression, evaluated at runtime, that identifies a URL to use for the callback operation.
53
+ hash_field_block :callbacks, :callback, Yori::Schema::V3::Callback
54
+ # @!method security
55
+ # A declaration of which security mechanisms can be used for this operation.
56
+ # The list of values includes alternative security requirement objects that can be used.
57
+ # Only one of the security requirement objects need to be satisfied to authorize a request.
58
+ # This definition overrides any declared top-level security.
59
+ # To remove a top-level security declaration, an empty array can be used.
60
+ array_field_block :security, :schemes, Yori::Schema::V3::SecurityRequirement
61
+ # @!method servers
62
+ # An alternative server array to service this operation.
63
+ # If an alternative server object is specified at the Path Item Object or Root level, it will be overridden by this value.
64
+ array_field_block :servers, :server, Yori::Schema::V3::Server
65
+
66
+ def validate!
67
+ validate_require_fields!('responses')
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yori/schema/v3/schema'
4
+ require 'yori/schema/v3/example'
5
+ require 'yori/schema/v3/media_type'
6
+
7
+ module Yori
8
+ module Schema
9
+ module V3
10
+ # Parameter: Describes a single operation parameter.
11
+ class Parameter < Yori::SchemaBase
12
+ fields :name, :description, :required, :deprecated, :allowEmptyValue
13
+
14
+ def in_query
15
+ self['in'] = 'query'
16
+ end
17
+
18
+ def in_header
19
+ self['in'] = 'header'
20
+ end
21
+
22
+ def in_path
23
+ self['in'] = 'path'
24
+ end
25
+
26
+ def in_cookie
27
+ self['in'] = 'cookie'
28
+ end
29
+
30
+ fields :style, :explode, :allowReserved
31
+ field_block :schema, Yori::Schema::V3::Schema
32
+
33
+ def example_any(value)
34
+ self['example'] = value
35
+ end
36
+
37
+ hash_field_block :examples, :example, Yori::Schema::V3::Example
38
+ hash_field_block :content, :content_type, Yori::Schema::V3::MediaType
39
+
40
+ def validate!
41
+ validate_require_fields!('name', 'in')
42
+ validate_in!
43
+ validate_schema_or_content!
44
+ end
45
+
46
+ def validate_in!
47
+ validate_limit_field_values!('in', 'query', 'header', 'path', 'cookie')
48
+ in_value = self['in']
49
+
50
+ case in_value
51
+ when 'path'
52
+ validate_require_fields!('required')
53
+ validate_limit_field_values!('required', true)
54
+ end
55
+ end
56
+
57
+ def validate_schema_or_content!
58
+ validate_mutually_exclusive_fields!('schema', 'content')
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yori/schema/v3/operation'
4
+ require 'yori/schema/v3/server'
5
+ require 'yori/schema/v3/parameter'
6
+
7
+ module Yori
8
+ module Schema
9
+ module V3
10
+ # PathItem
11
+ # Describes the operations available on a single path.
12
+ # A Path Item MAY be empty, due to ACL constraints.
13
+ # The path itself is still exposed to the documentation viewer but they will not know which operations and parameters are available.
14
+ class PathItem < Yori::SchemaBase
15
+ # @!method summary
16
+ # An optional, string summary, intended to apply to all operations in this path.
17
+ # @!method description
18
+ # An optional, string description, intended to apply to all operations in this path.
19
+ # CommonMark syntax MAY be used for rich text representation.
20
+ fields :summary, :description
21
+
22
+ # @!method get A definition of a GET operation on this path.
23
+ # @!method put A definition of a PUT operation on this path.
24
+ # @!method post A definition of a POST operation on this path.
25
+ # @!method delete A definition of a DELETE operation on this path.
26
+ # @!method options A definition of a OPTIONS operation on this path.
27
+ # @!method head A definition of a HEAD operation on this path.
28
+ # @!method patch A definition of a PATH operation on this path.
29
+ # @!method trace A definition of a TRACE operation on this path.
30
+ %i[get put post delete options head patch trace].each do |method|
31
+ field_block method, Yori::Schema::V3::Operation
32
+ end
33
+
34
+ # @!method servers
35
+ # An alternative server array to service all operations in this path.
36
+ array_field_block :servers, :server, Yori::Schema::V3::Server
37
+
38
+ # @!method parameters
39
+ # A list of parameters that are applicable for all the operations described under this path.
40
+ # These parameters can be overridden at the operation level, but cannot be removed there.
41
+ # The list MUST NOT include duplicated parameters. A unique parameter is defined by a combination of a name and location.
42
+ # The list can use the Reference Object to link to parameters that are defined at the OpenAPI Object's components/parameters.
43
+ array_field_block :parameters, :parameter, Yori::Schema::V3::Parameter
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yori/schema/v3/path_item'
4
+
5
+ module Yori
6
+ module Schema
7
+ module V3
8
+ # Paths
9
+ # Holds the relative paths to the individual endpoints and their operations.
10
+ # The path is appended to the URL from the Server Object in order to construct the full URL.
11
+ # The Paths MAY be empty, due to ACL constraints.
12
+ class Paths < Yori::SchemaBase
13
+ # @!method path
14
+ # A relative path to an individual endpoint. The field name MUST begin with a slash.
15
+ # The path is appended (no relative URL resolution) to the expanded URL from the Server Object's url field in order to construct the full URL.
16
+ # Path templating is allowed. When matching URLs, concrete (non-templated) paths would be matched before their templated counterparts.
17
+ # Templated paths with the same hierarchy but different templated names MUST NOT exist as they are identical.
18
+ # In case of ambiguous matching, it's up to the tooling to decide which one to use.
19
+ def path(path_temp, value = nil, &block)
20
+ path_temp = '/' + path_temp unless path_temp.start_with?('/')
21
+ self[path_temp] = self.class.eval_input!(Yori::Schema::V3::PathItem, id, value, &block)
22
+ end
23
+
24
+ def merge_registered!
25
+ self.class.registered_path[id]&.each do |_path, block|
26
+ instance_eval(&block)
27
+ end
28
+ end
29
+
30
+ class << self
31
+ def registered_path
32
+ @registered_path ||= {}
33
+ end
34
+
35
+ def register_path(id, path, value = nil, &block)
36
+ @registered_path ||= {}
37
+ @registered_path[id] ||= {}
38
+ @registered_path[id][path] = proc { path(path, value, &block) }
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yori/schema/v3/media_type'
4
+
5
+ module Yori
6
+ module Schema
7
+ module V3
8
+ # RequestBody: Describes a single request body.
9
+ class RequestBody < Yori::SchemaBase
10
+ # @!method description
11
+ # A brief description of the request body. This could contain examples of use.
12
+ # CommonMark syntax MAY be used for rich text representation.
13
+ # @!method required
14
+ # Determines if the request body is required in the request. Defaults to false.
15
+ fields :description, :required
16
+ # @!method content
17
+ # REQUIRED. The content of the request body. The key is a media type or media type range and the value describes it.
18
+ # For requests that match multiple keys, only the most specific key is applicable. e.g. text/plain overrides text/*
19
+ hash_field_block :content, :content_type, Yori::Schema::V3::MediaType
20
+
21
+ def validate!
22
+ validate_require_fields!('content')
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yori/schema/v3/header'
4
+ require 'yori/schema/v3/media_type'
5
+ require 'yori/schema/v3/link'
6
+
7
+ module Yori
8
+ module Schema
9
+ module V3
10
+ # Response: Describes a single response from an API Operation, including design-time, static links to operations based on the response.
11
+ class Response < Yori::SchemaBase
12
+ # @!method description
13
+ # REQUIRED. A short description of the response. CommonMark syntax MAY be used for rich text representation.
14
+ fields :description
15
+ # @!method headers
16
+ # Maps a header name to its definition. RFC7230 states header names are case insensitive.
17
+ # If a response header is defined with the name "Content-Type", it SHALL be ignored.
18
+ hash_field_block :headers, :header, Yori::Schema::V3::Header
19
+ # @!method content
20
+ # A map containing descriptions of potential response payloads. The key is a media type or media type range and the value describes it.
21
+ # For responses that match multiple keys, only the most specific key is applicable. e.g. text/plain overrides text/*
22
+ hash_field_block :content, :content_type, Yori::Schema::V3::MediaType
23
+ # @!method links
24
+ # A map of operations links that can be followed from the response.
25
+ # The key of the map is a short name for the link, following the naming constraints of the names for Component Objects.
26
+ hash_field_block :links, :link, Yori::Schema::V3::Link
27
+
28
+ def validate!
29
+ validate_require_fields!('description')
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yori/schema/v3/response'
4
+
5
+ module Yori
6
+ module Schema
7
+ module V3
8
+ # Responses:
9
+ # A container for the expected responses of an operation.
10
+ # The container maps a HTTP response code to the expected response.
11
+ # The documentation is not necessarily expected to cover all possible HTTP response codes because they may not be known in advance.
12
+ # However, documentation is expected to cover a successful operation response and any known errors.
13
+ # The default MAY be used as a default response object for all HTTP codes that are not covered individually by the specification.
14
+ # The Responses Object MUST contain at least one response code, and it SHOULD be the response for a successful operation call.
15
+ class Responses < Yori::SchemaBase
16
+ # @!method default
17
+ # The documentation of responses other than the ones declared for specific HTTP response codes.
18
+ # Use this field to cover undeclared responses. A Reference Object can link to a response that the OpenAPI Object's components/responses section defines.
19
+ field_block :default, Yori::Schema::V3::Response
20
+
21
+ # @!method response
22
+ # Any HTTP status code can be used as the property name, but only one property per code, to describe the expected response for that HTTP status code.
23
+ # A Reference Object can link to a response that is defined in the OpenAPI Object's components/responses section.
24
+ # This field MUST be enclosed in quotation marks (for example, "200") for compatibility between JSON and YAML.
25
+ # To define a range of response codes, this field MAY contain the uppercase wildcard character X.
26
+ # For example, 2XX represents all response codes between [200-299]. The following range definitions are allowed: 1XX, 2XX, 3XX, 4XX, and 5XX.
27
+ # If a response range is defined using an explicit code, the explicit code definition takes precedence over the range definition for that code.
28
+ def response(status_code, &block)
29
+ self[status_code.to_s] = self.class.eval_class!(Yori::Schema::V3::Response, id, &block)
30
+ end
31
+
32
+ alias status response
33
+ alias http_status_code response
34
+
35
+ def validate!
36
+ status_keys = keys.reject { |x| x == 'default' }
37
+ raise Yori::Errors::InvalidSchemaError, 'The Responses Object MUST contain at least one response code.' if status_keys.empty?
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Yori
4
+ module Schema
5
+ module V3
6
+ # Root
7
+ module Root
8
+ def self.included(klass)
9
+ klass.class_eval do
10
+ class << self
11
+ def api_docs_factory
12
+ @_api_docs_factory
13
+ end
14
+
15
+ def api_docs
16
+ return unless api_docs_factory
17
+
18
+ openapi = api_docs_factory.call
19
+ openapi.to_json
20
+ end
21
+
22
+ def root(id = '', &block)
23
+ @_api_docs_factory = proc do
24
+ Yori::Schema::V3::OpenAPI.new.tap do |openapi|
25
+ openapi.id = id
26
+ openapi.instance_eval(&block)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ def api_docs
35
+ self.class.api_docs
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yori/schema/v3/discriminator'
4
+ require 'yori/schema/v3/xml'
5
+ require 'yori/schema/v3/external_documentation'
6
+
7
+ module Yori
8
+ module Schema
9
+ module V3
10
+ # Schema: The Schema Object allows the definition of input and output data types.
11
+ # These types can be objects, but also primitives and arrays. This object is an extended subset of the JSON Schema Specification Wright Draft 00.
12
+ class Schema < SchemaBase
13
+ fields :title, :type, :description, :format, :default
14
+ fields :multipleOf, :maximum, :exclusiveMaximum, :minimum, :exclusiveMinimum, :maxLength, :minLength
15
+ fields :pattern, :maxItems, :minItems, :uniqueItems
16
+ fields :maxProperties, :minProperties, :required, :enum
17
+
18
+ array_field_block :allOf, :allOfItem, Yori::Schema::V3::Schema
19
+ array_field_block :oneOf, :oneOfItem, Yori::Schema::V3::Schema
20
+ array_field_block :anyOf, :anyOfItem, Yori::Schema::V3::Schema
21
+ array_field_block :not, :notItem, Yori::Schema::V3::Schema
22
+
23
+ field_block :items, Yori::Schema::V3::Schema
24
+ hash_field_block :properties, :property, Yori::Schema::V3::Schema
25
+ field_block :additionalProperties, Yori::Schema::V3::Schema
26
+
27
+ fields :nullable, :readOnly, :writeOnly, :deprecated
28
+ field_block :discriminator, Yori::Schema::V3::Discriminator
29
+ field_block :xml, Yori::Schema::V3::XML
30
+ field_block :externalDocs, Yori::Schema::V3::ExternalDocumentation
31
+ field_block :example, Yori::Schema::Any
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Yori
4
+ module Schema
5
+ module V3
6
+ # SecurityRequirement:
7
+ # Lists the required security schemes to execute this operation.
8
+ # The name used for each property MUST correspond to a security scheme declared in the Security Schemes under the Components Object.
9
+ class SecurityRequirement < Yori::SchemaBase
10
+ # @!method scheme
11
+ # Each key MUST correspond to a security scheme which is declared in the Security Schemes under the Components Object.
12
+ # If the security scheme is of type "oauth2" or "openIdConnect", then the value is a list of scope names required for the execution.
13
+ # For other security scheme types, the array MUST be empty.
14
+ def scheme(key, scopes)
15
+ self[key.to_s] ||= []
16
+ self[key.to_s].concat(scopes)
17
+ end
18
+
19
+ # TODO: validate with related SecurityScheme type...
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yori/schema/v3/oauth_flows'
4
+
5
+ module Yori
6
+ module Schema
7
+ module V3
8
+ # SecurityScheme:
9
+ # Defines a security scheme that can be used by the operations.
10
+ # Supported schemes are HTTP authentication, an API key (either as a header or as a query parameter),
11
+ # OAuth2's common flows (implicit, password, application and access code) as defined in RFC6749, and OpenID Connect Discovery.
12
+ class SecurityScheme < Yori::SchemaBase
13
+ # @!method type :Applies To Any;
14
+ # REQUIRED. The type of the security scheme.
15
+ # Valid values are "apiKey", "http", "oauth2", "openIdConnect"
16
+ # @!method description :Applies To Any;
17
+ # A short description for security scheme. CommonMark syntax MAY be used for rich text representation.
18
+ # @!method name :Applies To apiKey;
19
+ # REQUIRED. The name of the header, query or cookie parameter to be used.
20
+ fields :type, :description, :name
21
+
22
+ # @!method in_query
23
+ # Set 'query' value to 'in' field.
24
+ def in_query
25
+ self['in'] = 'query'
26
+ end
27
+
28
+ # @!method in_header
29
+ # Set 'header' value to 'in' field.
30
+ def in_header
31
+ self['in'] = 'header'
32
+ end
33
+
34
+ # @!method in_cookie
35
+ # Set 'cookie' value to 'in' field.
36
+ def in_cookie
37
+ self['in'] = 'cookie'
38
+ end
39
+
40
+ # @!method scheme :Applies To http;
41
+ # REQUIRED. The name of the HTTP Authorization scheme to be used in the Authorization header as defined in RFC7235.
42
+ # @!method bearerFormat :Applies To http ("bearer");
43
+ # A hint to the client to identify how the bearer token is formatted.
44
+ # Bearer tokens are usually generated by an authorization server, so this information is primarily for documentation purposes.
45
+ fields :scheme, :bearerFormat
46
+
47
+ # @!method flows :Applies To oauth2;
48
+ # REQUIRED. An object containing configuration information for the flow types supported.
49
+ field_block :flows, Yori::Schema::V3::OAuthFlows
50
+
51
+ # @!method openIdConnectUrl :Applies To openIdConnect
52
+ # REQUIRED. OpenId Connect URL to discover OAuth2 configuration values. This MUST be in the form of a URL.
53
+ fields :openIdConnectUrl
54
+
55
+ def validate!
56
+ validate_type!
57
+ case self['type']
58
+ when 'apiKey'
59
+ validate_as_api_key!
60
+ when 'http'
61
+ validate_as_http!
62
+ when 'oauth2'
63
+ validate_as_oauth2!
64
+ when 'openIdConnect'
65
+ validate_as_open_id_connect!
66
+ end
67
+ end
68
+
69
+ def validate_type!
70
+ validate_require_fields!('type')
71
+ validate_limit_field_values!('type', 'apiKey', 'http', 'oauth2', 'openIdConnect')
72
+ end
73
+
74
+ def validate_as_api_key!
75
+ validate_require_fields!('name', 'in')
76
+ validate_limit_field_values!('in', 'query', 'header', 'cookie')
77
+ end
78
+
79
+ def validate_as_http!
80
+ validate_require_fields!('scheme')
81
+ end
82
+
83
+ def validate_as_oauth2!
84
+ validate_require_fields!('flows')
85
+ end
86
+
87
+ def validate_as_open_id_connect!
88
+ validate_require_fields!('openIdConnectUrl')
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end