Module: Faraday::FlatParamsEncoder

Extended by:
Forwardable
Defined in:
lib/faraday/parameters.rb

Class Method Summary collapse

Class Method Details

.decode(query) ⇒ Object



174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
# File 'lib/faraday/parameters.rb', line 174

def self.decode(query)
  empty_accumulator = {}
  return nil if query == nil
  split_query = (query.split('&').map do |pair|
    pair.split('=', 2) if pair && !pair.empty?
  end).compact
  return split_query.inject(empty_accumulator.dup) do |accu, pair|
    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.gsub(/\+/, " "))
    end
    if accu[pair[0]].kind_of?(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
    accu
  end
end

.encode(params) ⇒ Object



136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# File 'lib/faraday/parameters.rb', line 136

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

  if !params.is_a?(Array)
    if !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.kind_of?(Symbol)
      [key, value]
    end
    # Useful default for OAuth and caching.
    # Only to be used for non-Array inputs. Arrays should preserve order.
    params.sort!
  end

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