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)