Module: Faraday::Utils

Extended by:
Utils, Rack::Utils
Includes:
Rack::Utils
Included in:
Connection, Utils
Defined in:
lib/faraday/utils.rb

Defined Under Namespace

Classes: Headers

Instance Method Summary collapse

Instance Method Details

#build_nested_query(value, prefix = nil) ⇒ Object

Override Rack’s version since it doesn’t handle non-String values



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/faraday/utils.rb', line 51

def build_nested_query(value, prefix = nil)
  case value
  when Array
    value.map { |v| build_nested_query(v, "#{prefix}[]") }.join("&")
  when Hash
    value.map { |k, v|
      build_nested_query(v, prefix ? "#{prefix}[#{escape(k)}]" : escape(k))
    }.join("&")
  when NilClass
    prefix
  else
    raise ArgumentError, "value must be a Hash" if prefix.nil?
    "#{prefix}=#{escape(value)}"
  end
end

#escape(s) ⇒ Object

Be sure to URI escape ‘+’ symbols to %2B. Otherwise, they get interpreted as spaces.



69
70
71
72
73
# File 'lib/faraday/utils.rb', line 69

def escape(s)
  s.to_s.gsub(/([^a-zA-Z0-9_.-]+)/n) do
    '%' << $1.unpack('H2'*bytesize($1)).join('%').tap { |c| c.upcase! }
  end
end

#merge_headers(existing_headers, new_headers) ⇒ Object

Turns headers keys and values into strings



83
84
85
86
87
# File 'lib/faraday/utils.rb', line 83

def merge_headers(existing_headers, new_headers)
  new_headers.each do |key, value|
    existing_headers[key] = value.to_s
  end
end

#merge_params(existing_params, new_params) ⇒ Object

Turns param keys into strings



76
77
78
79
80
# File 'lib/faraday/utils.rb', line 76

def merge_params(existing_params, new_params)
  new_params.each do |key, value|
    existing_params[key.to_s] = value
  end
end

#normalize_path(url) ⇒ Object

Receives a URL and returns just the path with the query string sorted.



90
91
92
93
# File 'lib/faraday/utils.rb', line 90

def normalize_path(url)
  (url.path != "" ? url.path : "/") +
  (url.query ? "?#{sort_query_params(url.query)}" : "")
end