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