Class: NPlusOneControl::Executor

Inherits:
Object
  • Object
show all
Defined in:
lib/n_plus_one_control/executor.rb

Overview

Runs code for every scale factor and returns collected queries.

Defined Under Namespace

Classes: Collector

Class Attribute Summary collapse

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(population: nil, scale_factors: nil, matching: nil) ⇒ Executor

Returns a new instance of Executor.



63
64
65
66
67
# File 'lib/n_plus_one_control/executor.rb', line 63

def initialize(population: nil, scale_factors: nil, matching: nil)
  @population = population
  @scale_factors = scale_factors
  @matching = matching
end

Class Attribute Details

.transaction_beginObject

Returns the value of attribute transaction_begin.



49
50
51
# File 'lib/n_plus_one_control/executor.rb', line 49

def transaction_begin
  @transaction_begin
end

.transaction_rollbackObject

Returns the value of attribute transaction_rollback.



50
51
52
# File 'lib/n_plus_one_control/executor.rb', line 50

def transaction_rollback
  @transaction_rollback
end

Instance Attribute Details

#current_scaleObject (readonly)

Returns the value of attribute current_scale.



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

def current_scale
  @current_scale
end

Instance Method Details

#callObject

rubocop:disable Metrics/MethodLength

Raises:

  • (ArgumentError)


70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/n_plus_one_control/executor.rb', line 70

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