Method: Faraday::FlatParamsEncoder.decode

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

.decode(query) ⇒ Hash

Decode converts the given URI querystring into a hash.

Examples:


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

Parameters:

  • query (String)

    query arguments to parse.

Returns:

  • (Hash)

    parsed keys and value strings from the querystring.



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/faraday/encoders/flat_params_encoder.rb', line 74

def self.decode(query)
  return nil if query.nil?

  empty_accumulator = {}

  split_query = query.split('&').filter_map do |pair|
    pair.split('=', 2) if pair && !pair.empty?
  end
  split_query.each_with_object(empty_accumulator.dup) do |pair, accu|
    pair[0] = unescape(pair[0])
    pair[1] = true if pair[1].nil?
    if pair[1].respond_to?(:to_str)
      pair[1] = unescape(pair[1].to_str.tr('+', ' '))
    end
    if accu[pair[0]].is_a?(Array)
      accu[pair[0]] << pair[1]
    elsif accu[pair[0]]
      accu[pair[0]] = [accu[pair[0]], pair[1]]
    else
      accu[pair[0]] = pair[1]
    end
  end
end