Sha256: e21b4cc3f6ac9483aa80b70aec7b396746e48e248d30db055b53764f6a089dbf
Contents?: true
Size: 1.46 KB
Versions: 2
Compression:
Stored size: 1.46 KB
Contents
module Sunspot # # InstantiatedFacet instances allow access to a model instance based on a # primary key stored in facet rows' values. The rows are hydrated lazily, but # all rows are hydrated the first time #instance is called on any of the rows. # # The #rows method returns InstantiatedFacetRow objects. # class InstantiatedFacet < Facet # # Hydrate all rows for the facet. For data accessors that can efficiently # batch load, this is more efficient than individually lazy-loading # instances for each row, but allows us to still stay lazy and not do work # in the persistent store if the instances are not needed. # def populate_instances! #:nodoc: ids = rows.map { |row| row.value } reference_class = Sunspot::Util.full_const_get(@facet_data.reference.to_s) accessor = Adapters::DataAccessor.create(reference_class) instance_map = accessor.load_all(ids).inject({}) do |map, instance| map[Adapters::InstanceAdapter.adapt(instance).id] = instance map end for row in rows row.instance = instance_map[row.value] end end # # A collection of InstantiatedFacetRow objects # def rows @facet_data.rows { |value, count| InstantiatedFacetRow.new(value, count, self) } end private # # Override the Facet#new_row method to return an InstantiatedFacetRow # def new_row(pair) InstantiatedFacetRow.new(pair, self) end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
benjaminkrause-sunspot-0.9.7 | lib/sunspot/instantiated_facet.rb |
benjaminkrause-sunspot-0.9.8 | lib/sunspot/instantiated_facet.rb |