class NPlusOneControl::Executor

Runs code for every scale factor and returns collected queries.

Attributes

transaction_begin[RW]
transaction_rollback[RW]
current_scale[R]
matching[R]
population[R]
scale_factors[R]

Public Class Methods

new(population: nil, scale_factors: nil, matching: nil) click to toggle source
# File lib/n_plus_one_control/executor.rb, line 61
def initialize(population: nil, scale_factors: nil, matching: nil)
  @population = population
  @scale_factors = scale_factors
  @matching = matching
end

Public Instance Methods

call() { || ... } click to toggle source

rubocop:disable Metrics/MethodLength

# File lib/n_plus_one_control/executor.rb, line 68
def call
  raise ArgumentError, "Block is required!" unless block_given?

  results = []
  collector = Collector.new(matching)

  (scale_factors || NPlusOneControl.default_scale_factors).each do |scale|
    @current_scale = scale
    with_transaction do
      population&.call(scale)
      results << [scale, collector.call { yield }]
    end
  end
  results
end

Private Instance Methods

transaction_begin() click to toggle source
# File lib/n_plus_one_control/executor.rb, line 94
def transaction_begin
  self.class.transaction_begin
end
transaction_rollback() click to toggle source
# File lib/n_plus_one_control/executor.rb, line 98
def transaction_rollback
  self.class.transaction_rollback
end
with_transaction() { || ... } click to toggle source

rubocop:enable Metrics/MethodLength

# File lib/n_plus_one_control/executor.rb, line 87
def with_transaction
  transaction_begin.call
  yield
ensure
  transaction_rollback.call
end