openapi_parameters 0.7.0 → 0.8.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: 2c8fe7a86aaad928b6277f62969502db824f37ff92624c6f33abfa43dad15454
4
- data.tar.gz: f8b36c4416ff14775bf9cb7ca05c5d6ad45589a5a1a390a6bcaa395142027241
3
+ metadata.gz: ee2751342867fef145f12b7b8cd681cca155ba396a89c69f6c476d5566967cff
4
+ data.tar.gz: 7f00815807f40d26a66b9aac7c58565ad568adb4a7d91b497805168d9b4e9def
5
5
  SHA512:
6
- metadata.gz: f447c974255d4f21c3822c975b655ddb3f988a513bdb1684491a4bc0a60406f66d170378b8d5e2bc7d64eed5b94366716fdafa9f4074e90f5f1f1ad4567b0d2d
7
- data.tar.gz: f3ac74f5faecfca7aa8513fe0e4ce901a5cca2ca42833e0f0c07e2b844e8e8ded7166ac99b492631d0d2173173cce438f4a8c37daa0b16491db0d7ddaf09aa1f
6
+ metadata.gz: 27e43f8835d7759baef4deb7969a6517fedcf6e7456916369c4d6aeae4ff624ce77eaff7968c5ab01f36edbcd92b1bbc9388d3af14170d8c0130c874621f882d
7
+ data.tar.gz: 107e3ffa3b290342b68ae3a6228a4b780e2cbd7be26c12ee42aa276d1be0128a4f024b724424f6e2330578d833995644a23e0f9907b3cf145f1978f8916acb4b
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.8.0] - 2025-09-17
4
+
5
+ - No longer parse more than one level of nested objects when parsing `deepObject` parameters. This is actually in line with what `deepObject` supports.
6
+
3
7
  ## [0.7.0] - 2025-09-12
4
8
 
5
9
  - Correctly handle `style:deepObject` with `explode: true` and parse into array
@@ -9,7 +9,6 @@ module OpenapiParameters
9
9
  @definition = definition
10
10
  @name = definition['name']
11
11
  @is_deep_object = style == 'deepObject'
12
- @is_explode = explode?
13
12
  @converter = Converters[schema]
14
13
  check_supported!
15
14
  end
@@ -14,18 +14,12 @@ module OpenapiParameters
14
14
  @any_deep_object = @parameters.any?(&:deep_object?)
15
15
  end
16
16
 
17
- def unpack(query_string) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
17
+ def unpack(query_string) # rubocop:disable Metrics/AbcSize
18
18
  parsed_query = parse_query(query_string)
19
- parsed_nested_query = Rack::Utils.parse_nested_query(query_string) if any_deep_object?
20
19
  parameters.each_with_object({}) do |parameter, result|
21
20
  if parameter.deep_object?
22
- next unless parsed_nested_query.key?(parameter.name)
23
-
24
- value = if parameter.explode?
25
- handle_deep_object_explode(parameter, parsed_nested_query[parameter.name], parsed_query)
26
- else
27
- parsed_nested_query[parameter.name]
28
- end
21
+ value = parse_deep_object(parameter, parsed_query)
22
+ next if value.empty?
29
23
  else
30
24
  next unless parsed_query.key?(parameter.name)
31
25
 
@@ -57,31 +51,27 @@ module OpenapiParameters
57
51
  end
58
52
  end
59
53
 
60
- def handle_deep_object_explode(parameter, value, parsed_query)
61
- return value unless value.is_a?(Hash)
62
-
54
+ def parse_deep_object(parameter, parsed_query)
63
55
  schema_props = parameter.schema['properties'] || {}
56
+ name = parameter.name
57
+ schema_props.each.with_object({}) do |(prop, schema), result|
58
+ key = "#{name}[#{prop}]"
59
+ next unless parsed_query.key?(key)
64
60
 
65
- array_prop_values = find_prop_matches(parameter.name, schema_props, parsed_query)
66
-
67
- schema_props.each_with_object(value) do |(prop, prop_schema), result|
68
- next unless prop_schema['type'] == 'array'
69
-
70
- arr = array_prop_values[prop]
71
- result[prop] = if arr.empty? && value.key?(prop)
72
- Array(value[prop])
73
- else
74
- arr
75
- end
61
+ value = explode_value(parsed_query[key], parameter, schema)
62
+ result[prop] = value
76
63
  end
77
64
  end
78
65
 
79
- def find_prop_matches(parameter_name, schema_props, parsed_query)
80
- schema_props.each_key.with_object({}) do |prop, result|
81
- key = "#{parameter_name}[#{prop}]"
82
- value = Array(parsed_query[key])
83
- result[prop] = value.map { |match| Rack::Utils.unescape(match) } if value.is_a?(Array)
66
+ def explode_value(value, parameter, schema)
67
+ type = schema['type']
68
+ value = Array(value).map! { |v| Rack::Utils.unescape(v) }
69
+ if type == 'array'
70
+ return value if parameter.explode?
71
+
72
+ return [value.last]
84
73
  end
74
+ value.last
85
75
  end
86
76
  end
87
77
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OpenapiParameters
4
- VERSION = '0.7.0'
4
+ VERSION = '0.8.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openapi_parameters
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Haller
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-09-12 00:00:00.000000000 Z
11
+ date: 2025-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack