lib/typhoeus/utils.rb in typhoeus-0.2.2 vs lib/typhoeus/utils.rb in typhoeus-0.2.3

- old
+ new

@@ -6,9 +6,47 @@ '%'+$1.unpack('H2'*bytesize($1)).join('%').upcase }.tr(' ', '+') end module_function :escape + # Params are NOT escaped. + 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 + array_key = "#{new_key}[]" + hash[key].each do |v| + result[:params] << [array_key, v.to_s] + end + when File + 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 + module_function :traverse_params_hash + + def traversal_to_param_string(traversal, escape = true) + traversal[:params].collect { |param| + "#{Typhoeus::Utils.escape(param[0])}=#{Typhoeus::Utils.escape(param[1])}" + }.join('&') + end + module_function :traversal_to_param_string + # Return the bytesize of String; uses String#size under Ruby 1.8 and # String#bytesize under 1.9. if ''.respond_to?(:bytesize) def bytesize(string) string.bytesize