class N1Finder
Main class
Constants
- ORM_ADAPTERS
Supported ORM adapters
- VERSION
Gem version
Public Class Methods
find() { || ... }
click to toggle source
Searches for N+1 queries and logs results
@yield block
@return [void] result of block call
# File lib/n_1_finder.rb, line 14 def find storage = Storage.new result = catch_queries(storage) { yield } n1_queries = N1Query.generate_by(storage.queries) Logger.new.log(n1_queries) result end
logger()
click to toggle source
Logger
to log N+1 queries
Defaults to `Logger.new(STDOUT)`
@return [Logger]
# File lib/n_1_finder.rb, line 28 def logger @logger ||= ::Logger.new(STDOUT) end
logger=(custom_logger)
click to toggle source
Configure logger
@param [Logger] custom_logger
Must be instance of `Logger`
@raise [N1Finder::Errors::InvalidLogger] If custom_logger is not an instance of `Logger`.
@return [Logger]
# File lib/n_1_finder.rb, line 40 def logger=(custom_logger) raise Errors::InvalidLogger unless custom_logger.is_a?(::Logger) @logger = custom_logger end
orm()
click to toggle source
ORM used in project
Default to :active_record if ActiveRecord defined Default to :sequel if Sequel defined Default to nil if ActiveRecord and Sequel are not defined
@return [Symbol, nil]
# File lib/n_1_finder.rb, line 52 def orm @orm ||= if defined?(ActiveRecord) :active_record elsif defined?(Sequel) :sequel end end
orm=(custom_orm)
click to toggle source
Configure ORM
@param [Symbol] custom_orm
Must be `:active_record` or `:sequel`
@raise [N1Finder::Errors::InvalidORM] If custom_orm is not in allowed list.
@return [Symbol]
# File lib/n_1_finder.rb, line 68 def orm=(custom_orm) raise Errors::InvalidORM unless ORM_ADAPTERS.include?(custom_orm) @orm = custom_orm end
Private Class Methods
catch_queries(storage)
click to toggle source
# File lib/n_1_finder.rb, line 76 def catch_queries(storage) adapter = Adapters::Factory.get(orm, storage) mutex.synchronize { adapter.exec(&Proc.new) } end
mutex()
click to toggle source
# File lib/n_1_finder.rb, line 81 def mutex @mutex ||= Mutex.new end