openapi_parser 0.4.1 → 0.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 231442c0833af9713844f6ec76a3237b58b7d53421f89f609647a45defe254eb
4
- data.tar.gz: 7961d3feda26b9ab4bb8d3928f76d60664a8508c0275f6c8786fafb26b52c8dd
3
+ metadata.gz: 69b353b6b05a25b119a50ef0baf9fe56d749158a18e429e2ed3632effb0c2de7
4
+ data.tar.gz: e122e4b7942ed9cb53fa70f0a7c9eef316fb6384342a5ff8b66cf9f998f9d95a
5
5
  SHA512:
6
- metadata.gz: e9019a266e7c64f99e246306eb469d636bdf3396571252d0bd8fbf58ef64065a72195d7d22b0141c944ecbc65f9b7c8a3eb9f8d6561af0ae1610b5d3b48dd71a
7
- data.tar.gz: 4b497c986b74e04e2ae8700f565a17c66428a0b62f1e0e972b7b2a517efcb8879c3003e6ce3b03d87f3a3ef4df15d37b4f9632d94ca4f7c42dfe9cd324a2198c
6
+ metadata.gz: f0ec9b54da1a51781be3786c6def47e4e673fda8fdf5ad6362813725362c7a0ce9a1464dcee37f9f629f4dab796fa623b8578c7182af9e3e0f28e6257318e03a
7
+ data.tar.gz: 13effd1bac35ae340f98bd3127569f7bce3184586dc44a109016fc243e867731d6824973f0cc4607cf1095e2e05729f499b5528d108a109b192c7f48c5f9a823
@@ -1,6 +1,10 @@
1
1
  ## Unreleased
2
2
 
3
- ## 0.4.0 (2019-07-27)
3
+ ## 0.5.0 (2019-09-28)
4
+ * Add max and min length validators for string. #45
5
+ * Support for minItems and maxItems in array #49
6
+
7
+ ## 0.4.1 (2019-07-27)
4
8
  * release missed
5
9
 
6
10
  ## 0.4.0 (2019-07-27)
@@ -177,4 +177,48 @@ module OpenAPIParser
177
177
  "don't exist response definition #{@reference}"
178
178
  end
179
179
  end
180
+
181
+ class MoreThanMaxLength < OpenAPIError
182
+ def initialize(value, reference)
183
+ super(reference)
184
+ @value = value
185
+ end
186
+
187
+ def message
188
+ "#{@value} cannot be more than max length in #{@reference}"
189
+ end
190
+ end
191
+
192
+ class LessThanMinLength < OpenAPIError
193
+ def initialize(value, reference)
194
+ super(reference)
195
+ @value = value
196
+ end
197
+
198
+ def message
199
+ "#{@value} cannot be less than min length in #{@reference}"
200
+ end
201
+ end
202
+
203
+ class MoreThanMaxItems < OpenAPIError
204
+ def initialize(value, reference)
205
+ super(reference)
206
+ @value = value
207
+ end
208
+
209
+ def message
210
+ "#{@value} cannot be more than max items in #{@reference}"
211
+ end
212
+ end
213
+
214
+ class LessThanMinItems < OpenAPIError
215
+ def initialize(value, reference)
216
+ super(reference)
217
+ @value = value
218
+ end
219
+
220
+ def message
221
+ "#{@value} cannot be less than min items in #{@reference}"
222
+ end
223
+ end
180
224
  end
@@ -5,9 +5,11 @@ class OpenAPIParser::SchemaValidator
5
5
  def coerce_and_validate(value, schema, **_keyword_args)
6
6
  return OpenAPIParser::ValidateError.build_error_result(value, schema) unless value.kind_of?(Array)
7
7
 
8
+ value, err = validate_max_min_items(value, schema)
9
+ return [nil, err] if err
10
+
8
11
  # array type have an schema in items property
9
12
  items_schema = schema.items
10
-
11
13
  coerced_values = value.map do |v|
12
14
  coerced, err = validatable.validate_schema(v, items_schema)
13
15
  return [nil, err] if err
@@ -19,5 +21,12 @@ class OpenAPIParser::SchemaValidator
19
21
 
20
22
  [value, nil]
21
23
  end
24
+
25
+ def validate_max_min_items(value, schema)
26
+ return [nil, OpenAPIParser::MoreThanMaxItems.new(value, schema.object_reference)] if schema.maxItems && value.length > schema.maxItems
27
+ return [nil, OpenAPIParser::LessThanMinItems.new(value, schema.object_reference)] if schema.minItems && value.length < schema.minItems
28
+
29
+ [value, nil]
30
+ end
22
31
  end
23
32
  end
@@ -21,6 +21,9 @@ class OpenAPIParser::SchemaValidator
21
21
  return [nil, err] if err
22
22
  end
23
23
 
24
+ value, err = validate_max_min_length(value, schema)
25
+ return [nil, err] if err
26
+
24
27
  [value, nil]
25
28
  end
26
29
 
@@ -51,5 +54,12 @@ class OpenAPIParser::SchemaValidator
51
54
 
52
55
  [nil, OpenAPIParser::InvalidPattern.new(value, schema.pattern, schema.object_reference)]
53
56
  end
57
+
58
+ def validate_max_min_length(value, schema)
59
+ return [nil, OpenAPIParser::MoreThanMaxLength.new(value, schema.object_reference)] if schema.maxLength && value.size > schema.maxLength
60
+ return [nil, OpenAPIParser::LessThanMinLength.new(value, schema.object_reference)] if schema.minLength && value.size < schema.minLength
61
+
62
+ [value, nil]
63
+ end
54
64
  end
55
65
  end
@@ -2,6 +2,6 @@ module OpenAPIParser::Schemas
2
2
  class Paths < Base
3
3
  # @!attribute [r] path
4
4
  # @return [Hash{String => PathItem, Reference}, nil]
5
- openapi_attr_hash_body_objects 'path', PathItem, allow_reference: false, allow_data_type: false
5
+ openapi_attr_hash_body_objects 'path', PathItem, reference: false, allow_data_type: false
6
6
  end
7
7
  end
@@ -8,7 +8,7 @@ module OpenAPIParser::Schemas
8
8
 
9
9
  # @!attribute [r] response
10
10
  # @return [Hash{String => Response, Reference}, nil] response object indexed by status code. see: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#patterned-fields-1
11
- openapi_attr_hash_body_objects 'response', Response, reject_keys: [:default], allow_reference: true, allow_data_type: false
11
+ openapi_attr_hash_body_objects 'response', Response, reject_keys: [:default], reference: true, allow_data_type: false
12
12
 
13
13
  # validate params data by definition
14
14
  # find response object by status_code and content_type
@@ -1,3 +1,3 @@
1
1
  module OpenAPIParser
2
- VERSION = '0.4.1'.freeze
2
+ VERSION = '0.5.0'.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: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ota42y
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-07-27 00:00:00.000000000 Z
11
+ date: 2019-09-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler