module Faraday::Utils

Utils contains various static helper methods.

Constants

DEFAULT_SEP
ESCAPE_RE

Attributes

default_params_encoder[W]
default_space_encoding[W]

Public Instance Methods

URI(url) click to toggle source

Normalize URI() behavior across Ruby versions

url - A String or URI.

Returns a parsed URI.

# File lib/faraday/utils.rb, line 71
def URI(url) # rubocop:disable Naming/MethodName
  if url.respond_to?(:host)
    url
  elsif url.respond_to?(:to_str)
    default_uri_parser.call(url)
  else
    raise ArgumentError, 'bad argument (expected URI object or URI string)'
  end
end
basic_header_from(login, pass) click to toggle source
# File lib/faraday/utils.rb, line 56
def basic_header_from(login, pass)
  value = Base64.encode64("#{login}:#{pass}")
  value.delete!("\n")
  "Basic #{value}"
end
build_nested_query(params) click to toggle source
# File lib/faraday/utils.rb, line 17
def build_nested_query(params)
  NestedParamsEncoder.encode(params)
end
build_query(params) click to toggle source
# File lib/faraday/utils.rb, line 13
def build_query(params)
  FlatParamsEncoder.encode(params)
end
deep_merge(source, hash) click to toggle source

Recursive hash merge

# File lib/faraday/utils.rb, line 114
def deep_merge(source, hash)
  deep_merge!(source.dup, hash)
end
deep_merge!(target, hash) click to toggle source

Recursive hash update

# File lib/faraday/utils.rb, line 102
def deep_merge!(target, hash)
  hash.each do |key, value|
    target[key] = if value.is_a?(Hash) && (target[key].is_a?(Hash) || target[key].is_a?(Options))
                    deep_merge(target[key], value)
                  else
                    value
                  end
  end
  target
end
default_params_encoder() click to toggle source
# File lib/faraday/utils.rb, line 52
def default_params_encoder
  @default_params_encoder ||= NestedParamsEncoder
end
default_space_encoding() click to toggle source
# File lib/faraday/utils.rb, line 21
def default_space_encoding
  @default_space_encoding ||= '+'
end
default_uri_parser() click to toggle source
# File lib/faraday/utils.rb, line 81
def default_uri_parser
  @default_uri_parser ||= Kernel.method(:URI)
end
default_uri_parser=(parser) click to toggle source
# File lib/faraday/utils.rb, line 85
def default_uri_parser=(parser)
  @default_uri_parser = if parser.respond_to?(:call) || parser.nil?
                          parser
                        else
                          parser.method(:parse)
                        end
end
escape(str) click to toggle source
# File lib/faraday/utils.rb, line 31
def escape(str)
  str.to_s.gsub(ESCAPE_RE) do |match|
    "%#{match.unpack('H2' * match.bytesize).join('%').upcase}"
  end.gsub(' ', default_space_encoding)
end
normalize_path(url) click to toggle source

Receives a String or URI and returns just the path with the query string sorted.

# File lib/faraday/utils.rb, line 95
def normalize_path(url)
  url = URI(url)
  (url.path.start_with?('/') ? url.path : "/#{url.path}") +
    (url.query ? "?#{sort_query_params(url.query)}" : '')
end
parse_nested_query(query) click to toggle source
# File lib/faraday/utils.rb, line 48
def parse_nested_query(query)
  NestedParamsEncoder.decode(query)
end
parse_query(query) click to toggle source

Adapted from Rack

# File lib/faraday/utils.rb, line 44
def parse_query(query)
  FlatParamsEncoder.decode(query)
end
sort_query_params(query) click to toggle source
# File lib/faraday/utils.rb, line 118
def sort_query_params(query)
  query.split('&').sort.join('&')
end
unescape(str) click to toggle source
# File lib/faraday/utils.rb, line 37
def unescape(str)
  CGI.unescape str.to_s
end