Sha256: 8323f9411a3a8f4e682f41d75716a5a45108c6abf0b43f83effad2195e16a407
Contents?: true
Size: 1.75 KB
Versions: 2
Compression:
Stored size: 1.75 KB
Contents
class ThinkingSphinx::Middlewares::ActiveRecordTranslator < ThinkingSphinx::Middlewares::Middleware def call(contexts) contexts.each do |context| Inner.new(context).call end app.call contexts end private class Inner def initialize(context) @context = context end def call results_for_models # load now to avoid segfaults context[:results] = context[:results].collect { |row| result_for row } end private attr_reader :context def ids_for_model(model_name) context[:results].select { |row| row['sphinx_internal_class'] == model_name }.collect { |row| row['sphinx_internal_id'] } end def model_names @model_names ||= context[:results].collect { |row| row['sphinx_internal_class'] }.uniq end def reset_memos @model_names = nil @results_for_models = nil end def result_for(row) results_for_models[row['sphinx_internal_class']].detect { |record| record.id == row['sphinx_internal_id'] } end def results_for_models @results_for_models ||= model_names.inject({}) { |hash, name| ids = ids_for_model(name) model = name.constantize relation = model.unscoped 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] hash[name] = relation.where(model.primary_key => ids) hash } end def sql_options context.search.options[:sql] || {} end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
thinking-sphinx-3.0.3 | lib/thinking_sphinx/middlewares/active_record_translator.rb |
thinking-sphinx-3.0.2 | lib/thinking_sphinx/middlewares/active_record_translator.rb |