class Rack::AvvoIgnite

Public Class Methods

new(app, options = {}) click to toggle source
# File lib/rack/avvo_ignite.rb, line 4
def initialize(app, options = {})
  @app = app
  @ignite_host = options[:host] || "ia.avvo.com"
  @tracker_code = options[:code]
end

Public Instance Methods

call(env) click to toggle source
# File lib/rack/avvo_ignite.rb, line 10
def call(env)
  status, headers, response = @app.call(env)

  if headers['Content-Type'].to_s.include?('text/html') # Only update HTML bodies
    response.each do |part|
      if part.rindex('</body>')
        part.gsub!('</body>', message + '</body>')
        headers['Content-Length'] = (headers['Content-Length'].to_i + message.length).to_s
      end
    end
  end

  [status, headers, response]
end

Private Instance Methods

message() click to toggle source
# File lib/rack/avvo_ignite.rb, line 27
def message
  %{<script type="text/javascript">(function(){setTimeout(function(){var s = document.createElement('script');s.type="text/javascript";s.async=true;s.src="//#{@ignite_host}/tracker/#{@tracker_code}.js";var x=document.getElementsByTagName('script')[0];x.parentNode.insertBefore(s,x);},1)})();</script>}
end