openapi_parser 2.3.0 → 2.3.1

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: c7f08706ff7f3eeb957f73f1352879e4234c0c2cb5a2906a12ace5e75c0517d3
4
- data.tar.gz: 9267f25fcfa1cb600b0373980a011086b2b70ceefba042658b4a20d80c57b851
3
+ metadata.gz: b3129b448382c0b36273808c25a197c9264ec23d4729c93f8c5594375cf16cc5
4
+ data.tar.gz: 57aa683478c58dd684995e326687ef8e187a08fe4818e707812b1484a3e6e13b
5
5
  SHA512:
6
- metadata.gz: 1a9213679b51be326c333e040f3de339d6aec2e1c74de0efa685f685da8846ca1b09926829177c62c4ebdc5a877b528919ad2a9a293179fe20d45cfd5f01e3c4
7
- data.tar.gz: f9e3d895124ccfeb70fabc1a0ee22395fc38ff2c1447b6529d996adb5cedaa87b924028db4b07ee1e1aeabaab799906dfc488126e3cb8ac4439152ac34f4ff8d
6
+ metadata.gz: 1e99aa6ea5ae7234c886c17c6d48bdeb75480db7698057aa77825301c0151caa986b59f6cc0b5a5a421c135fb47fb513e6440b6a3a18db4dae2f25620001f05a
7
+ data.tar.gz: b5886770b412d8d73fe30a07039fcf76773880874e4762bd704e6ab3c4b545ade6ed722ebd010717af42c9e09e4e3ccd4fc0f53954c9d98bd24e64583ed99e48
@@ -1,5 +1,7 @@
1
1
  name: ci
2
- on: [push]
2
+ on:
3
+ - pull_request
4
+ - push
3
5
  jobs:
4
6
  test:
5
7
  strategy:
data/CHANGELOG.md CHANGED
@@ -1,5 +1,8 @@
1
1
  ## Unreleased
2
2
 
3
+ ## 2.3.1 (2025-11-14)
4
+ * add optional date coercion with behavior matching existing datetime coercion
5
+
3
6
  ## 2.3.0 (2025-10-01)
4
7
  * bump base64 dep
5
8
  * bump actions checkout dep
data/README.md CHANGED
@@ -27,7 +27,7 @@ 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})
30
+ root = OpenAPIParser.parse(YAML.load_file('open_api_3/schema.yml'), {coerce_value: true, datetime_coerce_class: DateTime, date_coerce_class: Date})
31
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)>
@@ -19,6 +19,10 @@ class OpenAPIParser::Config
19
19
  @config[:datetime_coerce_class]
20
20
  end
21
21
 
22
+ def date_coerce_class
23
+ @config[:date_coerce_class]
24
+ end
25
+
22
26
  def coerce_value
23
27
  @config[:coerce_value]
24
28
  end
@@ -46,6 +50,7 @@ class OpenAPIParser::Config
46
50
  @request_validator_options ||= OpenAPIParser::SchemaValidator::Options.new(allow_empty_date_and_datetime: allow_empty_date_and_datetime,
47
51
  coerce_value: coerce_value,
48
52
  datetime_coerce_class: datetime_coerce_class,
53
+ date_coerce_class: date_coerce_class,
49
54
  validate_header: validate_header)
50
55
  end
51
56
 
@@ -6,14 +6,17 @@ class OpenAPIParser::SchemaValidator
6
6
  # @return [Boolean] coerce value option on/off
7
7
  # @!attribute [r] datetime_coerce_class
8
8
  # @return [Object, nil] coerce datetime string by this Object class
9
+ # @!attribute [r] date_coerce_class
10
+ # @return [Object, nil] coerce date string by this Object class
9
11
  # @!attribute [r] validate_header
10
12
  # @return [Boolean] validate header or not
11
- attr_reader :allow_empty_date_and_datetime, :coerce_value, :datetime_coerce_class, :validate_header
13
+ attr_reader :allow_empty_date_and_datetime, :coerce_value, :datetime_coerce_class, :validate_header, :date_coerce_class
12
14
 
13
- def initialize(allow_empty_date_and_datetime: false, coerce_value: nil, datetime_coerce_class: nil, validate_header: true)
15
+ def initialize(allow_empty_date_and_datetime: false, coerce_value: nil, datetime_coerce_class: nil, validate_header: true, date_coerce_class: nil)
14
16
  @allow_empty_date_and_datetime = allow_empty_date_and_datetime
15
17
  @coerce_value = coerce_value
16
18
  @datetime_coerce_class = datetime_coerce_class
19
+ @date_coerce_class = date_coerce_class
17
20
  @validate_header = validate_header
18
21
  end
19
22
  end
@@ -2,10 +2,11 @@ class OpenAPIParser::SchemaValidator
2
2
  class StringValidator < Base
3
3
  include ::OpenAPIParser::SchemaValidator::Enumable
4
4
 
5
- def initialize(validator, allow_empty_date_and_datetime, coerce_value, datetime_coerce_class)
5
+ def initialize(validator, allow_empty_date_and_datetime, coerce_value, datetime_coerce_class, date_coerce_class)
6
6
  super(validator, coerce_value)
7
7
  @allow_empty_date_and_datetime = allow_empty_date_and_datetime
8
8
  @datetime_coerce_class = datetime_coerce_class
9
+ @date_coerce_class = date_coerce_class
9
10
  end
10
11
 
11
12
  def coerce_and_validate(value, schema, **_keyword_args)
@@ -90,16 +91,18 @@ class OpenAPIParser::SchemaValidator
90
91
  return [nil, OpenAPIParser::InvalidDateFormat.new(value, schema.object_reference)] unless value =~ /^\d{4}-\d{2}-\d{2}$/
91
92
 
92
93
  begin
93
- parsed_date = Date.iso8601(value)
94
+ if @date_coerce_class.nil?
95
+ # validate only
96
+ Date.iso8601(value)
97
+ [value, nil]
98
+ else
99
+ # validate and coerce
100
+ [@date_coerce_class.iso8601(value), nil]
101
+ end
94
102
  rescue ArgumentError
95
- return [nil, OpenAPIParser::InvalidDateFormat.new(value, schema.object_reference)]
96
- end
97
-
98
- unless parsed_date.strftime('%Y-%m-%d') == value
99
- return [nil, OpenAPIParser::InvalidDateFormat.new(value, schema.object_reference)]
103
+ # when rfc3339(value) failed
104
+ [nil, OpenAPIParser::InvalidDateFormat.new(value, schema.object_reference)]
100
105
  end
101
-
102
- return [value, nil]
103
106
  end
104
107
 
105
108
  def validate_datetime_format(value, schema)
@@ -56,6 +56,7 @@ class OpenAPIParser::SchemaValidator
56
56
  @allow_empty_date_and_datetime = options.allow_empty_date_and_datetime
57
57
  @coerce_value = options.coerce_value
58
58
  @datetime_coerce_class = options.datetime_coerce_class
59
+ @date_coerce_class = options.date_coerce_class
59
60
  end
60
61
 
61
62
  # execute validate data
@@ -121,7 +122,7 @@ class OpenAPIParser::SchemaValidator
121
122
  end
122
123
 
123
124
  def string_validator
124
- @string_validator ||= OpenAPIParser::SchemaValidator::StringValidator.new(self, @allow_empty_date_and_datetime, @coerce_value, @datetime_coerce_class)
125
+ @string_validator ||= OpenAPIParser::SchemaValidator::StringValidator.new(self, @allow_empty_date_and_datetime, @coerce_value, @datetime_coerce_class, @date_coerce_class)
125
126
  end
126
127
 
127
128
  def integer_validator
@@ -1,3 +1,3 @@
1
1
  module OpenAPIParser
2
- VERSION = '2.3.0'.freeze
2
+ VERSION = '2.3.1'.freeze
3
3
  end
@@ -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 date_coerce_class: -> (singleton(Object) | nil)
12
13
  def datetime_coerce_class: -> (singleton(Object) | nil)
13
14
  def coerce_value: -> bool
14
15
  def expand_reference: -> bool
@@ -6,6 +6,7 @@ module OpenAPIParser
6
6
  @schema: OpenAPIParser::Schemas::Schema
7
7
  @coerce_value: bool | nil
8
8
  @datetime_coerce_class: singleton(Object) | nil
9
+ @date_coerce_class: singleton(Object) | nil
9
10
  @string_validator: OpenAPIParser::SchemaValidator::StringValidator | nil
10
11
  @integer_validator: OpenAPIParser::SchemaValidator::IntegerValidator | nil
11
12
  @float_validator: OpenAPIParser::SchemaValidator::FloatValidator | nil
@@ -6,7 +6,7 @@ module OpenAPIParser
6
6
  attr_reader coerce_value: bool | nil
7
7
  attr_reader datetime_coerce_class: singleton(Object) | nil
8
8
  attr_reader validate_header: bool
9
- def initialize: (?allow_empty_date_and_datetime: bool | nil, ?coerce_value: bool | nil, ?datetime_coerce_class: singleton(Object) | nil, ?validate_header: bool) -> untyped
9
+ def initialize: (?allow_empty_date_and_datetime: bool | nil, ?coerce_value: bool | nil, ?datetime_coerce_class: singleton(Object) | nil, ?date_coerce_class: singleton(Object) | nil, ?validate_header: bool) -> untyped
10
10
  end
11
11
 
12
12
  class ResponseValidateOptions
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.3.0
4
+ version: 2.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - ota42y