module Peek::ActiveRecord::ControllerHelpers

Protected Instance Methods

inject_peek_activerecord(&block) click to toggle source
# File lib/peek/activerecord/controller_helpers.rb, line 38
def inject_peek_activerecord(&block)
  return block.call unless peek_activerecord_enabled?
  ret = nil
  queries = []
  subscriber = ActiveSupport::Notifications.subscribe "sql.active_record" do |*args|
    event = ActiveSupport::Notifications::Event.new *args
    queries << event
  end
  ret = block.call
  peek_activerecord_append_queries_to_response(queries)
  ret
ensure
  ActiveSupport::Notifications.unsubscribe(subscriber) if subscriber
end
peek_activerecord_append_queries_to_response(queries) click to toggle source
# File lib/peek/activerecord/controller_helpers.rb, line 53
      def peek_activerecord_append_queries_to_response(queries)
        if response.content_type =~ %r|text/html|
          output = <<-EOS
            <div class=ar_instrumentation id=peek_activerecord_table>
            <ul>
              <li>
                <ul class=row>
                  <li class=duration-header>
                    Duration
                  </li>
                  <li class=cached-header>
                    Cached
                  </li>
                  <li class=sql-header>
                    SQL
                  </li>
                </ul>
              </li>
          EOS
          queries.each do |query|
            output << <<-EOS
              <li>
                <ul class=row>
                  <li class=duration-data>
                    #{"%.3f" % query.duration}ms
                  </li>
                  <li class=cache-data>
                    #{query.payload[:name] == "CACHE"}
                  </li>
                  <li class=sql-data>
                    #{pygmentized_sql(query.payload[:sql])}
                  </li>
                </ul>
              </li>
            EOS
          end
          output << "</table>"
          response.body += "<div id='peek-activerecord-modal'>#{output}</div>".html_safe
        end
      end
peek_activerecord_enabled?() click to toggle source

This can be overwritten in ApplicationController to disable query tracking separately from peek

# File lib/peek/activerecord/controller_helpers.rb, line 34
def peek_activerecord_enabled?
  peek_enabled?
end
pygmentized_sql(sql) click to toggle source
# File lib/peek/activerecord/controller_helpers.rb, line 24
def pygmentized_sql(sql)
  if pygments_enabled?
    Pygments.highlight(sql, :lexer => 'sql')
  else
    "#{Rack::Utils.escape_html(code)}"
  end
end
pygments_enabled?() click to toggle source
# File lib/peek/activerecord/controller_helpers.rb, line 20
def pygments_enabled?
  defined?(Pygments)
end