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
10
# File 'lib/brainstem/query_strategies/base_strategy.rb', line 7

def initialize(options)
  @options = options
  @last_count = nil
end

Instance Method Details

#calculate_per_pageObject



35
36
37
38
39
# File 'lib/brainstem/query_strategies/base_strategy.rb', line 35

def calculate_per_page
  per_page = [(@options[:params][:per_page] || @options[:per_page] || @options[:default_per_page]).to_i, (@options[:max_per_page] || @options[:default_max_per_page]).to_i].min
  per_page = @options[:default_per_page] if per_page < 1
  per_page
end

#evaluate_count(count_scope) ⇒ Object



29
30
31
32
33
# File 'lib/brainstem/query_strategies/base_strategy.rb', line 29

def evaluate_count(count_scope)
  ret = @last_count || count_scope.count
  @last_count = nil
  ret
end

#evaluate_scope(scope) ⇒ Object



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

def evaluate_scope(scope)
  @last_count = nil

  # 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
    get_ids_sql(scope)
  else
    scope.to_a
  end
end

#execute(scope) ⇒ Object

Raises:



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

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