openapi_parameters 0.6.1 → 0.7.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 +12 -1
- data/lib/openapi_parameters/parameter.rb +1 -0
- data/lib/openapi_parameters/query.rb +39 -3
- 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: 2c8fe7a86aaad928b6277f62969502db824f37ff92624c6f33abfa43dad15454
|
4
|
+
data.tar.gz: f8b36c4416ff14775bf9cb7ca05c5d6ad45589a5a1a390a6bcaa395142027241
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f447c974255d4f21c3822c975b655ddb3f988a513bdb1684491a4bc0a60406f66d170378b8d5e2bc7d64eed5b94366716fdafa9f4074e90f5f1f1ad4567b0d2d
|
7
|
+
data.tar.gz: f3ac74f5faecfca7aa8513fe0e4ce901a5cca2ca42833e0f0c07e2b844e8e8ded7166ac99b492631d0d2173173cce438f4a8c37daa0b16491db0d7ddaf09aa1f
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,19 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [0.7.0] - 2025-09-12
|
4
|
+
|
5
|
+
- Correctly handle `style:deepObject` with `explode: true` and parse into array
|
6
|
+
```ruby
|
7
|
+
OpenapiParameters::Query.new(
|
8
|
+
[parameter],
|
9
|
+
explode: true
|
10
|
+
).unpack('ids=1&ids=2')
|
11
|
+
# => { 'ids' => ['1', '2'] }
|
12
|
+
```
|
13
|
+
|
3
14
|
## [0.6.1] - 2025-06-23
|
4
15
|
|
5
|
-
- Fix converting items of array
|
16
|
+
- Fix converting items of array parameters
|
6
17
|
|
7
18
|
## [0.6.0] - 2025-06-23
|
8
19
|
|
@@ -11,16 +11,21 @@ module OpenapiParameters
|
|
11
11
|
@parameters = parameters.map { Parameter.new(_1) }
|
12
12
|
@convert = convert
|
13
13
|
@remove_array_brackets = rack_array_compat
|
14
|
+
@any_deep_object = @parameters.any?(&:deep_object?)
|
14
15
|
end
|
15
16
|
|
16
|
-
def unpack(query_string) # rubocop:disable Metrics/AbcSize
|
17
|
+
def unpack(query_string) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
|
17
18
|
parsed_query = parse_query(query_string)
|
19
|
+
parsed_nested_query = Rack::Utils.parse_nested_query(query_string) if any_deep_object?
|
18
20
|
parameters.each_with_object({}) do |parameter, result|
|
19
21
|
if parameter.deep_object?
|
20
|
-
parsed_nested_query = Rack::Utils.parse_nested_query(query_string)
|
21
22
|
next unless parsed_nested_query.key?(parameter.name)
|
22
23
|
|
23
|
-
value =
|
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
|
24
29
|
else
|
25
30
|
next unless parsed_query.key?(parameter.name)
|
26
31
|
|
@@ -40,6 +45,10 @@ module OpenapiParameters
|
|
40
45
|
|
41
46
|
private
|
42
47
|
|
48
|
+
def any_deep_object?
|
49
|
+
@any_deep_object
|
50
|
+
end
|
51
|
+
|
43
52
|
def parse_query(query_string)
|
44
53
|
Rack::Utils.parse_query(query_string) do |s|
|
45
54
|
Rack::Utils.unescape(s)
|
@@ -47,5 +56,32 @@ module OpenapiParameters
|
|
47
56
|
raise Rack::Utils::InvalidParameterError, e.message
|
48
57
|
end
|
49
58
|
end
|
59
|
+
|
60
|
+
def handle_deep_object_explode(parameter, value, parsed_query)
|
61
|
+
return value unless value.is_a?(Hash)
|
62
|
+
|
63
|
+
schema_props = parameter.schema['properties'] || {}
|
64
|
+
|
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
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
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)
|
84
|
+
end
|
85
|
+
end
|
50
86
|
end
|
51
87
|
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.7.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-
|
11
|
+
date: 2025-09-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|