Sha256: 1d79df09316c7adba4d48067fe28c6aeb77343431ccbe1293e94b4d3acbaefb5

Contents?: true

Size: 1.39 KB

Versions: 7

Compression:

Stored size: 1.39 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.
  #
  # Instatiated facets are possible for fields which are defined with a
  # :references option.
  #
  # 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
  end
end

Version data entries

7 entries across 7 versions & 2 rubygems

Version Path
sunspot-0.10.5 lib/sunspot/instantiated_facet.rb
sunspot-0.10.4 lib/sunspot/instantiated_facet.rb
kuahyeow-sunspot-0.10.3 lib/sunspot/instantiated_facet.rb
sunspot-0.10.3 lib/sunspot/instantiated_facet.rb
sunspot-0.10.2 lib/sunspot/instantiated_facet.rb
sunspot-0.10.1 lib/sunspot/instantiated_facet.rb
sunspot-0.10.0 lib/sunspot/instantiated_facet.rb