openapi_parameters 0.6.1 → 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 +16 -1
- data/lib/openapi_parameters/query.rb +30 -4
- 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,8 +1,23 @@
|
|
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
|
+
|
7
|
+
## [0.7.0] - 2025-09-12
|
8
|
+
|
9
|
+
- Correctly handle `style:deepObject` with `explode: true` and parse into array
|
10
|
+
```ruby
|
11
|
+
OpenapiParameters::Query.new(
|
12
|
+
[parameter],
|
13
|
+
explode: true
|
14
|
+
).unpack('ids=1&ids=2')
|
15
|
+
# => { 'ids' => ['1', '2'] }
|
16
|
+
```
|
17
|
+
|
3
18
|
## [0.6.1] - 2025-06-23
|
4
19
|
|
5
|
-
- Fix converting items of array
|
20
|
+
- Fix converting items of array parameters
|
6
21
|
|
7
22
|
## [0.6.0] - 2025-06-23
|
8
23
|
|
@@ -11,16 +11,15 @@ 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
17
|
def unpack(query_string) # rubocop:disable Metrics/AbcSize
|
17
18
|
parsed_query = parse_query(query_string)
|
18
19
|
parameters.each_with_object({}) do |parameter, result|
|
19
20
|
if parameter.deep_object?
|
20
|
-
|
21
|
-
next
|
22
|
-
|
23
|
-
value = parsed_nested_query[parameter.name]
|
21
|
+
value = parse_deep_object(parameter, parsed_query)
|
22
|
+
next if value.empty?
|
24
23
|
else
|
25
24
|
next unless parsed_query.key?(parameter.name)
|
26
25
|
|
@@ -40,6 +39,10 @@ module OpenapiParameters
|
|
40
39
|
|
41
40
|
private
|
42
41
|
|
42
|
+
def any_deep_object?
|
43
|
+
@any_deep_object
|
44
|
+
end
|
45
|
+
|
43
46
|
def parse_query(query_string)
|
44
47
|
Rack::Utils.parse_query(query_string) do |s|
|
45
48
|
Rack::Utils.unescape(s)
|
@@ -47,5 +50,28 @@ module OpenapiParameters
|
|
47
50
|
raise Rack::Utils::InvalidParameterError, e.message
|
48
51
|
end
|
49
52
|
end
|
53
|
+
|
54
|
+
def parse_deep_object(parameter, parsed_query)
|
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)
|
60
|
+
|
61
|
+
value = explode_value(parsed_query[key], parameter, schema)
|
62
|
+
result[prop] = value
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
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]
|
73
|
+
end
|
74
|
+
value.last
|
75
|
+
end
|
50
76
|
end
|
51
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-
|
11
|
+
date: 2025-09-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|