class RestClient::Payload::Base

def build_stream(params)

def build_stream(params)
  @stream = StringIO.new(params)
  @stream.seek(0)
end

def close

def close
  @stream.close unless @stream.closed?
end

def flatten_params(params, parent_key = nil)

{keys1 => {keys2 => value}} will be transformed into [keys1[key2], value]
Flatten parameters by converting hashes of hashes to flat hashes
def flatten_params(params, parent_key = nil)
  result = []
  params.each do |key, value|
    calculated_key = parent_key ? "#{parent_key}[#{handle_key(key)}]" : handle_key(key)
    if value.is_a? Hash
      result += flatten_params(value, calculated_key)
    elsif value.is_a? Array
      result += flatten_params_array(value, calculated_key)
    else
      result << [calculated_key, value]
    end
  end
  result
end

def flatten_params_array value, calculated_key

def flatten_params_array value, calculated_key
  result = []
  value.each do |elem|
    if elem.is_a? Hash
      result += flatten_params(elem, calculated_key)
    elsif elem.is_a? Array
      result += flatten_params_array(elem, calculated_key)
    else
      result << ["#{calculated_key}[]", elem]
    end
  end
  result
end

def headers

def headers
  {'Content-Length' => size.to_s}
end

def initialize(params)

def initialize(params)
  build_stream(params)
end

def inspect

def inspect
  result = to_s.inspect
  @stream.seek(0)
  result
end

def read(*args)

def read(*args)
  @stream.read(*args)
end

def short_inspect

def short_inspect
  (size > 500 ? "#{size} byte(s) length" : inspect)
end

def size

def size
  @stream.size
end