openapi_parameters 0.9.0 → 0.11.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: 6e4a1690610c9bbbd5f901f5521b8d5c417d5679b2d3c22bf7c3b4fe5863a9a4
4
- data.tar.gz: 37cadc3d8d9ff17c11082d1fe14db177b1778d14f0b89698fe5ad2292b5927db
3
+ metadata.gz: c60c99ee16620da86f7369bd56aba581bb01b330f964f996c1c87ef9d6262ef3
4
+ data.tar.gz: 295645007a994719cbab03c8b6d7067814694b99db6c8ef0063157a50357c073
5
5
  SHA512:
6
- metadata.gz: b842ce9afd9246033103fddc51a26e888d9154eb4e694722f55c3ad3cb6a8226b3315e738411e71a21c516b5ef4f3bd8d86699d4638016b7c5aa5cec52b252c8
7
- data.tar.gz: '09dd12da6978846a76a680fb22a859f339fb398bc3733682bf5924ff42d6de39e13b3f2f231552f777e175a1894fe9a915cd449dc7157b0ae2d37de21bd7b1b9'
6
+ metadata.gz: ef68be758fbd8675edcb35b6abdb89da197b76f8be22b47d0fb6e79a6fbe120a43332e46fdeae2f428f90db77d8c13c7ba129874554e8747ef714c73cc9a84fc
7
+ data.tar.gz: cb1e43539392572a521ec67880ff44ee5dc94374ff82087513206dbd9e54e1113997344235372da5eb592da1c07e3ae82a2167a31fc042ba59fc24021b056b34
data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.11.0] - 2025-11-30
4
+
5
+ - Changed: Passing a plain query string like `filter=ada` to a`deepObject` parameter instead of using the brackets syntax `filter[name]=ada` no longer results in an empty object, but in the plain string value (like `{ filter: 'ada'} `), which will make request validation fail.
6
+
7
+ ## [0.10.0] - 2025-11-23
8
+
9
+ - remove `OpenapiParameters::Parameter#definition` to clean up interface
10
+ - Add `OpenapiParameters::Query#unknown_values` to find unknown query parameters
11
+
3
12
  ## [0.9.0] - 2025-11-07
4
13
 
5
14
  - Add support for unpacking query parameters that use deepObject and oneOf,andOf,anyOf,if-them-else
data/README.md CHANGED
@@ -28,6 +28,10 @@ query_parameters = OpenapiParameters::Query.new([{
28
28
  query_string = env['QUERY_STRING'] # => 'ids=1&ids=2'
29
29
  query_parameters.unpack(query_string) # => { 'ids' => [1, 2] }
30
30
 
31
+ # Find unknown query parameters
32
+ # Note that this does only return unknown top-level values
33
+ query_parameters.unknown_values('ids=1&ids=2&foo=bar') # => { 'foo' => 'bar' }
34
+
31
35
  path_parameters = OpenapiParameters::Path.new(parameters)
32
36
  route_params = env['route.params'] # This depends on the webframework you are using
33
37
  path_parameters.unpack(route_params) # => { 'ids' => [1, 2, 3] }
@@ -13,7 +13,8 @@ module OpenapiParameters
13
13
  check_supported!
14
14
  end
15
15
 
16
- attr_reader :definition, :name
16
+ attr_reader :name
17
+ private attr_reader :definition
17
18
 
18
19
  def convert(value)
19
20
  @converter.call(value)
@@ -18,8 +18,12 @@ module OpenapiParameters
18
18
  parsed_query = parse_query(query_string)
19
19
  parameters.each_with_object({}) do |parameter, result|
20
20
  if parameter.deep_object?
21
- value = parse_deep_object(parameter, parsed_query)
22
- next if value.empty?
21
+ if parsed_query.key?(parameter.name)
22
+ value = parsed_query[parameter.name]
23
+ else
24
+ value = parse_deep_object(parameter, parsed_query)
25
+ next if value.empty?
26
+ end
23
27
  else
24
28
  next unless parsed_query.key?(parameter.name)
25
29
 
@@ -34,6 +38,24 @@ module OpenapiParameters
34
38
  end
35
39
  end
36
40
 
41
+ def unknown_values(query_string)
42
+ parsed_query = parse_query(query_string)
43
+ known_parameter_names = parameters.to_set(&:name)
44
+
45
+ unknown = parsed_query.each_with_object({}) do |(key, value), result|
46
+ # Skip parameters that are defined in the schema
47
+ next if known_parameter_names.include?(key)
48
+
49
+ # Skip deep object parameters that might belong to defined parameters
50
+ next if parameters.any? { |param| param.deep_object? && key.start_with?("#{param.name}[") }
51
+
52
+ result[key] = value
53
+ end
54
+ return if unknown.empty?
55
+
56
+ unknown
57
+ end
58
+
37
59
  attr_reader :parameters
38
60
  private attr_reader :remove_array_brackets, :parameter_property_schemas
39
61
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OpenapiParameters
4
- VERSION = '0.9.0'
4
+ VERSION = '0.11.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openapi_parameters
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Haller