Class: N1Finder

Inherits:
Object
  • Object
show all
Defined in:
lib/n_1_finder.rb,
lib/n_1_finder/version.rb

Overview

Main class

Defined Under Namespace

Modules: Adapters Classes: Invalid, InvalidLogger, InvalidORM, Logger, Middleware, N1Query, Query, Storage

Constant Summary collapse

ORM_ADAPTERS =

Supported ORM adapters

{
  active_record: N1Finder::Adapters::ActiveRecordAdapter,
  sequel: N1Finder::Adapters::SequelAdapter
}.freeze
VERSION =

Gem version

'0.0.4'.freeze

Class Method Summary collapse

Class Method Details

.find { ... } ⇒ void

This method returns an undefined value.

Searches for N+1 queries and logs results

Yields:

  • block



39
40
41
42
43
44
45
46
# File 'lib/n_1_finder.rb', line 39

def find
  storage = N1Finder::Storage.new
  result = catch_queries(storage) { yield }
  n1_queries = N1Finder::N1Query.generate_by(storage.queries)
  N1Finder::Logger.new.log(n1_queries)

  result
end

.loggerLogger

Logger to log N+1 queries

Defaults to ‘Logger.new(STDOUT)`

Returns:



53
54
55
# File 'lib/n_1_finder.rb', line 53

def logger
  @logger ||= ::Logger.new(STDOUT)
end

.logger=(custom_logger) ⇒ Logger

Configure logger

Parameters:

  • custom_logger (Logger)

    Must be instance of ‘Logger`

Returns:

Raises:



65
66
67
68
69
# File 'lib/n_1_finder.rb', line 65

def logger=(custom_logger)
  raise N1Finder::InvalidLogger unless custom_logger.is_a?(::Logger)

  @logger = custom_logger
end

.ormSymbol?

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

Returns:

  • (Symbol, nil)


77
78
79
80
81
82
83
84
# File 'lib/n_1_finder.rb', line 77

def orm
  @orm ||=
    if defined?(ActiveRecord)
      :active_record
    elsif defined?(Sequel)
      :sequel
    end
end

.orm=(custom_orm) ⇒ Symbol

Configure ORM

Parameters:

  • custom_orm (Symbol)

    Must be ‘:active_record` or `:sequel`

Returns:

  • (Symbol)

Raises:



94
95
96
97
98
# File 'lib/n_1_finder.rb', line 94

def orm=(custom_orm)
  raise N1Finder::InvalidORM unless ORM_ADAPTERS.keys.include?(custom_orm)

  @orm = custom_orm
end