Class: Brainstem::QueryStrategies::BaseStrategy

Inherits:
Object
  • Object
show all
Defined in:
lib/brainstem/query_strategies/base_strategy.rb

Direct Known Subclasses

FilterAndSearch, FilterOrSearch

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ BaseStrategy

Returns a new instance of BaseStrategy.



7
8
9
# File 'lib/brainstem/query_strategies/base_strategy.rb', line 7

def initialize(options)
  @options = options
end

Instance Method Details

#evaluate_scope(scope) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/brainstem/query_strategies/base_strategy.rb', line 15

def evaluate_scope(scope)
  # Load models!
  # On complex queries, MySQL can sometimes handle 'SELECT id FROM ... ORDER BY ...' much faster than
  # 'SELECT * FROM ...', so we pluck the ids, then find those specific ids in a separate query.
  if(ActiveRecord::Base.connection.instance_values["config"][:adapter] =~ /mysql|sqlite/i)
    ids = scope.pluck("#{scope.table_name}.id")
    id_lookup = {}
    ids.each.with_index { |id, index| id_lookup[id] = index }
    primary_models = scope.klass.where(id: id_lookup.keys).sort_by { |model| id_lookup[model.id] }
  else
    primary_models = scope.to_a
  end
end

#execute(scope) ⇒ Object

Raises:



11
12
13
# File 'lib/brainstem/query_strategies/base_strategy.rb', line 11

def execute(scope)
  raise NotImplemented, 'Your strategy class must implement an `execute` method'
end