openapi_parser 2.2.1 → 2.2.3
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/CHANGELOG.md +6 -0
- data/README.md +5 -5
- data/SECURITY.md +6 -0
- data/lib/openapi_parser/errors.rb +22 -0
- data/lib/openapi_parser/request_operation.rb +2 -1
- data/lib/openapi_parser/schema_validator/all_of_validator.rb +1 -1
- data/lib/openapi_parser/schema_validator/object_validator.rb +3 -1
- data/lib/openapi_parser/schema_validator/properties_number.rb +30 -0
- data/lib/openapi_parser/schema_validator/string_validator.rb +2 -0
- data/lib/openapi_parser/schema_validator.rb +1 -0
- data/lib/openapi_parser/schemas/response.rb +9 -2
- data/lib/openapi_parser/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fcf4eb8daf0d179a7bda7dc584020f64ec8ee52ea0dcaddb4d532122f00b2f41
|
4
|
+
data.tar.gz: 9a5742b5f563e3d54d1739cd95e9b7da4f7da6a65ffe1180f9a4908ad93010e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e7af1fc0b83d2b05b51d9005d45133194bffbdbbe56ec0029564d7e79332652dbbf729defaa7138f6d25df718b54467847b78315a7c747fc0bcfcda4ccba4bf2
|
7
|
+
data.tar.gz: 32384fce5b9e39674d1fd3fd9a565fa93d0ac5610a22159e6735cefec2ec02219c16305b4cf448ca7faeeace2f8fd82758c16c6b50ba998da6d203269d530c95
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
## Unreleased
|
2
2
|
|
3
|
+
## 2.2.3 (2024-12-12)
|
4
|
+
* fix parent_discriminator_schema nil from all_of_validator #179
|
5
|
+
|
6
|
+
## 2.2.2 (2024-11-21)
|
7
|
+
* make content-type lookup case-insensitive #178
|
8
|
+
|
3
9
|
## 2.2.1 (2024-10-23)
|
4
10
|
* revert schemas validation in additionalProperties and remove additionalProperties logic from allof (breaking things for me, will revisit)
|
5
11
|
|
data/README.md
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
[](https://www.rubydoc.info/gems/openapi_parser)
|
5
5
|
[](https://inch-ci.org/github/ota42y/openapi_parser)
|
6
6
|
|
7
|
-
This is OpenAPI3 parser and validator.
|
7
|
+
This is OpenAPI3 parser and validator.
|
8
8
|
|
9
9
|
## Usage
|
10
10
|
|
@@ -27,8 +27,8 @@ request_operation.path_params
|
|
27
27
|
# => {"template_name"=>"1"}
|
28
28
|
|
29
29
|
# coerce parameter
|
30
|
-
root = OpenAPIParser.parse(YAML.load_file('open_api_3/schema.yml'), {coerce_value: true, datetime_coerce_class: DateTime})
|
31
|
-
request_operation = root.request_operation(:get, '/string_params_coercer')
|
30
|
+
root = OpenAPIParser.parse(YAML.load_file('open_api_3/schema.yml'), {coerce_value: true, datetime_coerce_class: DateTime})
|
31
|
+
request_operation = root.request_operation(:get, '/string_params_coercer')
|
32
32
|
request_operation.validate_request_parameter({'integer_1' => '1', 'datetime_string' => '2016-04-01T16:00:00+09:00'})
|
33
33
|
# => {"integer_1"=>1, "datetime_string"=>#<DateTime: 2016-04-01T16:00:00+09:00 ((2457480j,25200s,0n),+32400s,2299161j)>
|
34
34
|
# convert number string to Integer and datetime string to DateTime class
|
@@ -52,7 +52,7 @@ Or install it yourself as:
|
|
52
52
|
$ gem install openapi_parser
|
53
53
|
|
54
54
|
## Additional features
|
55
|
-
OpenAPI Parser's validation based on [OpenAPI spec](https://github.com/OAI/OpenAPI-Specification)
|
55
|
+
OpenAPI Parser's validation based on [OpenAPI spec](https://github.com/OAI/OpenAPI-Specification)
|
56
56
|
But we support few useful features.
|
57
57
|
|
58
58
|
### type validation
|
@@ -109,4 +109,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
109
109
|
|
110
110
|
## Code of Conduct
|
111
111
|
|
112
|
-
Everyone interacting in the OpenAPIParser project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/
|
112
|
+
Everyone interacting in the OpenAPIParser project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/ota42y/openapi_parser/blob/master/CODE_OF_CONDUCT.md).
|
data/SECURITY.md
ADDED
@@ -160,6 +160,28 @@ module OpenAPIParser
|
|
160
160
|
end
|
161
161
|
end
|
162
162
|
|
163
|
+
class LessThanMinProperties < OpenAPIError
|
164
|
+
def initialize(value, reference)
|
165
|
+
super(reference)
|
166
|
+
@value = value
|
167
|
+
end
|
168
|
+
|
169
|
+
def message
|
170
|
+
"#{@reference} #{@value.size} is less than minProperties value"
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
class MoreThanMaxProperties < OpenAPIError
|
175
|
+
def initialize(value, reference)
|
176
|
+
super(reference)
|
177
|
+
@value = value
|
178
|
+
end
|
179
|
+
|
180
|
+
def message
|
181
|
+
"#{@reference} #{@value.size} is more than maxProperties value"
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
163
185
|
class InvalidPattern < OpenAPIError
|
164
186
|
def initialize(value, pattern, reference, example)
|
165
187
|
super(reference)
|
@@ -78,7 +78,8 @@ class OpenAPIParser::RequestOperation
|
|
78
78
|
end
|
79
79
|
|
80
80
|
def content_type
|
81
|
-
headers
|
81
|
+
content_type_key = headers.keys.detect { |k| k.casecmp?('Content-Type') }
|
82
|
+
headers[content_type_key].to_s.split(';').first.to_s
|
82
83
|
end
|
83
84
|
end
|
84
85
|
end
|
@@ -18,7 +18,7 @@ class OpenAPIParser::SchemaValidator
|
|
18
18
|
value,
|
19
19
|
s,
|
20
20
|
:parent_all_of => true,
|
21
|
-
parent_discriminator_schemas: keyword_args[:parent_discriminator_schemas]
|
21
|
+
parent_discriminator_schemas: keyword_args[:parent_discriminator_schemas] || []
|
22
22
|
)
|
23
23
|
|
24
24
|
if s.type == "object"
|
@@ -1,5 +1,7 @@
|
|
1
1
|
class OpenAPIParser::SchemaValidator
|
2
2
|
class ObjectValidator < Base
|
3
|
+
include ::OpenAPIParser::SchemaValidator::PropertiesNumber
|
4
|
+
|
3
5
|
# @param [Hash] value
|
4
6
|
# @param [OpenAPIParser::Schemas::Schema] schema
|
5
7
|
# @param [Boolean] parent_all_of true if component is nested under allOf
|
@@ -50,7 +52,7 @@ class OpenAPIParser::SchemaValidator
|
|
50
52
|
|
51
53
|
value.merge!(coerced_values.to_h) if @coerce_value
|
52
54
|
|
53
|
-
|
55
|
+
check_properties_number(value, schema)
|
54
56
|
end
|
55
57
|
end
|
56
58
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class OpenAPIParser::SchemaValidator
|
2
|
+
module PropertiesNumber
|
3
|
+
# check minProperties and manProperties value by schema
|
4
|
+
# @param [Object] value
|
5
|
+
# @param [OpenAPIParser::Schemas::Schema] schema
|
6
|
+
def check_properties_number(value, schema)
|
7
|
+
include_properties_num = schema.minProperties || schema.maxProperties
|
8
|
+
return [value, nil] unless include_properties_num
|
9
|
+
|
10
|
+
validate(value, schema)
|
11
|
+
[value, nil]
|
12
|
+
rescue OpenAPIParser::OpenAPIError => e
|
13
|
+
return [nil, e]
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def validate(value, schema)
|
19
|
+
reference = schema.object_reference
|
20
|
+
|
21
|
+
if schema.minProperties && (value.size < schema.minProperties)
|
22
|
+
raise OpenAPIParser::LessThanMinProperties.new(value, reference)
|
23
|
+
end
|
24
|
+
|
25
|
+
if schema.maxProperties && (value.size > schema.maxProperties)
|
26
|
+
raise OpenAPIParser::MoreThanMaxProperties.new(value, reference)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -71,6 +71,8 @@ class OpenAPIParser::SchemaValidator
|
|
71
71
|
def validate_date_format(value, schema)
|
72
72
|
return [value, nil] unless schema.format == 'date'
|
73
73
|
|
74
|
+
return [nil, OpenAPIParser::InvalidDateFormat.new(value, schema.object_reference)] unless value =~ /^\d{4}-\d{2}-\d{2}$/
|
75
|
+
|
74
76
|
begin
|
75
77
|
parsed_date = Date.iso8601(value)
|
76
78
|
rescue ArgumentError
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require_relative 'schema_validator/options'
|
2
2
|
require_relative 'schema_validator/enumable'
|
3
3
|
require_relative 'schema_validator/minimum_maximum'
|
4
|
+
require_relative 'schema_validator/properties_number'
|
4
5
|
require_relative 'schema_validator/base'
|
5
6
|
require_relative 'schema_validator/string_validator'
|
6
7
|
require_relative 'schema_validator/integer_validator'
|
@@ -21,9 +21,11 @@ module OpenAPIParser::Schemas
|
|
21
21
|
|
22
22
|
media_type = select_media_type(response_body.content_type)
|
23
23
|
unless media_type
|
24
|
-
|
24
|
+
if response_validate_options.strict && response_body_not_blank(response_body)
|
25
|
+
raise ::OpenAPIParser::NotExistContentTypeDefinition, object_reference
|
26
|
+
end
|
25
27
|
|
26
|
-
return
|
28
|
+
return true
|
27
29
|
end
|
28
30
|
|
29
31
|
options = ::OpenAPIParser::SchemaValidator::Options.new # response validator not support any options
|
@@ -39,6 +41,11 @@ module OpenAPIParser::Schemas
|
|
39
41
|
|
40
42
|
private
|
41
43
|
|
44
|
+
# @param [OpenAPIParser::RequestOperation::ValidatableResponseBody]
|
45
|
+
def response_body_not_blank(response_body)
|
46
|
+
!(response_body.response_data.nil? || response_body.response_data.empty?)
|
47
|
+
end
|
48
|
+
|
42
49
|
# @param [Hash] response_headers
|
43
50
|
def validate_header(response_headers)
|
44
51
|
return unless headers
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openapi_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ota42y
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-12-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -142,6 +142,7 @@ files:
|
|
142
142
|
- LICENSE.txt
|
143
143
|
- README.md
|
144
144
|
- Rakefile
|
145
|
+
- SECURITY.md
|
145
146
|
- Steepfile
|
146
147
|
- bin/console
|
147
148
|
- bin/setup
|
@@ -186,6 +187,7 @@ files:
|
|
186
187
|
- lib/openapi_parser/schema_validator/object_validator.rb
|
187
188
|
- lib/openapi_parser/schema_validator/one_of_validator.rb
|
188
189
|
- lib/openapi_parser/schema_validator/options.rb
|
190
|
+
- lib/openapi_parser/schema_validator/properties_number.rb
|
189
191
|
- lib/openapi_parser/schema_validator/string_validator.rb
|
190
192
|
- lib/openapi_parser/schema_validator/unspecified_type_validator.rb
|
191
193
|
- lib/openapi_parser/schemas.rb
|