# File lib/thinking_sphinx/middlewares/active_record_translator.rb, line 15 def initialize(context) @context = context end
# 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
# 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
# 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
# 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 end
# File lib/thinking_sphinx/middlewares/active_record_translator.rb, line 45 def reset_memos @model_names = nil @results_for_models = nil end
# 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
# 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
# File lib/thinking_sphinx/middlewares/active_record_translator.rb, line 75 def sql_options context.search.options[:sql] || {} end