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