lib/extensions/http.rb in radiospiel-app-0.1.0 vs lib/extensions/http.rb in radiospiel-app-0.1.1

- old
+ new

@@ -9,14 +9,30 @@ extend self # the default expiration time for get requests. attr :max_age - def get(url, max_age = HTTP.max_age) - LOGGER.benchmark("[GET] #{url}", :minimum => 20) do - Cache.cached(url, max_age) do - uri = URI(url) - Net::HTTP.get(uri) - end + def get(url, max_age = self.max_age) + App.logger.benchmark("[GET] #{url}", :minimum => 20) do + App.cached(url, max_age) do get_(url) end + end + end + + private + + def get_(uri_str, limit = 10) + raise 'too many redirections' if limit == 0 + + response = Net::HTTP.get_response(URI(uri_str)) + + case response + when Net::HTTPSuccess then + response.body + when Net::HTTPRedirection then + location = response['location'] + App.logger.debug "redirected to #{location}" + get_(location, limit - 1) + else + response.value end end end