StevenJL/rawscsi

View on GitHub
lib/rawscsi/search_helpers/results_active_record.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Rawscsi
  module SearchHelpers
    class ResultsActiveRecord
      attr_reader :response

      def initialize(response, model)
        @response = response
        @model = model
      end

      def build
        id_array = @response["hits"]["hit"].map {|h| model_id(h["id"]) }
        return [] if id_array.empty?
        results =
          if ActiveRecord::VERSION::MAJOR > 2
            klass.where(:id => id_array).to_a  
          else
            klass.find_all_by_id(id_array)
          end
        results.index_by(&:id).slice(*id_array).values
      end

      private
      def klass
        @model.constantize 
      end

      def model_id(doc_id)
        doc_id.split('_').last.to_i
      end
    end
  end
end