forked from weplay/query_reviewer
/
controller_extensions.rb
69 lines (61 loc) · 2.69 KB
/
controller_extensions.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
require "action_view"
require File.join(File.dirname(__FILE__), "views", "query_review_box_helper")
module QueryReviewer
module ControllerExtensions
class QueryViewBase < ActionView::Base
include QueryReviewer::Views::QueryReviewBoxHelper
end
def self.included(base)
if QueryReviewer::CONFIGURATION["inject_view"]
alias_name = defined?(Rails::Railtie) ? :process_action : :perform_action
base.alias_method_chain(alias_name, :query_review)
end
base.alias_method_chain :process, :query_review
base.helper_method :query_review_output
end
def query_review_output(ajax = false, total_time = nil)
faux_view = QueryViewBase.new([File.join(File.dirname(__FILE__), "views")], {}, self)
queries = Thread.current["queries"]
queries.analyze!
faux_view.instance_variable_set("@queries", queries)
faux_view.instance_variable_set("@total_time", total_time)
if ajax
js = faux_view.render(:partial => "/box_ajax.js")
else
html = faux_view.render(:partial => "/box")
end
end
def add_query_output_to_view(total_time)
return unless Thread.current["query_reviewer_enabled"]
if request.xhr?
if cookies["query_review_enabled"]
if !response.content_type || response.content_type.include?("text/html")
response.body += "<script type=\"text/javascript\">"+query_review_output(true, total_time)+"</script>"
elsif response.content_type && response.content_type.include?("text/javascript")
response.body += ";\n"+query_review_output(true, total_time)
end
end
else
if response.body.is_a?(String) && response.body.match(/<\/body>/i) && Thread.current["queries"]
idx = (response.body =~ /<\/body>/i)
html = query_review_output(false, total_time)
response.body = response.body.insert(idx, html)
end
end
end
def perform_action_with_query_review(*args)
Thread.current["query_reviewer_enabled"] = (CONFIGURATION["enabled"] == true and cookies["query_review_enabled"]) ||
(CONFIGURATION["enabled"] == "based_on_session" and session["query_review_enabled"])
t1 = Time.now
r = defined?(Rails::Railtie) ? process_action_without_query_review(*args) : perform_action_without_query_review(*args)
t2 = Time.now
add_query_output_to_view(t2 - t1)
r
end
alias_method :process_action_with_query_review, :perform_action_with_query_review
def process_with_query_review(*args) #:nodoc:
Thread.current["queries"] = SqlQueryCollection.new
process_without_query_review(*args)
end
end
end