Skip to content

Commit

Permalink
be truly enabled or disabled
Browse files Browse the repository at this point in the history
- only QueryReviewer code needed to parse configuration is loaded unless
  we are enabled
- do not modify any standard modules unless we are enabled, even if the
  modifications are in theory benign
- added QueryReviewer.enabled? shortcut method
- put QueryReviewer::QueryWarning in its own file

Signed-off-by: weplay <tech@weplay.com>
  • Loading branch information
greatseth authored and lukemelia committed Dec 17, 2008
1 parent e091e16 commit 4967928
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 51 deletions.
14 changes: 10 additions & 4 deletions init.rb
@@ -1,7 +1,13 @@
# Include hook code here

require 'query_reviewer'
ActiveRecord::ConnectionAdapters::MysqlAdapter.send(:include, QueryReviewer::MysqlAdapterExtensions)
ActionController::Base.send(:include, QueryReviewer::ControllerExtensions)
Array.send(:include, QueryReviewer::ArrayExtensions)
ActionController::Base.append_view_path(File.dirname(__FILE__) + "/lib/query_reviewer/views") if ActionController::Base.respond_to?(:append_view_path)

if QueryReviewer.enabled?
ActiveRecord::ConnectionAdapters::MysqlAdapter.send(:include, QueryReviewer::MysqlAdapterExtensions)
ActionController::Base.send(:include, QueryReviewer::ControllerExtensions)
Array.send(:include, QueryReviewer::ArrayExtensions)

if ActionController::Base.respond_to?(:append_view_path)
ActionController::Base.append_view_path(File.dirname(__FILE__) + "/lib/query_reviewer/views")
end
end
36 changes: 14 additions & 22 deletions lib/query_reviewer.rb
Expand Up @@ -15,7 +15,7 @@ def self.load_configuration
CONFIGURATION.merge!(YAML.load(File.read(app_config_file))[RAILS_ENV || "test"] || {})
end

if CONFIGURATION["enabled"]
if enabled?
begin
CONFIGURATION["uv"] ||= !Gem.searcher.find("uv").nil?
if CONFIGURATION["uv"]
Expand All @@ -27,28 +27,20 @@ def self.load_configuration
end
end

class QueryWarning
attr_reader :query, :severity, :problem, :desc, :table, :id

cattr_accessor :next_id
self.next_id = 1

def initialize(options)
@query = options[:query]
@severity = options[:severity]
@problem = options[:problem]
@desc = options[:desc]
@table = options[:table]
@id = (self.class.next_id += 1)
end
def self.enabled?
CONFIGURATION["enabled"]
end
end

QueryReviewer.load_configuration
require "query_reviewer/array_extensions"
require "query_reviewer/sql_query"
require "query_reviewer/mysql_analyzer"
require "query_reviewer/sql_sub_query"
require "query_reviewer/mysql_adapter_extensions"
require "query_reviewer/controller_extensions"
require "query_reviewer/sql_query_collection"

if QueryReviewer.enabled?
require "query_reviewer/query_warning"
require "query_reviewer/array_extensions"
require "query_reviewer/sql_query"
require "query_reviewer/mysql_analyzer"
require "query_reviewer/sql_sub_query"
require "query_reviewer/mysql_adapter_extensions"
require "query_reviewer/controller_extensions"
require "query_reviewer/sql_query_collection"
end
33 changes: 12 additions & 21 deletions lib/query_reviewer/controller_extensions.rb
Expand Up @@ -7,27 +7,21 @@ class QueryViewBase < ActionView::Base
end

def self.included(base)
if QueryReviewer::CONFIGURATION["enabled"]
base.alias_method_chain :perform_action, :query_review if QueryReviewer::CONFIGURATION["inject_view"]
base.alias_method_chain :process, :query_review
end
base.alias_method_chain :perform_action, :query_review if QueryReviewer::CONFIGURATION["inject_view"]
base.alias_method_chain :process, :query_review
base.helper_method :query_review_output
end

def query_review_output(ajax = false, total_time = nil)
if QueryReviewer::CONFIGURATION["enabled"]
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
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

Expand All @@ -53,11 +47,8 @@ def perform_action_with_query_review
Thread.current["query_reviewer_enabled"] = cookies["query_review_enabled"]
t1 = Time.now
r = perform_action_without_query_review
if QueryReviewer::CONFIGURATION["enabled"]
(response.content_type.blank? || response.content_type.include?("text/html") || response.content_type.include?("text/javascript"))
t2 = Time.now
add_query_output_to_view(t2 - t1)
end
t2 = Time.now
add_query_output_to_view(t2 - t1)
r
end

Expand Down
8 changes: 4 additions & 4 deletions lib/query_reviewer/mysql_adapter_extensions.rb
@@ -1,10 +1,10 @@
module QueryReviewer
module MysqlAdapterExtensions
def self.included(base)
base.alias_method_chain :select, :review if QueryReviewer::CONFIGURATION["enabled"]
base.alias_method_chain :update, :review if QueryReviewer::CONFIGURATION["enabled"]
base.alias_method_chain :insert, :review if QueryReviewer::CONFIGURATION["enabled"]
base.alias_method_chain :delete, :review if QueryReviewer::CONFIGURATION["enabled"]
base.alias_method_chain :select, :review
base.alias_method_chain :update, :review
base.alias_method_chain :insert, :review
base.alias_method_chain :delete, :review
end

def update_with_review(sql, *args)
Expand Down
17 changes: 17 additions & 0 deletions lib/query_reviewer/query_warning.rb
@@ -0,0 +1,17 @@
module QueryReviewer
class QueryWarning
attr_reader :query, :severity, :problem, :desc, :table, :id

cattr_accessor :next_id
self.next_id = 1

def initialize(options)
@query = options[:query]
@severity = options[:severity]
@problem = options[:problem]
@desc = options[:desc]
@table = options[:table]
@id = (self.class.next_id += 1)
end
end
end

0 comments on commit 4967928

Please sign in to comment.