openapi_parameters 0.8.0 → 0.9.0.beta1
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 +2 -0
- data/lib/openapi_parameters/query.rb +31 -14
- data/lib/openapi_parameters/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 333fd99034d125536a4a747d4c611e474ba8f2c41aa84d9c983f0cd7425b13cb
|
|
4
|
+
data.tar.gz: '067223459914938a710d91de39125b4e8c7a7dc820b637fa5c3fa2bc1502465e'
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 653a7d0631784ed6ce34187307a973f08fee2560dceb93390d4d509f49c68acb6101d4cd1a274eb009df9020a81a0081089c24af4aeb6f64be43f4f46a9bdbfc
|
|
7
|
+
data.tar.gz: e458b12c372881a3e2503e891348da76ad735fc197f66343c6ff74fd1dd8107d2054c553b246959c7ef3a793e52b4432ca2e3c2d955ef7b66d6f59968f2bd1ab
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
## [Unreleased]
|
|
2
2
|
|
|
3
|
+
- Add basic support unpacking query paramters that use deepObject and oneOf
|
|
4
|
+
|
|
3
5
|
## [0.8.0] - 2025-09-17
|
|
4
6
|
|
|
5
7
|
- No longer parse more than one level of nested objects when parsing `deepObject` parameters. This is actually in line with what `deepObject` supports.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'rack'
|
|
4
|
+
require_relative 'converter'
|
|
4
5
|
|
|
5
6
|
module OpenapiParameters
|
|
6
7
|
# Query parses query parameters from a http query strings.
|
|
@@ -11,7 +12,6 @@ module OpenapiParameters
|
|
|
11
12
|
@parameters = parameters.map { Parameter.new(_1) }
|
|
12
13
|
@convert = convert
|
|
13
14
|
@remove_array_brackets = rack_array_compat
|
|
14
|
-
@any_deep_object = @parameters.any?(&:deep_object?)
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def unpack(query_string) # rubocop:disable Metrics/AbcSize
|
|
@@ -35,14 +35,10 @@ module OpenapiParameters
|
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
attr_reader :parameters
|
|
38
|
-
private attr_reader :remove_array_brackets
|
|
38
|
+
private attr_reader :remove_array_brackets, :parameter_property_schemas
|
|
39
39
|
|
|
40
40
|
private
|
|
41
41
|
|
|
42
|
-
def any_deep_object?
|
|
43
|
-
@any_deep_object
|
|
44
|
-
end
|
|
45
|
-
|
|
46
42
|
def parse_query(query_string)
|
|
47
43
|
Rack::Utils.parse_query(query_string) do |s|
|
|
48
44
|
Rack::Utils.unescape(s)
|
|
@@ -51,22 +47,43 @@ module OpenapiParameters
|
|
|
51
47
|
end
|
|
52
48
|
end
|
|
53
49
|
|
|
50
|
+
def build_properties_schema(parameter)
|
|
51
|
+
schema = parameter.schema
|
|
52
|
+
return unless schema
|
|
53
|
+
|
|
54
|
+
props = schema['properties']
|
|
55
|
+
return props if props
|
|
56
|
+
|
|
57
|
+
combinations = schema.slice('allOf', 'oneOf', 'anyOf')
|
|
58
|
+
if combinations.any?
|
|
59
|
+
props = combinations.values.flat_map { |value| value.map { |sub| sub['properties'] }.compact }
|
|
60
|
+
return {}.merge(*props.compact)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
schema
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
DEEP_PROP = '\[([\w-]+)\]$'
|
|
67
|
+
private_constant :DEEP_PROP
|
|
68
|
+
|
|
54
69
|
def parse_deep_object(parameter, parsed_query)
|
|
55
|
-
schema_props = parameter.schema['properties'] || {}
|
|
56
70
|
name = parameter.name
|
|
57
|
-
|
|
58
|
-
|
|
71
|
+
prop_regx = /^#{name}#{DEEP_PROP}/
|
|
72
|
+
parsed_query.each.with_object({}) do |(key, value), result|
|
|
59
73
|
next unless parsed_query.key?(key)
|
|
60
74
|
|
|
61
|
-
|
|
62
|
-
|
|
75
|
+
prop_key = key.match(prop_regx)&.[](1)
|
|
76
|
+
next if prop_key.nil?
|
|
77
|
+
|
|
78
|
+
is_array = parameter.schema&.dig('properties', prop_key, 'type') == 'array'
|
|
79
|
+
value = explode_value(value, parameter, is_array)
|
|
80
|
+
result[prop_key] = value
|
|
63
81
|
end
|
|
64
82
|
end
|
|
65
83
|
|
|
66
|
-
def explode_value(value, parameter,
|
|
67
|
-
type = schema['type']
|
|
84
|
+
def explode_value(value, parameter, is_array)
|
|
68
85
|
value = Array(value).map! { |v| Rack::Utils.unescape(v) }
|
|
69
|
-
if
|
|
86
|
+
if is_array
|
|
70
87
|
return value if parameter.explode?
|
|
71
88
|
|
|
72
89
|
return [value.last]
|
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.9.0.beta1
|
|
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-11-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rack
|
|
@@ -67,9 +67,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
67
67
|
version: 3.1.0
|
|
68
68
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
69
69
|
requirements:
|
|
70
|
-
- - "
|
|
70
|
+
- - ">"
|
|
71
71
|
- !ruby/object:Gem::Version
|
|
72
|
-
version:
|
|
72
|
+
version: 1.3.1
|
|
73
73
|
requirements: []
|
|
74
74
|
rubygems_version: 3.4.6
|
|
75
75
|
signing_key:
|