lib/rapidash/http_client.rb in rapidash-0.1.2 vs lib/rapidash/http_client.rb in rapidash-0.2.0

- old
+ new

@@ -1,58 +1,43 @@ require 'faraday' module Rapidash module HTTPClient - - def self.included(base) - base.extend(ClassMethods) - end - - attr_accessor :extension, :site + attr_accessor :login, :password attr_writer :connection - def initialize + def initialize(options = {}) + [:login, :password].each do |key| + self.send("#{key.to_s}=".to_sym, options[key]) + end end - def site=(site) - @site = site - @connection = nil - end - def connection - @connection ||= Faraday.new(site || self.class.site_url) + raise ConfigurationError.new "Site is required" unless site + @connection ||= Faraday.new(site) end def request(verb, url, options = {}) - if extension - url = "#{url}.#{(extension)}" - elsif self.class.respond_to?(:url_extension) && self.class.url_extension - url = "#{url}.#{(self.class.url_extension)}" + url = connection.build_url(normalize_url(url), options[:params]).to_s + response = connection.run_request verb, url, options[:body], options[:header] do |request| + request.headers.update(:Authorization => connection.basic_auth(login, password)) if login && password end - url = connection.build_url(url, options[:params]).to_s - response = connection.run_request(verb, url, options[:body], options[:headers]) + process_response(response, verb, options) + end + + def process_response(response, verb, options) # "foo"[0] does not work in 1.8.7, "foo"[0,1] is required - case response.status.to_s[0,1] + case response.status.to_s[0, 1] when "5", "4" error = ResponseError.new(response) raise error if self.class.respond_to?(:raise_error) && self.class.raise_error return nil #Handle redirects when "3" request(verb, response.headers["location"], options) when "2" return Response.new(response) - end - end - - - - module ClassMethods - attr_accessor :site_url - - def site(site) - @site_url = site end end end end