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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '079a687acb19dfb87815260d6cf7ea39a8cfe176f3ee9e3ebfd345dde517ea08'
4
- data.tar.gz: 9dd609bda36de57a3d8c3c526ffd4c707c4cbbfb0f62f83d9f47ecab640ac8a5
3
+ metadata.gz: ee2751342867fef145f12b7b8cd681cca155ba396a89c69f6c476d5566967cff
4
+ data.tar.gz: 7f00815807f40d26a66b9aac7c58565ad568adb4a7d91b497805168d9b4e9def
5
5
  SHA512:
6
- metadata.gz: 45d3a59bba22cb4b864db2472b6993d8aa3fe4a70a47af5183cc2d65b8d57e0684c9401782be84e04c79ee133aa714cfa87fa3e0436ec7d629e0dac6844681b1
7
- data.tar.gz: 4f71f9ba3187ff382a9bbf53af7e5c543ffe51d6a5a4a7d02828b8380e7d1a31a60b7bfeffef163eac716a230e9a50021086631049a3a1132cba977a07395522
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 paramters
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
- parsed_nested_query = Rack::Utils.parse_nested_query(query_string)
21
- next unless parsed_nested_query.key?(parameter.name)
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OpenapiParameters
4
- VERSION = '0.6.1'
4
+ VERSION = '0.8.0'
5
5
  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.6.1
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-06-26 00:00:00.000000000 Z
11
+ date: 2025-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack