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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e5bbbc0335472ed4352c767db92dc1ed0259548e6d49ece1f5b5da3836fbdbc5
4
- data.tar.gz: bb600e479aff2c4b7ac0314215f49d3058491e93fde59240cd47339853a8ecf8
3
+ metadata.gz: fcf4eb8daf0d179a7bda7dc584020f64ec8ee52ea0dcaddb4d532122f00b2f41
4
+ data.tar.gz: 9a5742b5f563e3d54d1739cd95e9b7da4f7da6a65ffe1180f9a4908ad93010e0
5
5
  SHA512:
6
- metadata.gz: 53f5d120721d58ae47a555a036ac037fbb5460cbf315f918b7f881bb1a5f4fffee5bad46118dfd085441fcd65c01f133bb84834e728582a8008aaeb46a943a3e
7
- data.tar.gz: 6ed888572b972db4ca33daffbfdef569de6f41153c5e798f42ee68badbe8154c1e206ec01300522d15aff56be1ecb5e4b4bd1209e99fc4da789e78ea4d1ba88f
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
  [![Yard Docs](https://img.shields.io/badge/yard-docs-blue.svg)](https://www.rubydoc.info/gems/openapi_parser)
5
5
  [![Inch CI](https://inch-ci.org/github/ota42y/openapi_parser.svg?branch=master)](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/[USERNAME]/openapi_parser/blob/master/CODE_OF_CONDUCT.md).
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
@@ -0,0 +1,6 @@
1
+ ## Security contact information
2
+
3
+ To report a security vulnerability, please contact
4
+ [Tidelift security](https://tidelift.com/security).
5
+
6
+ Tidelift will coordinate the fix and disclosure.
@@ -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['Content-Type'].to_s.split(';').first.to_s
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
- [value, nil]
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
- raise ::OpenAPIParser::NotExistContentTypeDefinition, object_reference if response_validate_options.strict
24
+ if response_validate_options.strict && response_body_not_blank(response_body)
25
+ raise ::OpenAPIParser::NotExistContentTypeDefinition, object_reference
26
+ end
25
27
 
26
- return nil
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
@@ -1,3 +1,3 @@
1
1
  module OpenAPIParser
2
- VERSION = '2.2.1'.freeze
2
+ VERSION = '2.2.3'.freeze
3
3
  end
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.1
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-10-23 00:00:00.000000000 Z
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