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 +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/openapi_parameters/parameter.rb +0 -1
- data/lib/openapi_parameters/query.rb +18 -28
- data/lib/openapi_parameters/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee2751342867fef145f12b7b8cd681cca155ba396a89c69f6c476d5566967cff
|
4
|
+
data.tar.gz: 7f00815807f40d26a66b9aac7c58565ad568adb4a7d91b497805168d9b4e9def
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
@@ -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
|
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
|
-
|
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
|
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
|
-
|
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
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
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
|
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.
|
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-
|
11
|
+
date: 2025-09-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|