# File lib/typhoeus/utils.rb, line 14
    def traverse_params_hash(hash, result = nil, current_key = nil)
      result ||= { :files => [], :params => [] }

      hash.keys.sort { |a, b| a.to_s <=> b.to_s }.collect do |key|
        new_key = (current_key ? "#{current_key}[#{key}]" : key).to_s
        case hash[key]
        when Hash
          traverse_params_hash(hash[key], result, new_key)
        when Array
          hash[key].each do |v|
            result[:params] << [new_key, v.to_s]
          end
        when File, Tempfile
          filename = File.basename(hash[key].path)
          types = MIME::Types.type_for(filename)
          result[:files] << [
            new_key,
            filename,
            types.empty? ? 'application/octet-stream' : types[0].to_s,
            File.expand_path(hash[key].path)
          ]
        else
          result[:params] << [new_key, hash[key].to_s]
        end
      end
      result
    end