Method: Faraday::FlatParamsEncoder.encode

Defined in:
lib/faraday/encoders/flat_params_encoder.rb

.encode(params) ⇒ String

Encode converts the given param into a URI querystring. Keys and values will converted to strings and appropriately escaped for the URI.

Examples:


encode({a: %w[one two three], b: true, c: "C"})
# => 'a=one&a=two&a=three&b=true&c=C'

Parameters:

  • params (Hash)

    query arguments to convert.

Returns:

  • (String)

    the URI querystring (without the leading '?')



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/faraday/encoders/flat_params_encoder.rb', line 23

def self.encode(params)
  return nil if params.nil?

  unless params.is_a?(Array)
    unless params.respond_to?(:to_hash)
      raise TypeError,
            "Can't convert #{params.class} into Hash."
    end
    params = params.to_hash
    params = params.map do |key, value|
      key = key.to_s if key.is_a?(Symbol)
      [key, value]
    end

    # Only to be used for non-Array inputs. Arrays should preserve order.
    params.sort! if @sort_params
  end

  # The params have form [['key1', 'value1'], ['key2', 'value2']].
  buffer = +''
  params.each do |key, value|
    encoded_key = escape(key)
    if value.nil?
      buffer << "#{encoded_key}&"
    elsif value.is_a?(Array)
      if value.empty?
        buffer << "#{encoded_key}=&"
      else
        value.each do |sub_value|
          encoded_value = escape(sub_value)
          buffer << "#{encoded_key}=#{encoded_value}&"
        end
      end
    else
      encoded_value = escape(value)
      buffer << "#{encoded_key}=#{encoded_value}&"
    end
  end
  buffer.chop
end