class ThinkingSphinx::Middlewares::ActiveRecordTranslator::Inner

Attributes

context[R]

Public Class Methods

new(context) click to toggle source
# File lib/thinking_sphinx/middlewares/active_record_translator.rb, line 15
def initialize(context)
  @context = context
end

Public Instance Methods

call() click to toggle source
# File lib/thinking_sphinx/middlewares/active_record_translator.rb, line 19
def call
  results_for_models # load now to avoid segfaults

  context[:results] = if sql_options[:order]
    results_for_models.values.first
  else
    context[:results].collect { |row| result_for(row) }
  end
end

Private Instance Methods

ids_for_model(model_name) click to toggle source
# File lib/thinking_sphinx/middlewares/active_record_translator.rb, line 33
def ids_for_model(model_name)
  context[:results].collect { |row|
    row['sphinx_internal_id'] if row['sphinx_internal_class'] == model_name
  }.compact
end
model_names() click to toggle source
# File lib/thinking_sphinx/middlewares/active_record_translator.rb, line 39
def model_names
  @model_names ||= context[:results].collect { |row|
    row['sphinx_internal_class']
  }.uniq
end
model_relation_with_sql_options(relation) click to toggle source
# File lib/thinking_sphinx/middlewares/active_record_translator.rb, line 67
def model_relation_with_sql_options(relation)
  relation = relation.includes sql_options[:include] if sql_options[:include]
  relation = relation.joins  sql_options[:joins]  if sql_options[:joins]
  relation = relation.order  sql_options[:order]  if sql_options[:order]
  relation = relation.select sql_options[:select] if sql_options[:select]
  relation = relation.group  sql_options[:group]  if sql_options[:group]
  relation
end
reset_memos() click to toggle source
# File lib/thinking_sphinx/middlewares/active_record_translator.rb, line 45
def reset_memos
  @model_names        = nil
  @results_for_models = nil
end
result_for(row) click to toggle source
# File lib/thinking_sphinx/middlewares/active_record_translator.rb, line 50
def result_for(row)
  results_for_models[row['sphinx_internal_class']].detect { |record|
    record.id == row['sphinx_internal_id']
  }
end
results_for_models() click to toggle source
# File lib/thinking_sphinx/middlewares/active_record_translator.rb, line 56
def results_for_models
  @results_for_models ||= model_names.inject({}) do |hash, name|
    model = name.constantize
    hash[name] = model_relation_with_sql_options(model.unscoped).where(
      model.primary_key => ids_for_model(name)
    )

    hash
  end
end
sql_options() click to toggle source
# File lib/thinking_sphinx/middlewares/active_record_translator.rb, line 76
def sql_options
  context.search.options[:sql] || {}
end