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