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, Errors Classes: Logger, Middleware, N1Query, Query, Storage

Constant Summary collapse

ORM_ADAPTERS =

Supported ORM adapters

[:active_record, :sequel].freeze
VERSION =

Gem version

'0.0.6'.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



14
15
16
17
18
19
20
21
# 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

.loggerLogger

Logger to log N+1 queries

Defaults to ‘Logger.new(STDOUT)`

Returns:



28
29
30
# File 'lib/n_1_finder.rb', line 28

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

.logger=(custom_logger) ⇒ Logger

Configure logger

Parameters:

  • custom_logger (Logger)

    Must be instance of ‘Logger`

Returns:

Raises:



40
41
42
43
44
# 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

.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)


52
53
54
55
56
57
58
# 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) ⇒ Symbol

Configure ORM

Parameters:

  • custom_orm (Symbol)

    Must be ‘:active_record` or `:sequel`

Returns:

  • (Symbol)

Raises:



68
69
70
71
72
# 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