class Google::Cloud::Storage::File::SignerV4
def canonical_query query, algorithm, credential, goog_date, expires, signed_headers_str
def canonical_query query, algorithm, credential, goog_date, expires, signed_headers_str query ||= {} query["X-Goog-Algorithm"] = algorithm query["X-Goog-Credential"] = credential query["X-Goog-Date"] = goog_date query["X-Goog-Expires"] = expires query["X-Goog-SignedHeaders"] = signed_headers_str query = query.map { |k, v| [escape_query_param(k), escape_query_param(v)] }.sort_by(&:first).to_h query.map { |k, v| "#{k}=#{v}" }.join "&" end