openapi_parser 2.5.0 → 2.6.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 (53) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yaml +1 -3
  3. data/CHANGELOG.md +34 -0
  4. data/README.md +44 -1
  5. data/lib/openapi_parser/concerns/media_type_selectable.rb +18 -0
  6. data/lib/openapi_parser/concerns/schema_loader/creator.rb +7 -2
  7. data/lib/openapi_parser/concerns/schema_loader/hash_body_loader.rb +1 -1
  8. data/lib/openapi_parser/config.rb +5 -0
  9. data/lib/openapi_parser/errors.rb +24 -0
  10. data/lib/openapi_parser/schema_validator/any_of_validator.rb +1 -1
  11. data/lib/openapi_parser/schema_validator/base.rb +35 -9
  12. data/lib/openapi_parser/schema_validator/float_validator.rb +4 -0
  13. data/lib/openapi_parser/schema_validator/integer_validator.rb +17 -1
  14. data/lib/openapi_parser/schema_validator/multiple_of.rb +26 -0
  15. data/lib/openapi_parser/schema_validator/nil_validator.rb +4 -0
  16. data/lib/openapi_parser/schema_validator/one_of_validator.rb +1 -1
  17. data/lib/openapi_parser/schema_validator.rb +32 -4
  18. data/lib/openapi_parser/schemas/components.rb +4 -0
  19. data/lib/openapi_parser/schemas/discriminator.rb +4 -0
  20. data/lib/openapi_parser/schemas/media_type.rb +4 -0
  21. data/lib/openapi_parser/schemas/openapi.rb +36 -3
  22. data/lib/openapi_parser/schemas/path_item.rb +32 -6
  23. data/lib/openapi_parser/schemas/request_body.rb +1 -1
  24. data/lib/openapi_parser/schemas/response.rb +5 -1
  25. data/lib/openapi_parser/schemas/schema.rb +8 -1
  26. data/lib/openapi_parser/spec_validator/rule.rb +24 -3
  27. data/lib/openapi_parser/spec_validator/rules/additional_operations_before_32.rb +26 -0
  28. data/lib/openapi_parser/spec_validator/rules/allow_empty_value_deprecation.rb +26 -0
  29. data/lib/openapi_parser/spec_validator/rules/cookie_style_before_32.rb +26 -0
  30. data/lib/openapi_parser/spec_validator/rules/default_mapping_before_32.rb +29 -0
  31. data/lib/openapi_parser/spec_validator/rules/defs_in_30.rb +25 -0
  32. data/lib/openapi_parser/spec_validator/rules/example_value_fields_before_32.rb +48 -0
  33. data/lib/openapi_parser/spec_validator/rules/media_types_before_32.rb +24 -0
  34. data/lib/openapi_parser/spec_validator/rules/query_method_before_32.rb +26 -0
  35. data/lib/openapi_parser/spec_validator/rules/querystring_before_32.rb +26 -0
  36. data/lib/openapi_parser/spec_validator/rules/response_summary_before_32.rb +25 -0
  37. data/lib/openapi_parser/spec_validator/rules/security_scheme_fields_before_32.rb +41 -0
  38. data/lib/openapi_parser/spec_validator/rules/server_name_before_32.rb +35 -0
  39. data/lib/openapi_parser/spec_validator/rules/streaming_fields_before_32.rb +56 -0
  40. data/lib/openapi_parser/spec_validator/rules/tag_fields_before_32.rb +34 -0
  41. data/lib/openapi_parser/spec_validator/rules/xml_attribute_deprecation.rb +29 -0
  42. data/lib/openapi_parser/spec_validator/rules/xml_node_type_before_32.rb +29 -0
  43. data/lib/openapi_parser/spec_validator/rules/xml_wrapped_deprecation.rb +29 -0
  44. data/lib/openapi_parser/spec_validator.rb +34 -0
  45. data/lib/openapi_parser/version.rb +1 -1
  46. data/lib/openapi_parser.rb +5 -4
  47. data/sig/openapi_parser/config.rbs +1 -0
  48. data/sig/openapi_parser/schema_validator.rbs +1 -0
  49. data/sig/openapi_parser/schema_validators/base.rbs +4 -2
  50. data/sig/openapi_parser/spec_validator.rbs +77 -0
  51. data/sig/openapi_parser.rbs +5 -3
  52. data/sig/wip_types.rbs +6 -0
  53. metadata +19 -1
@@ -0,0 +1,29 @@
1
+ module OpenAPIParser
2
+ class SpecValidator
3
+ module Rules
4
+ # 3.2 deprecates `wrapped: true` on the XML Object in favor of
5
+ # `nodeType: element`. The field is still allowed but discouraged,
6
+ # so we report it as a violation on 3.2 documents.
7
+ class XmlWrappedDeprecation < Rule
8
+ def check(root)
9
+ return [] unless version_at_least?('3.2')
10
+
11
+ violations = []
12
+ each_schema(root) do |schema|
13
+ raw = schema.raw_schema
14
+ next unless raw.is_a?(Hash)
15
+
16
+ xml = raw['xml']
17
+ next unless xml.is_a?(Hash) && xml['wrapped'] == true
18
+
19
+ violations << violation(
20
+ path: schema.object_reference,
21
+ message: '`wrapped` on an XML Object is deprecated in 3.2; use `nodeType: element`',
22
+ )
23
+ end
24
+ violations
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -17,7 +17,24 @@ require_relative 'spec_validator/rules/const_in_30'
17
17
  require_relative 'spec_validator/rules/dynamic_ref_in_30'
18
18
  require_relative 'spec_validator/rules/dynamic_anchor_in_30'
19
19
  require_relative 'spec_validator/rules/content_schema_in_30'
20
+ require_relative 'spec_validator/rules/defs_in_30'
21
+ require_relative 'spec_validator/rules/allow_empty_value_deprecation'
22
+ require_relative 'spec_validator/rules/xml_node_type_before_32'
23
+ require_relative 'spec_validator/rules/xml_attribute_deprecation'
24
+ require_relative 'spec_validator/rules/xml_wrapped_deprecation'
25
+ require_relative 'spec_validator/rules/media_types_before_32'
26
+ require_relative 'spec_validator/rules/default_mapping_before_32'
27
+ require_relative 'spec_validator/rules/cookie_style_before_32'
28
+ require_relative 'spec_validator/rules/server_name_before_32'
20
29
  require_relative 'spec_validator/rules/self_before_32'
30
+ require_relative 'spec_validator/rules/query_method_before_32'
31
+ require_relative 'spec_validator/rules/additional_operations_before_32'
32
+ require_relative 'spec_validator/rules/response_summary_before_32'
33
+ require_relative 'spec_validator/rules/tag_fields_before_32'
34
+ require_relative 'spec_validator/rules/example_value_fields_before_32'
35
+ require_relative 'spec_validator/rules/security_scheme_fields_before_32'
36
+ require_relative 'spec_validator/rules/streaming_fields_before_32'
37
+ require_relative 'spec_validator/rules/querystring_before_32'
21
38
 
22
39
  module OpenAPIParser
23
40
  class SpecViolationError < OpenAPIError
@@ -82,7 +99,24 @@ module OpenAPIParser
82
99
  Rules::DynamicRefIn30,
83
100
  Rules::DynamicAnchorIn30,
84
101
  Rules::ContentSchemaIn30,
102
+ Rules::DefsIn30,
103
+ Rules::AllowEmptyValueDeprecation,
104
+ Rules::XmlNodeTypeBefore32,
105
+ Rules::XmlAttributeDeprecation,
106
+ Rules::XmlWrappedDeprecation,
107
+ Rules::MediaTypesBefore32,
108
+ Rules::DefaultMappingBefore32,
109
+ Rules::CookieStyleBefore32,
110
+ Rules::ServerNameBefore32,
85
111
  Rules::SelfBefore32,
112
+ Rules::QueryMethodBefore32,
113
+ Rules::AdditionalOperationsBefore32,
114
+ Rules::ResponseSummaryBefore32,
115
+ Rules::TagFieldsBefore32,
116
+ Rules::ExampleValueFieldsBefore32,
117
+ Rules::SecuritySchemeFieldsBefore32,
118
+ Rules::StreamingFieldsBefore32,
119
+ Rules::QuerystringBefore32,
86
120
  ]
87
121
  end
88
122
  end
@@ -1,3 +1,3 @@
1
1
  module OpenAPIParser
2
- VERSION = '2.5.0'.freeze
2
+ VERSION = '2.6.0'.freeze
3
3
  end
@@ -40,8 +40,9 @@ module OpenAPIParser
40
40
  end
41
41
 
42
42
  # Load schema located by the passed uri. Uri must be absolute.
43
+ # @param [OpenAPIParser::Schemas::OpenAPI, nil] referrer the document whose $ref loads this one
43
44
  # @return [OpenAPIParser::Schemas::OpenAPI]
44
- def load_uri(uri, config:, schema_registry:)
45
+ def load_uri(uri, config:, schema_registry:, referrer: nil)
45
46
  # Open-uri doesn't open file scheme uri, so we try to open file path directly
46
47
  # File scheme uri which points to a remote file is not supported.
47
48
  uri_path = uri.path
@@ -54,7 +55,7 @@ module OpenAPIParser
54
55
  end
55
56
 
56
57
  extension = Pathname.new(uri_path).extname
57
- load_hash(parse_file(content, extension), config: config, uri: uri, schema_registry: schema_registry)
58
+ load_hash(parse_file(content, extension), config: config, uri: uri, schema_registry: schema_registry, referrer: referrer)
58
59
  end
59
60
 
60
61
  private
@@ -90,8 +91,8 @@ module OpenAPIParser
90
91
  JSON.parse(content)
91
92
  end
92
93
 
93
- def load_hash(hash, config:, uri:, schema_registry:)
94
- root = Schemas::OpenAPI.new(hash, config, uri: uri, schema_registry: schema_registry)
94
+ def load_hash(hash, config:, uri:, schema_registry:, referrer: nil)
95
+ root = Schemas::OpenAPI.new(hash, config, uri: uri, schema_registry: schema_registry, referrer: referrer)
95
96
 
96
97
  OpenAPIParser::ReferenceExpander.expand(root, config.strict_reference_validation) if config.expand_reference
97
98
 
@@ -9,6 +9,7 @@ module OpenAPIParser
9
9
 
10
10
  def initialize: (untyped config) -> untyped
11
11
  def allow_empty_date_and_datetime: -> bool
12
+ def allow_3_2_features: -> bool
12
13
  def date_coerce_class: -> (singleton(Object) | nil)
13
14
  def datetime_coerce_class: -> (singleton(Object) | nil)
14
15
  def coerce_value: -> bool
@@ -2,6 +2,7 @@
2
2
  module OpenAPIParser
3
3
  class SchemaValidator
4
4
  include Validatable
5
+ VALUE_TYPES: Array[String]
5
6
  @value: Hash[bot, bot]
6
7
  @schema: OpenAPIParser::Schemas::Schema
7
8
  @coerce_value: bool | nil
@@ -10,9 +10,11 @@ module OpenAPIParser
10
10
  def coerce_and_validate: (Object _value, OpenAPIParser::Schemas::Schema _schema, **untyped) -> [untyped, (ValidateError | NotExistDiscriminatorMappedSchema | nil)]
11
11
  def validate_discriminator_schema: (
12
12
  OpenAPIParser::Schemas::Discriminator discriminator,
13
- Hash[String, bot] value,
13
+ Hash[String, untyped] value,
14
+ ?candidate_schemas: Array[OpenAPIParser::Schemas::Schema] | nil,
14
15
  ?parent_discriminator_schemas: Array[OpenAPIParser::Schemas::Schema]
15
- ) -> [Object | nil, OpenAPIParser::OpenAPIError]
16
+ ) -> [Object | nil, OpenAPIParser::OpenAPIError | nil]
17
+ private def default_mapping_target: (OpenAPIParser::Schemas::Discriminator discriminator) -> (String | nil)
16
18
  end
17
19
  end
18
20
  end
@@ -35,6 +35,9 @@ module OpenAPIParser
35
35
  def version_at_least?: (String boundary) -> bool
36
36
  private def violation: (path: String, message: String) -> SpecViolation
37
37
  private def each_schema: (untyped root) ?{ (untyped) -> void } -> untyped
38
+ private def each_node: (untyped root, *Class klasses) { (untyped) -> void } -> void
39
+ private def each_security_scheme: (untyped root) { (String, Hash[untyped, untyped]) -> void } -> void
40
+ private def escape_reference: (untyped key) -> String
38
41
  private def walk: (untyped node, Hash[Integer, bool] visited) { (untyped) -> void } -> void
39
42
  end
40
43
 
@@ -107,9 +110,83 @@ module OpenAPIParser
107
110
  def check: (OpenAPIParser::Schemas::OpenAPI root) -> Array[SpecValidator::SpecViolation]
108
111
  end
109
112
 
113
+ class DefsIn30 < Rule
114
+ def check: (OpenAPIParser::Schemas::OpenAPI root) -> Array[SpecValidator::SpecViolation]
115
+ end
116
+
117
+ class AllowEmptyValueDeprecation < Rule
118
+ def check: (OpenAPIParser::Schemas::OpenAPI root) -> Array[SpecValidator::SpecViolation]
119
+ end
120
+
121
+ class XmlNodeTypeBefore32 < Rule
122
+ def check: (OpenAPIParser::Schemas::OpenAPI root) -> Array[SpecValidator::SpecViolation]
123
+ end
124
+
125
+ class XmlAttributeDeprecation < Rule
126
+ def check: (OpenAPIParser::Schemas::OpenAPI root) -> Array[SpecValidator::SpecViolation]
127
+ end
128
+
129
+ class XmlWrappedDeprecation < Rule
130
+ def check: (OpenAPIParser::Schemas::OpenAPI root) -> Array[SpecValidator::SpecViolation]
131
+ end
132
+
133
+ class MediaTypesBefore32 < Rule
134
+ def check: (OpenAPIParser::Schemas::OpenAPI root) -> Array[SpecValidator::SpecViolation]
135
+ end
136
+
137
+ class DefaultMappingBefore32 < Rule
138
+ def check: (OpenAPIParser::Schemas::OpenAPI root) -> Array[SpecValidator::SpecViolation]
139
+ end
140
+
141
+ class CookieStyleBefore32 < Rule
142
+ def check: (OpenAPIParser::Schemas::OpenAPI root) -> Array[SpecValidator::SpecViolation]
143
+ end
144
+
145
+ class ServerNameBefore32 < Rule
146
+ def check: (OpenAPIParser::Schemas::OpenAPI root) -> Array[SpecValidator::SpecViolation]
147
+ end
148
+
110
149
  class SelfBefore32 < Rule
111
150
  def check: (OpenAPIParser::Schemas::OpenAPI root) -> Array[SpecValidator::SpecViolation]
112
151
  end
152
+
153
+ class QueryMethodBefore32 < Rule
154
+ def check: (OpenAPIParser::Schemas::OpenAPI root) -> Array[SpecValidator::SpecViolation]
155
+ end
156
+
157
+ class AdditionalOperationsBefore32 < Rule
158
+ def check: (OpenAPIParser::Schemas::OpenAPI root) -> Array[SpecValidator::SpecViolation]
159
+ end
160
+
161
+ class ResponseSummaryBefore32 < Rule
162
+ def check: (OpenAPIParser::Schemas::OpenAPI root) -> Array[SpecValidator::SpecViolation]
163
+ end
164
+
165
+ class TagFieldsBefore32 < Rule
166
+ NEW_FIELDS: Array[String]
167
+ def check: (OpenAPIParser::Schemas::OpenAPI root) -> Array[SpecValidator::SpecViolation]
168
+ end
169
+
170
+ class ExampleValueFieldsBefore32 < Rule
171
+ NEW_FIELDS: Array[String]
172
+ def check: (OpenAPIParser::Schemas::OpenAPI root) -> Array[SpecValidator::SpecViolation]
173
+ end
174
+
175
+ class SecuritySchemeFieldsBefore32 < Rule
176
+ NEW_FIELDS: Array[String]
177
+ def check: (OpenAPIParser::Schemas::OpenAPI root) -> Array[SpecValidator::SpecViolation]
178
+ end
179
+
180
+ class StreamingFieldsBefore32 < Rule
181
+ NEW_FIELDS: Array[String]
182
+ NEW_ENCODING_FIELDS: Array[String]
183
+ private def encoding_violations: (untyped node, untyped encodings) -> Array[SpecValidator::SpecViolation]
184
+ def check: (OpenAPIParser::Schemas::OpenAPI root) -> Array[SpecValidator::SpecViolation]
185
+ end
186
+
187
+ class QuerystringBefore32 < Rule
188
+ def check: (OpenAPIParser::Schemas::OpenAPI root) -> Array[SpecValidator::SpecViolation]
189
+ end
113
190
  end
114
191
  end
115
192
 
@@ -2,20 +2,22 @@ module OpenAPIParser
2
2
  def self.parse: (Hash[bot, bot] schema, ?Hash[bot, bot] config) -> OpenAPIParser::Schemas::OpenAPI
3
3
  def self.parse_with_filepath: (Hash[bot, bot] schema, String filepath, ?Hash[bot, bot] config) -> OpenAPIParser::Schemas::OpenAPI
4
4
  def self.load: (String filepath, ?Hash[bot, bot] config) -> OpenAPIParser::Schemas::OpenAPI
5
- def self.load_uri: (OpenAPIParser::readable_uri uri, config: untyped, schema_registry: Hash[bot, bot]) -> OpenAPIParser::Schemas::OpenAPI
5
+ def self.load_uri: (OpenAPIParser::readable_uri uri, config: untyped, schema_registry: Hash[bot, bot], ?referrer: OpenAPIParser::Schemas::OpenAPI?) -> OpenAPIParser::Schemas::OpenAPI
6
6
  def self.file_uri: (String filepath) -> URI::Generic
7
7
  def self.parse_file: (String? content, String ext) -> Hash[bot, bot]
8
8
  def self.parse_yaml: (String? content) -> Hash[bot, bot]
9
9
  def self.parse_json: (String? content) -> Hash[bot, bot]
10
- def self.load_hash: (Hash[bot, bot] hash, config: untyped, uri: OpenAPIParser::readable_uri?, schema_registry: Hash[bot, bot]) -> OpenAPIParser::Schemas::OpenAPI
10
+ def self.load_hash: (Hash[bot, bot] hash, config: untyped, uri: OpenAPIParser::readable_uri?, schema_registry: Hash[bot, bot], ?referrer: OpenAPIParser::Schemas::OpenAPI?) -> OpenAPIParser::Schemas::OpenAPI
11
11
  end
12
12
 
13
13
  module OpenAPIParser
14
14
  module Schemas
15
15
  class OpenAPI
16
- def initialize: (Hash[bot, bot] hash, untyped config, uri: OpenAPIParser::readable_uri?, schema_registry: Hash[bot, bot]) -> OpenAPIParser::Schemas::OpenAPI
16
+ def initialize: (Hash[bot, bot] hash, untyped config, uri: OpenAPIParser::readable_uri?, schema_registry: Hash[bot, bot], ?referrer: OpenAPIParser::Schemas::OpenAPI?) -> OpenAPIParser::Schemas::OpenAPI
17
17
  def openapi: () -> String?
18
18
  def openapi_version: () -> Gem::Version?
19
+ def use_3_1_features?: () -> bool
20
+ def use_3_2_features?: () -> bool
19
21
  end
20
22
  end
21
23
  end
data/sig/wip_types.rbs CHANGED
@@ -48,6 +48,11 @@ end
48
48
 
49
49
  class OpenAPIParser::Schemas::OpenAPI < OpenAPIParser::Schemas::Base
50
50
  attr_reader paths: untyped
51
+ attr_reader components: OpenAPIParser::Schemas::Components | nil
52
+ end
53
+
54
+ class OpenAPIParser::Schemas::Components < OpenAPIParser::Schemas::Base
55
+ attr_reader schemas: Hash[String, OpenAPIParser::Schemas::Schema] | nil
51
56
  end
52
57
 
53
58
  module OpenAPIParser::Expandable
@@ -61,4 +66,5 @@ end
61
66
  class OpenAPIParser::Schemas::Discriminator < OpenAPIParser::Schemas::Base
62
67
  attr_reader property_name: (String | nil)
63
68
  attr_reader mapping: Hash[String, String]
69
+ attr_reader default_mapping: (String | nil)
64
70
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openapi_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.0
4
+ version: 2.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ota42y
@@ -182,6 +182,7 @@ files:
182
182
  - lib/openapi_parser/schema_validator/float_validator.rb
183
183
  - lib/openapi_parser/schema_validator/integer_validator.rb
184
184
  - lib/openapi_parser/schema_validator/minimum_maximum.rb
185
+ - lib/openapi_parser/schema_validator/multiple_of.rb
185
186
  - lib/openapi_parser/schema_validator/nil_validator.rb
186
187
  - lib/openapi_parser/schema_validator/object_validator.rb
187
188
  - lib/openapi_parser/schema_validator/one_of_validator.rb
@@ -210,24 +211,41 @@ files:
210
211
  - lib/openapi_parser/schemas/schema.rb
211
212
  - lib/openapi_parser/spec_validator.rb
212
213
  - lib/openapi_parser/spec_validator/rule.rb
214
+ - lib/openapi_parser/spec_validator/rules/additional_operations_before_32.rb
215
+ - lib/openapi_parser/spec_validator/rules/allow_empty_value_deprecation.rb
213
216
  - lib/openapi_parser/spec_validator/rules/boolean_schema_in_30.rb
214
217
  - lib/openapi_parser/spec_validator/rules/const_in_30.rb
215
218
  - lib/openapi_parser/spec_validator/rules/content_encoding_in_30.rb
216
219
  - lib/openapi_parser/spec_validator/rules/content_media_type_in_30.rb
217
220
  - lib/openapi_parser/spec_validator/rules/content_schema_in_30.rb
221
+ - lib/openapi_parser/spec_validator/rules/cookie_style_before_32.rb
222
+ - lib/openapi_parser/spec_validator/rules/default_mapping_before_32.rb
223
+ - lib/openapi_parser/spec_validator/rules/defs_in_30.rb
218
224
  - lib/openapi_parser/spec_validator/rules/dynamic_anchor_in_30.rb
219
225
  - lib/openapi_parser/spec_validator/rules/dynamic_ref_in_30.rb
220
226
  - lib/openapi_parser/spec_validator/rules/example_singular_deprecation.rb
227
+ - lib/openapi_parser/spec_validator/rules/example_value_fields_before_32.rb
221
228
  - lib/openapi_parser/spec_validator/rules/exclusive_maximum.rb
222
229
  - lib/openapi_parser/spec_validator/rules/exclusive_minimum.rb
223
230
  - lib/openapi_parser/spec_validator/rules/json_schema_dialect_in_30.rb
231
+ - lib/openapi_parser/spec_validator/rules/media_types_before_32.rb
224
232
  - lib/openapi_parser/spec_validator/rules/nullable_deprecation.rb
225
233
  - lib/openapi_parser/spec_validator/rules/path_items_in_30.rb
226
234
  - lib/openapi_parser/spec_validator/rules/prefix_items_in_30.rb
235
+ - lib/openapi_parser/spec_validator/rules/query_method_before_32.rb
236
+ - lib/openapi_parser/spec_validator/rules/querystring_before_32.rb
237
+ - lib/openapi_parser/spec_validator/rules/response_summary_before_32.rb
238
+ - lib/openapi_parser/spec_validator/rules/security_scheme_fields_before_32.rb
227
239
  - lib/openapi_parser/spec_validator/rules/self_before_32.rb
240
+ - lib/openapi_parser/spec_validator/rules/server_name_before_32.rb
241
+ - lib/openapi_parser/spec_validator/rules/streaming_fields_before_32.rb
242
+ - lib/openapi_parser/spec_validator/rules/tag_fields_before_32.rb
228
243
  - lib/openapi_parser/spec_validator/rules/type_array_in_30.rb
229
244
  - lib/openapi_parser/spec_validator/rules/type_null_in_30.rb
230
245
  - lib/openapi_parser/spec_validator/rules/webhooks_in_30.rb
246
+ - lib/openapi_parser/spec_validator/rules/xml_attribute_deprecation.rb
247
+ - lib/openapi_parser/spec_validator/rules/xml_node_type_before_32.rb
248
+ - lib/openapi_parser/spec_validator/rules/xml_wrapped_deprecation.rb
231
249
  - lib/openapi_parser/spec_validator/spec_violation.rb
232
250
  - lib/openapi_parser/version.rb
233
251
  - openapi_parser.gemspec