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
end

def escape(v)

def escape(v)
  URI.escape(v.to_s, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
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.keys.map do |key|
    calculated_key = parent_key ? "#{parent_key}[#{escape key}]" : escape(key)
    value = params[key]
    if value.is_a? Hash
      result.merge!(flatten_params(value, calculated_key))
    else
      result[calculated_key] = value
    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(bytes=nil)

def read(bytes=nil)
  @stream.read(bytes)
end

def short_inspect

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

def size

def size
  @stream.size
end