lib/zephyr.rb in zephyr-1.1.2 vs lib/zephyr.rb in zephyr-1.1.3

- old
+ new

@@ -55,17 +55,27 @@ 'User-Agent' => 'zephyr', } end class << self + @debug_mode = false + def logger @@logger end def logger=(logger) @@logger = logger end + + def debug_mode + @debug_mode + end + + def debug_mode=(mode) + @debug_mode = mode + end end @@logger = Logger.new(STDOUT) @@logger.level = Logger::Severity::WARN @@ -192,11 +202,10 @@ # http.uri(['hi', 'bob', {:foo => 'bar'}]) => http://host/hi/bob?foo=bar # def uri(given_parts = []) @root_uri.dup.tap do |uri| parts = given_parts.dup.unshift(uri.path) # URI#merge is broken. - uri.query = build_query_string(parts.pop) if parts.last.is_a? Hash uri.path = ('/%s' % parts.join('/')).gsub(/\/+/, '/') end end # Comes handy in IRB @@ -207,25 +216,10 @@ def cleanup! Typheous::Hydra.hydra.cleanup end - # Assembles a query string from a Hash, escaping values and keys. If a - # value is an Array, the query parameter simply appears twice. - # - # Stolen from Rack (with minor changes for sorting). - # - def build_query_string(params) - params.map do |k, v| - if v.kind_of? Array - build_query_string(v.map { |x| [k, x] }) - else - "#{percent_encode(k)}=#{percent_encode(v)}" - end - end.sort.join '&' - end - def percent_encode(value) typhoeus_easy.send(:easy_escape, value.to_s, value.to_s.bytesize) end private @@ -264,20 +258,21 @@ def perform(method, path_components, headers, expect, timeout, data=nil) params = {} params[:headers] = headers params[:timeout] = timeout params[:follow_location] = false - - # seriously, why is this on by default + params[:params] = path_components.pop if path_components.last.is_a?(Hash) + + # seriously, why is this on by default Typhoeus::Hydra.hydra.disable_memoization # if you want debugging - # params[:verbose] = true + params[:verbose] = Zephyr.debug_mode # have a vague feeling this isn't going to work as expected if method == :post || method == :put data = data.read if data.respond_to?(:read) - params[:body] = data + params[:body] = data if data != '' end # request has class methods for :delete, :get, :head, :put, and :post http_start = Time.now.to_f response = Typhoeus::Request.send(method, uri(path_components).to_s, params)