openapi_parameters 0.5.1 → 0.6.1
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '079a687acb19dfb87815260d6cf7ea39a8cfe176f3ee9e3ebfd345dde517ea08'
|
4
|
+
data.tar.gz: 9dd609bda36de57a3d8c3c526ffd4c707c4cbbfb0f62f83d9f47ecab640ac8a5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 45d3a59bba22cb4b864db2472b6993d8aa3fe4a70a47af5183cc2d65b8d57e0684c9401782be84e04c79ee133aa714cfa87fa3e0436ec7d629e0dac6844681b1
|
7
|
+
data.tar.gz: 4f71f9ba3187ff382a9bbf53af7e5c543ffe51d6a5a4a7d02828b8380e7d1a31a60b7bfeffef163eac716a230e9a50021086631049a3a1132cba977a07395522
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [0.6.1] - 2025-06-23
|
4
|
+
|
5
|
+
- Fix converting items of array paramters
|
6
|
+
|
7
|
+
## [0.6.0] - 2025-06-23
|
8
|
+
|
9
|
+
- Array parameters without a value ("?ids=" or "?ids") return an empty array instead of nil or an empty string.
|
10
|
+
This makes parsing more consistent, because it should not matter if "=" is added or not.
|
11
|
+
|
3
12
|
## [0.5.1] - 2025-06-17
|
4
13
|
|
5
14
|
- Raise `Rack::Utils::InvalidParameterError` when query paramter has invalid "%"-encoding
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module OpenapiParameters
|
4
|
+
# @visibility private
|
5
|
+
class ArrayConverter
|
6
|
+
def initialize(schema)
|
7
|
+
@schema = schema
|
8
|
+
end
|
9
|
+
|
10
|
+
attr_reader :schema
|
11
|
+
|
12
|
+
def call(value)
|
13
|
+
return [] if value.nil? || value.empty?
|
14
|
+
|
15
|
+
convert_array(value)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def convert_array(array)
|
21
|
+
return array unless array.is_a?(Array)
|
22
|
+
|
23
|
+
item_schema = schema['items']
|
24
|
+
prefix_schemas = schema['prefixItems']
|
25
|
+
return convert_array_with_prefixes(array, prefix_schemas, item_schema) if prefix_schemas
|
26
|
+
|
27
|
+
array.map { |item| Converter.convert(item, item_schema) }
|
28
|
+
end
|
29
|
+
|
30
|
+
def convert_array_with_prefixes(array, prefix_schemas, item_schema)
|
31
|
+
prefixes =
|
32
|
+
array
|
33
|
+
.slice(0, prefix_schemas.size)
|
34
|
+
.each_with_index
|
35
|
+
.map { |item, index| Converter.convert(item, prefix_schemas[index]) }
|
36
|
+
array =
|
37
|
+
array[prefix_schemas.size..].map! do |item|
|
38
|
+
Converter.convert(item, item_schema)
|
39
|
+
end
|
40
|
+
prefixes + array
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -1,11 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative 'array_converter'
|
4
|
+
|
3
5
|
module OpenapiParameters
|
4
6
|
# Tries to convert a request parameter value (string) to the type specified in the JSON Schema.
|
5
7
|
# @visibility private
|
6
8
|
module Converter
|
7
9
|
class << self
|
8
|
-
##
|
9
10
|
# @param value [String, Hash, Array] the value to convert
|
10
11
|
# @param schema [Hash] the schema to use for conversion.
|
11
12
|
def convert(value, schema) # rubocop:disable Metrics
|
@@ -34,7 +35,7 @@ module OpenapiParameters
|
|
34
35
|
when 'object'
|
35
36
|
convert_object(value, schema)
|
36
37
|
when 'array'
|
37
|
-
|
38
|
+
ArrayConverter.new(schema).call(value)
|
38
39
|
else
|
39
40
|
if schema['properties']
|
40
41
|
convert_object(value, schema)
|
@@ -48,7 +49,7 @@ module OpenapiParameters
|
|
48
49
|
return value unless value.is_a?(Hash)
|
49
50
|
|
50
51
|
value.each_with_object({}) do |(key, val), hsh|
|
51
|
-
hsh[key] = convert(val, schema['properties']&.fetch(key, nil))
|
52
|
+
hsh[key] = Converter.convert(val, schema['properties']&.fetch(key, nil))
|
52
53
|
end
|
53
54
|
end
|
54
55
|
|
@@ -57,29 +58,6 @@ module OpenapiParameters
|
|
57
58
|
def type(schema)
|
58
59
|
schema && schema['type']
|
59
60
|
end
|
60
|
-
|
61
|
-
def convert_array(array, schema)
|
62
|
-
return array unless array.is_a?(Array)
|
63
|
-
|
64
|
-
item_schema = schema['items']
|
65
|
-
prefix_schemas = schema['prefixItems']
|
66
|
-
return convert_array_with_prefixes(array, prefix_schemas, item_schema) if prefix_schemas
|
67
|
-
|
68
|
-
array.map { |item| convert(item, item_schema) }
|
69
|
-
end
|
70
|
-
|
71
|
-
def convert_array_with_prefixes(array, prefix_schemas, item_schema)
|
72
|
-
prefixes =
|
73
|
-
array
|
74
|
-
.slice(0, prefix_schemas.size)
|
75
|
-
.each_with_index
|
76
|
-
.map { |item, index| convert(item, prefix_schemas[index]) }
|
77
|
-
array =
|
78
|
-
array[prefix_schemas.size..].map! do |item|
|
79
|
-
convert(item, item_schema)
|
80
|
-
end
|
81
|
-
prefixes + array
|
82
|
-
end
|
83
61
|
end
|
84
62
|
end
|
85
63
|
end
|
@@ -47,19 +47,5 @@ module OpenapiParameters
|
|
47
47
|
raise Rack::Utils::InvalidParameterError, e.message
|
48
48
|
end
|
49
49
|
end
|
50
|
-
|
51
|
-
def convert_primitive(value, parameter)
|
52
|
-
return value unless @convert
|
53
|
-
return value if value == ''
|
54
|
-
|
55
|
-
Converter.convert_primitive(value, parameter.schema)
|
56
|
-
end
|
57
|
-
|
58
|
-
def convert(value, parameter)
|
59
|
-
return value unless @convert
|
60
|
-
return value if value == ''
|
61
|
-
|
62
|
-
Converter.convert(value, parameter.schema)
|
63
|
-
end
|
64
50
|
end
|
65
51
|
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.6.1
|
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-06-
|
11
|
+
date: 2025-06-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -35,6 +35,7 @@ files:
|
|
35
35
|
- CHANGELOG.md
|
36
36
|
- README.md
|
37
37
|
- lib/openapi_parameters.rb
|
38
|
+
- lib/openapi_parameters/array_converter.rb
|
38
39
|
- lib/openapi_parameters/converter.rb
|
39
40
|
- lib/openapi_parameters/converters.rb
|
40
41
|
- lib/openapi_parameters/cookie.rb
|