lib/motion-resource/requests.rb in motion-resource-0.0.2 vs lib/motion-resource/requests.rb in motion-resource-0.1.0

- old
+ new

@@ -5,11 +5,11 @@ HTTP_METHODS.each do |method| define_method method do |*args, &block| self.class.send(method, *args, &block) end end - + class << self def get(url, params = {}, &block) http_call(:get, url, params, &block) end @@ -23,40 +23,47 @@ def delete(url, params = {}, &block) http_call(:delete, url, params, &block) end + def on_auth_failure(&block) + @on_auth_failure = block + end + private def complete_url(fragment) if fragment[0..3] == "http" return fragment end (self.root_url || MotionResource::Base.root_url) + fragment end def http_call(method, url, call_options = {}, &block) - options = call_options + url = complete_url(url) + + options = call_options options.merge!(MotionResource::Base.default_url_options || {}) - url += self.extension if query = options.delete(:query) - if url.index("?").nil? - url += "?" - end - url += query.map{|k,v| "#{k}=#{v}"}.join('&') + url.build_query_string!(query) end if self.default_url_options options.merge!(self.default_url_options) end - logger.log "#{method.upcase} #{complete_url(url)}" - BubbleWrap::HTTP.send(method, complete_url(url), options) do |response| + logger.log "#{method.upcase} #{url}" + + url.insert_extension!(self.extension) + + BubbleWrap::HTTP.send(method, url, options) do |response| if response.ok? body = response.body.to_str.strip rescue nil logger.log "response: #{body}" if body.blank? block.call(response, {}) else block.call response, BubbleWrap::JSON.parse(body) end + elsif response.status_code.to_s =~ /401/ && @on_auth_failure + @on_auth_failure.call else block.call response, nil end end end