lib/httpi.rb in httpi-0.7.4 vs lib/httpi.rb in httpi-0.7.5

- old
+ new

@@ -1,5 +1,6 @@ +require "logger" require "httpi/version" require "httpi/request" require "httpi/adapter" # = HTTPI @@ -70,57 +71,59 @@ # end module HTTPI REQUEST_METHODS = [:get, :post, :head, :put, :delete] + DEFAULT_LOG_LEVEL = :debug + class << self # Executes an HTTP GET request. def get(request, adapter = nil) request = Request.new :url => request if request.kind_of? String - with request, adapter do |adapter| + with_adapter :get, request, adapter do |adapter| yield adapter.client if block_given? adapter.get request end end # Executes an HTTP POST request. def post(*args) request, adapter = request_and_adapter_from(args) - with request, adapter do |adapter| + with_adapter :post, request, adapter do |adapter| yield adapter.client if block_given? adapter.post request end end # Executes an HTTP HEAD request. def head(request, adapter = nil) request = Request.new :url => request if request.kind_of? String - with request, adapter do |adapter| + with_adapter :head, request, adapter do |adapter| yield adapter.client if block_given? adapter.head request end end # Executes an HTTP PUT request. def put(*args) request, adapter = request_and_adapter_from(args) - with request, adapter do |adapter| + with_adapter :put, request, adapter do |adapter| yield adapter.client if block_given? adapter.put request end end # Executes an HTTP DELETE request. def delete(request, adapter = nil) request = Request.new :url => request if request.kind_of? String - with request, adapter do |adapter| + with_adapter :delete, request, adapter do |adapter| yield adapter.client if block_given? adapter.delete request end end @@ -128,24 +131,63 @@ def request(method, request, adapter = nil) raise ArgumentError, "Invalid request method: #{method}" unless REQUEST_METHODS.include? method send method, request, adapter end + # Sets whether to log HTTP requests. + attr_writer :log + + # Returns whether to log HTTP requests. Defaults to +true+. + def log? + @log != false + end + + # Sets the logger to use. + attr_writer :logger + + # Returns the logger. Defaults to an instance of +Logger+ writing to STDOUT. + def logger + @logger ||= ::Logger.new STDOUT + end + + # Sets the log level. + attr_writer :log_level + + # Returns the log level. Defaults to :debug. + def log_level + @log_level ||= :debug + end + + # Logs given +messages+. + def log(*messages) + logger.send log_level, messages.join(" ") if log? + end + + # Reset the default config. + def reset_config! + @log = nil + @logger = nil + @log_level = nil + end + private # Checks whether +args+ contains of an <tt>HTTPI::Request</tt> or a URL # and a request body plus an optional adapter and returns an Array with # an <tt>HTTPI::Request</tt> and (if given) an adapter. def request_and_adapter_from(args) return args if args[0].kind_of? Request [Request.new(:url => args[0], :body => args[1]), args[2]] end - # Expects a +request+ and an +adapter+ (defaults to <tt>Adapter.use</tt>) - # and yields a new instance of the adapter to a given block. - def with(request, adapter) + # Expects a request +method+, a +request+ and an +adapter+ (defaults to + # <tt>Adapter.use</tt>) and yields an instance of the adapter to a given block. + def with_adapter(method, request, adapter) adapter ||= Adapter.use - yield Adapter.find(adapter).new(request) + adapter, adapter_class = Adapter.find adapter + + HTTPI.log "HTTPI executes HTTP #{method.to_s.upcase} using the #{adapter} adapter" + yield adapter_class.new(request) end end end