openapi_parameters 0.3.4 → 0.5.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 -0
- data/lib/openapi_parameters/converter.rb +1 -0
- data/lib/openapi_parameters/converters.rb +43 -0
- data/lib/openapi_parameters/cookie.rb +1 -1
- data/lib/openapi_parameters/error.rb +3 -0
- data/lib/openapi_parameters/header.rb +1 -1
- data/lib/openapi_parameters/parameter.rb +12 -0
- data/lib/openapi_parameters/path.rb +1 -1
- data/lib/openapi_parameters/query.rb +10 -3
- data/lib/openapi_parameters/version.rb +1 -1
- data/lib/openapi_parameters.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 778cfe7ccd40119158a3c158b5cf1dcf8000436a4c747a1ecfa349782ffa99d1
|
4
|
+
data.tar.gz: ebdb7a20b68b881e526e11fd30e05458ed8dd5dea34b16f94115e522dfa1801f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 61c5e95989223be85f4965355aede74739ac71a3f07ebeba9b6486ef56acf45a64093ffa23b680d1ccad28f7abbbcc4d94a6135acf4575f87f7e67773ccdd97c
|
7
|
+
data.tar.gz: 82fe0b18f8a79e758b5b3a3a496a8de373cc7a47079a3944cd5a6843130c03c1ca6b5173d479a8c2c0a14697e106f2d1aa407d6181e1feac8e5b2cdd074bb4bd
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,21 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [0.5.0] - 2025-04-01
|
4
|
+
|
5
|
+
- Add option to remove "[]" from unpacked query openapi_parameters
|
6
|
+
```ruby
|
7
|
+
OpenapiParameters::Query.new(
|
8
|
+
[parameter],
|
9
|
+
rack_array_compat: true
|
10
|
+
).unpack('ids[]=2')
|
11
|
+
# => { 'ids' => ['2'] }
|
12
|
+
```
|
13
|
+
|
14
|
+
## [0.4.0] - 2024-12-17
|
15
|
+
|
16
|
+
- Add Parameter#convert(value)
|
17
|
+
- Slight performance optimization
|
18
|
+
|
3
19
|
## [0.3.4] - 2024-06-14
|
4
20
|
|
5
21
|
- Fix handling invalid object query parameters (String vs Hash)
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module OpenapiParameters
|
4
|
+
# Home for all converters
|
5
|
+
module Converters
|
6
|
+
@converters = {}
|
7
|
+
|
8
|
+
class << self
|
9
|
+
attr_reader :converters
|
10
|
+
|
11
|
+
def register(type, converter)
|
12
|
+
converters[type] = converter
|
13
|
+
end
|
14
|
+
|
15
|
+
def [](schema)
|
16
|
+
type = schema && schema['type']
|
17
|
+
converters.fetch(type) do
|
18
|
+
->(value) { Converter.convert(value, schema) }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
register('integer', lambda do |value|
|
24
|
+
Integer(value, 10)
|
25
|
+
rescue StandardError
|
26
|
+
value
|
27
|
+
end)
|
28
|
+
|
29
|
+
register('number', lambda do |value|
|
30
|
+
Float(value)
|
31
|
+
rescue StandardError
|
32
|
+
value
|
33
|
+
end)
|
34
|
+
|
35
|
+
register('boolean', lambda do |value|
|
36
|
+
if value == 'true'
|
37
|
+
true
|
38
|
+
else
|
39
|
+
value == 'false' ? false : value
|
40
|
+
end
|
41
|
+
end)
|
42
|
+
end
|
43
|
+
end
|
@@ -18,7 +18,7 @@ module OpenapiParameters
|
|
18
18
|
|
19
19
|
result[parameter.name] = catch :skip do
|
20
20
|
value = Unpacker.unpack_value(parameter, cookies[parameter.name])
|
21
|
-
@convert ?
|
21
|
+
@convert ? parameter.convert(value) : value
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -17,7 +17,7 @@ module OpenapiParameters
|
|
17
17
|
|
18
18
|
result[parameter.name] = catch :skip do
|
19
19
|
value = Unpacker.unpack_value(parameter, headers[parameter.name])
|
20
|
-
@convert ?
|
20
|
+
@convert ? parameter.convert(value) : value
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -9,11 +9,16 @@ module OpenapiParameters
|
|
9
9
|
@definition = definition
|
10
10
|
@name = definition['name']
|
11
11
|
@is_deep_object = style == 'deepObject'
|
12
|
+
@converter = Converters[schema]
|
12
13
|
check_supported!
|
13
14
|
end
|
14
15
|
|
15
16
|
attr_reader :definition, :name
|
16
17
|
|
18
|
+
def convert(value)
|
19
|
+
@converter.call(value)
|
20
|
+
end
|
21
|
+
|
17
22
|
def deep_object?
|
18
23
|
@is_deep_object
|
19
24
|
end
|
@@ -47,6 +52,13 @@ module OpenapiParameters
|
|
47
52
|
type == 'array'
|
48
53
|
end
|
49
54
|
|
55
|
+
EMPTY_BRACKETS = '[]'
|
56
|
+
private_constant :EMPTY_BRACKETS
|
57
|
+
|
58
|
+
def bracket_array?
|
59
|
+
@bracket_array ||= array? && name.end_with?(EMPTY_BRACKETS)
|
60
|
+
end
|
61
|
+
|
50
62
|
def object?
|
51
63
|
type == 'object' || style == 'deepObject' || schema&.key?('properties')
|
52
64
|
end
|
@@ -21,7 +21,7 @@ module OpenapiParameters
|
|
21
21
|
|
22
22
|
result[parameter.name] = catch :skip do
|
23
23
|
value = Unpacker.unpack_value(parameter, path_params[parameter.name])
|
24
|
-
@convert ?
|
24
|
+
@convert ? parameter.convert(value) : value
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
@@ -7,9 +7,10 @@ module OpenapiParameters
|
|
7
7
|
class Query
|
8
8
|
# @param parameters [Array<Hash>] The OpenAPI query parameter definitions.
|
9
9
|
# @param convert [Boolean] Whether to convert the values to the correct type.
|
10
|
-
def initialize(parameters, convert: true)
|
10
|
+
def initialize(parameters, convert: true, rack_array_compat: false)
|
11
11
|
@parameters = parameters.map { Parameter.new(_1) }
|
12
12
|
@convert = convert
|
13
|
+
@remove_array_brackets = rack_array_compat
|
13
14
|
end
|
14
15
|
|
15
16
|
def unpack(query_string) # rubocop:disable Metrics/AbcSize
|
@@ -19,17 +20,23 @@ module OpenapiParameters
|
|
19
20
|
parsed_nested_query = Rack::Utils.parse_nested_query(query_string)
|
20
21
|
next unless parsed_nested_query.key?(parameter.name)
|
21
22
|
|
22
|
-
|
23
|
+
value = parsed_nested_query[parameter.name]
|
23
24
|
else
|
24
25
|
next unless parsed_query.key?(parameter.name)
|
25
26
|
|
26
27
|
value = Unpacker.unpack_value(parameter, parsed_query[parameter.name])
|
27
|
-
result[parameter.name] = convert(value, parameter)
|
28
28
|
end
|
29
|
+
key = if remove_array_brackets && parameter.bracket_array?
|
30
|
+
parameter.name.delete_suffix('[]')
|
31
|
+
else
|
32
|
+
parameter.name
|
33
|
+
end
|
34
|
+
result[key] = @convert ? parameter.convert(value) : value
|
29
35
|
end
|
30
36
|
end
|
31
37
|
|
32
38
|
attr_reader :parameters
|
39
|
+
private attr_reader :remove_array_brackets
|
33
40
|
|
34
41
|
private
|
35
42
|
|
data/lib/openapi_parameters.rb
CHANGED
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.5.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:
|
11
|
+
date: 2025-04-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -36,6 +36,7 @@ files:
|
|
36
36
|
- README.md
|
37
37
|
- lib/openapi_parameters.rb
|
38
38
|
- lib/openapi_parameters/converter.rb
|
39
|
+
- lib/openapi_parameters/converters.rb
|
39
40
|
- lib/openapi_parameters/cookie.rb
|
40
41
|
- lib/openapi_parameters/error.rb
|
41
42
|
- lib/openapi_parameters/header.rb
|