Object
# File lib/heroku/nav.rb, line 62 def api_url ENV['API_URL'] || ENV['HEROKU_NAV_URL'] || "https://nav.heroku.com" end
# File lib/heroku/nav.rb, line 36 def fetch(format = 'application/json') uri = URI.parse(resource_url) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true if uri.scheme == 'https' request = Net::HTTP::Get.new(uri.request_uri) request['Accept'] = format timeout = (ENV['HEROKU_NAV_TIMEOUT'] || 10).to_i response = Timeout.timeout(timeout) do retry_upto(timeout, :interval => 0.5) do http.request(request) end end format == 'application/json' ? OkJson.decode(response.body) : response.body rescue Timeout::Error, StandardError => e $stderr.puts "Failed to fetch the Heroku #{resource}: #{e.class.name} - #{e.message}" {} end
for non-rack use
# File lib/heroku/nav.rb, line 67 def html @@body ||= fetch['html'] end
# File lib/heroku/nav.rb, line 8 def initialize(app, options={}) @app = app @options = options @options[:except] = [@options[:except]] unless @options[:except].is_a?(Array) @options[:status] ||= [200] refresh end
# File lib/heroku/nav.rb, line 54 def resource name.split('::').last.downcase end
# File lib/heroku/nav.rb, line 58 def resource_url [api_url, '/', resource].join end
# File lib/heroku/nav.rb, line 71 def retry_upto(max_retries = 1, opts = {}) yield rescue Timeout::Error, StandardError attempt = attempt ? attempt+1 : 1 raise if (attempt == max_retries) if interval = opts[:interval] secs = interval.respond_to?(:call) ? interval.call(attempt) : interval sleep(secs) end retry end
# File lib/heroku/nav.rb, line 16 def call(env) @status, @headers, @body = @app.call(env) @body.extend(Enumerable) @body = @body.to_a.join insert! if can_insert?(env) [@status, @headers, [@body]] end
# File lib/heroku/nav.rb, line 24 def can_insert?(env) return unless @options[:status].include?(@status) return unless @headers['Content-Type'] =~ /text\/html/ || @headers['content-type'] =~ /text\/html/ return if @options[:except].any? { |route| env['PATH_INFO'] =~ route } true end
Generated with the Darkfish Rdoc Generator 2.