Skip to content

Commit bbfc6e0

Browse files
fix(client): serialize query parameters properly
1 parent 8f0a0a9 commit bbfc6e0

7 files changed

Lines changed: 69 additions & 4 deletions

File tree

lib/imagekitio/internal/util.rb

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,37 @@ def writable_enum(&blk)
490490
JSONL_CONTENT = %r{^application/(:?x-(?:n|l)djson)|(:?(?:x-)?jsonl)}
491491

492492
class << self
493+
# @api private
494+
#
495+
# @param query [Hash{Symbol=>Object}]
496+
#
497+
# @return [Hash{Symbol=>Object}]
498+
def encode_query_params(query)
499+
out = {}
500+
query.each { write_query_param_element!(out, _1, _2) }
501+
out
502+
end
503+
504+
# @api private
505+
#
506+
# @param collection [Hash{Symbol=>Object}]
507+
# @param key [String]
508+
# @param element [Object]
509+
#
510+
# @return [nil]
511+
private def write_query_param_element!(collection, key, element)
512+
case element
513+
in Hash
514+
element.each do |name, value|
515+
write_query_param_element!(collection, "#{key}[#{name}]", value)
516+
end
517+
in Array
518+
collection[key] = element.map(&:to_s).join(",")
519+
else
520+
collection[key] = element.to_s
521+
end
522+
end
523+
493524
# @api private
494525
#
495526
# @param y [Enumerator::Yielder]

lib/imagekitio/resources/accounts/usage.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,11 @@ class Usage
2525
# @see Imagekitio::Models::Accounts::UsageGetParams
2626
def get(params)
2727
parsed, options = Imagekitio::Accounts::UsageGetParams.dump_request(params)
28+
query = Imagekitio::Internal::Util.encode_query_params(parsed)
2829
@client.request(
2930
method: :get,
3031
path: "v1/accounts/usage",
31-
query: parsed.transform_keys(end_date: "endDate", start_date: "startDate"),
32+
query: query.transform_keys(end_date: "endDate", start_date: "startDate"),
3233
model: Imagekitio::Models::Accounts::UsageGetResponse,
3334
options: options
3435
)

lib/imagekitio/resources/assets.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,11 @@ class Assets
3434
# @see Imagekitio::Models::AssetListParams
3535
def list(params = {})
3636
parsed, options = Imagekitio::AssetListParams.dump_request(params)
37+
query = Imagekitio::Internal::Util.encode_query_params(parsed)
3738
@client.request(
3839
method: :get,
3940
path: "v1/files",
40-
query: parsed.transform_keys(file_type: "fileType", search_query: "searchQuery"),
41+
query: query.transform_keys(file_type: "fileType", search_query: "searchQuery"),
4142
model: Imagekitio::Internal::Type::ArrayOf[union: Imagekitio::Models::AssetListResponseItem],
4243
options: options
4344
)

lib/imagekitio/resources/custom_metadata_fields.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,11 @@ def update(id, params = {})
8989
# @see Imagekitio::Models::CustomMetadataFieldListParams
9090
def list(params = {})
9191
parsed, options = Imagekitio::CustomMetadataFieldListParams.dump_request(params)
92+
query = Imagekitio::Internal::Util.encode_query_params(parsed)
9293
@client.request(
9394
method: :get,
9495
path: "v1/customMetadataFields",
95-
query: parsed.transform_keys(folder_path: "folderPath", include_deleted: "includeDeleted"),
96+
query: query.transform_keys(folder_path: "folderPath", include_deleted: "includeDeleted"),
9697
model: Imagekitio::Internal::Type::ArrayOf[Imagekitio::CustomMetadataField],
9798
options: options
9899
)

lib/imagekitio/resources/files/metadata.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,11 @@ def get(file_id, params = {})
4848
# @see Imagekitio::Models::Files::MetadataGetFromURLParams
4949
def get_from_url(params)
5050
parsed, options = Imagekitio::Files::MetadataGetFromURLParams.dump_request(params)
51+
query = Imagekitio::Internal::Util.encode_query_params(parsed)
5152
@client.request(
5253
method: :get,
5354
path: "v1/metadata",
54-
query: parsed,
55+
query: query,
5556
model: Imagekitio::Metadata,
5657
options: options
5758
)

rbi/imagekitio/internal/util.rbi

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,26 @@ module Imagekitio
301301
T.let(%r{^application/(:?x-(?:n|l)djson)|(:?(?:x-)?jsonl)}, Regexp)
302302

303303
class << self
304+
# @api private
305+
sig do
306+
params(query: Imagekitio::Internal::AnyHash).returns(
307+
Imagekitio::Internal::AnyHash
308+
)
309+
end
310+
def encode_query_params(query)
311+
end
312+
313+
# @api private
314+
sig do
315+
params(
316+
collection: Imagekitio::Internal::AnyHash,
317+
key: String,
318+
element: T.anything
319+
).void
320+
end
321+
private def write_query_param_element!(collection, key, element)
322+
end
323+
304324
# @api private
305325
sig do
306326
params(

sig/imagekitio/internal/util.rbs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,16 @@ module Imagekitio
106106
JSON_CONTENT: Regexp
107107
JSONL_CONTENT: Regexp
108108

109+
def encode_query_params: (
110+
::Hash[Symbol, top] query
111+
) -> ::Hash[Symbol, top]
112+
113+
private def write_query_param_element!: (
114+
::Hash[Symbol, top] collection,
115+
String key,
116+
top element
117+
) -> nil
118+
109119
def self?.write_multipart_content: (
110120
Enumerator::Yielder y,
111121
val: top,

0 commit comments

Comments
 (0)