module SunspotCell::Setup

Public Class Methods

included(base) click to toggle source
# File lib/sunspot_cell/setup.rb, line 4
def self.included(base)
  base.class_eval do
    alias :sunspot_initialize :initialize unless method_defined?(:sunspot_initialize)
    def initialize(clazz)
      @attachment_field_factories, @attachment_field_factories_cache = *Array.new(8) { Hash.new }
      sunspot_initialize(clazz)
    end

    alias :sunspot_all_field_factories :all_field_factories unless method_defined?(:sunspot_all_field_factories)
    def all_field_factories
      all_field_factories = sunspot_all_field_factories
      all_field_factories.concat(attachment_field_factories)
      all_field_factories
    end
    
    # Add field_factories for fulltext search on attachments
    #
    # ==== Parameters
    #
    def add_attachment_field_factory(name, options = {}, &block)
      stored = options[:stored]
      field_factory = Sunspot::FieldFactory::Static.new(name, Sunspot::Type::AttachmentType.instance, options, &block)
      @attachment_field_factories[name] = field_factory
      @attachment_field_factories_cache[field_factory.name] = field_factory
      if stored
        @attachment_field_factories_cache[field_factory.name] << field_factory
      end
    end

    def text_fields(field_name)
      text_field =
        if field_factory = @text_field_factories_cache[field_name.to_sym]
          field_factory.build
        else
          if field_factory = @attachment_field_factories_cache[field_name.to_sym]
            field_factory.build
          else
            raise(
              UnrecognizedFieldError,
              "No text field configured for #{@class_name} with name '#{field_name}'"
            )
          end
        end
      [text_field]
    end

    #
    # Return all text fields
    #
    def all_text_fields
      text_fields = text_field_factories.map { |text_field_factory| text_field_factory.build }
      text_fields.concat(all_attachment_fields)
    end

    def all_attachment_fields
      attachment_field_factories.map { |field_factory| field_factory.build }
    end

    # Get the text field_factories associated with this setup as well as all inherited
    # attachment field_factories
    #
    # ==== Returns
    #
    # Array:: Collection of all text field_factories associated with this setup
    #
    def attachment_field_factories
      collection_from_inheritable_hash(:attachment_field_factories)
    end
  end
end
new(clazz) click to toggle source
# File lib/sunspot_cell/setup.rb, line 7
def initialize(clazz)
  @attachment_field_factories, @attachment_field_factories_cache = *Array.new(8) { Hash.new }
  sunspot_initialize(clazz)
end

Public Instance Methods

add_attachment_field_factory(name, options = {}, &block) click to toggle source

Add field_factories for fulltext search on attachments

Parameters

# File lib/sunspot_cell/setup.rb, line 23
def add_attachment_field_factory(name, options = {}, &block)
  stored = options[:stored]
  field_factory = Sunspot::FieldFactory::Static.new(name, Sunspot::Type::AttachmentType.instance, options, &block)
  @attachment_field_factories[name] = field_factory
  @attachment_field_factories_cache[field_factory.name] = field_factory
  if stored
    @attachment_field_factories_cache[field_factory.name] << field_factory
  end
end
all_attachment_fields() click to toggle source
# File lib/sunspot_cell/setup.rb, line 58
def all_attachment_fields
  attachment_field_factories.map { |field_factory| field_factory.build }
end
all_field_factories() click to toggle source
# File lib/sunspot_cell/setup.rb, line 13
def all_field_factories
  all_field_factories = sunspot_all_field_factories
  all_field_factories.concat(attachment_field_factories)
  all_field_factories
end
all_text_fields() click to toggle source

Return all text fields

# File lib/sunspot_cell/setup.rb, line 53
def all_text_fields
  text_fields = text_field_factories.map { |text_field_factory| text_field_factory.build }
  text_fields.concat(all_attachment_fields)
end
attachment_field_factories() click to toggle source

Get the text field_factories associated with this setup as well as all inherited attachment field_factories

Returns

Array

Collection of all text field_factories associated with this setup

# File lib/sunspot_cell/setup.rb, line 69
def attachment_field_factories
  collection_from_inheritable_hash(:attachment_field_factories)
end
text_fields(field_name) click to toggle source
# File lib/sunspot_cell/setup.rb, line 33
def text_fields(field_name)
  text_field =
    if field_factory = @text_field_factories_cache[field_name.to_sym]
      field_factory.build
    else
      if field_factory = @attachment_field_factories_cache[field_name.to_sym]
        field_factory.build
      else
        raise(
          UnrecognizedFieldError,
          "No text field configured for #{@class_name} with name '#{field_name}'"
        )
      end
    end
  [text_field]
end