Class: Sunspot::Setup

Inherits:
Object
  • Object
show all
Defined in:
lib/sunspot/setup.rb

Overview

This class encapsulates the search/indexing setup for a given class. Its contents are built using the Sunspot.setup method.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(clazz) ⇒ Setup

:nodoc:



7
8
9
10
11
12
13
14
15
# File 'lib/sunspot/setup.rb', line 7

def initialize(clazz)
  @clazz = clazz
  @class_name = clazz.name
  @field_factories, @text_field_factories, @dynamic_field_factories,
    @field_factories_cache, @text_field_factories_cache,
    @dynamic_field_factories_cache = *Array.new(6) { Hash.new }
  @dsl = DSL::Fields.new(self)
  add_field_factory(:class, Type::ClassType)
end

Class Method Details

.for(clazz) ⇒ Object

Retrieve the setup instance for the given class, or for the nearest ancestor that has a setup, if any.

Parameters

clazz<Class>

Class for which to retrieve a setup

Returns

Sunspot::Setup

Setup instance associated with the given class or its nearest ancestor



231
232
233
234
235
236
237
238
239
# File 'lib/sunspot/setup.rb', line 231

def for(clazz) #:nodoc:
  class_name =
    if clazz.respond_to?(:name)
      clazz.name
    else
      clazz
    end
  setups[class_name.to_sym] || self.for(clazz.superclass) if clazz
end

.setup(clazz, &block) ⇒ Object

Retrieve or create the Setup instance for the given class, evaluating the given block to add to the setup’s configuration



214
215
216
# File 'lib/sunspot/setup.rb', line 214

def setup(clazz, &block) #:nodoc:
  self.for!(clazz).setup(&block)
end

Instance Method Details

#add_document_boost(attr_name, &block) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/sunspot/setup.rb', line 60

def add_document_boost(attr_name, &block)
  @document_boost_extractor =
    if attr_name
      if attr_name.respond_to?(:to_f)
        DataExtractor::Constant.new(attr_name)
      else
        DataExtractor::AttributeExtractor.new(attr_name)
      end
    else
      DataExtractor::BlockExtractor.new(&block)
    end
end

#add_dynamic_field_factory(name, type, options = {}, &block) ⇒ Object

Add dynamic field_factories

Parameters

field_factories<Array>

Array of dynamic field objects



54
55
56
57
58
# File 'lib/sunspot/setup.rb', line 54

def add_dynamic_field_factory(name, type, options = {}, &block)
  field_factory = FieldFactory::Dynamic.new(name, type, options, &block)
  @dynamic_field_factories[field_factory.signature] = field_factory
  @dynamic_field_factories_cache[field_factory.name] = field_factory
end

#add_field_factory(name, type, options = {}, &block) ⇒ Object

Add field_factories for scope/ordering

Parameters

field_factories<Array>

Array of Sunspot::Field objects



28
29
30
31
32
# File 'lib/sunspot/setup.rb', line 28

def add_field_factory(name, type, options = {}, &block)
  field_factory = FieldFactory::Static.new(name, type, options, &block)
  @field_factories[field_factory.signature] = field_factory
  @field_factories_cache[field_factory.name] = field_factory
end

#add_text_field_factory(name, options = {}, &block) ⇒ Object

Add field_factories for fulltext search

Parameters

field_factories<Array>

Array of Sunspot::Field objects



41
42
43
44
45
# File 'lib/sunspot/setup.rb', line 41

def add_text_field_factory(name, options = {}, &block)
  field_factory = FieldFactory::Static.new(name, Type::TextType, options, &block)
  @text_field_factories[name] = field_factory
  @text_field_factories_cache[field_factory.name] = field_factory
end

#all_field_factoriesObject

Get all static, dynamic, and text field_factories associated with this setup as well as all inherited field_factories

Returns

Array

Collection of all text and scope field_factories associated with this setup



148
149
150
151
152
# File 'lib/sunspot/setup.rb', line 148

def all_field_factories
  all_field_factories = []
  all_field_factories.concat(field_factories).concat(text_field_factories).concat(dynamic_field_factories)
  all_field_factories
end

#clazzObject

Return the class associated with this setup.

Returns

clazz<Class>

Class setup is configured for



172
173
174
# File 'lib/sunspot/setup.rb', line 172

def clazz
  Util.full_const_get(@class_name)
end

#document_boost_for(model) ⇒ Object



176
177
178
179
180
# File 'lib/sunspot/setup.rb', line 176

def document_boost_for(model)
  if @document_boost_extractor
    @document_boost_extractor.value_for(model)
  end
end

#dynamic_field_factoriesObject

Get all dynamic field_factories for this and parent setups

Returns

Array

Dynamic field_factories



161
162
163
# File 'lib/sunspot/setup.rb', line 161

def dynamic_field_factories
  collection_from_inheritable_hash(:dynamic_field_factories)
end

#dynamic_field_factory(field_name) ⇒ Object



102
103
104
105
106
107
# File 'lib/sunspot/setup.rb', line 102

def dynamic_field_factory(field_name)
  @dynamic_field_factories_cache[field_name.to_sym] || raise(
    UnrecognizedFieldError,
    "No dynamic field configured for #{@clazz.name} with name '#{field_name}'"
  )
end

#field(field_name) ⇒ Object



80
81
82
83
84
85
86
87
88
89
# File 'lib/sunspot/setup.rb', line 80

def field(field_name)
  if field_factory = @field_factories_cache[field_name.to_sym]
    field_factory.build
  else
    raise(
      UnrecognizedFieldError,
      "No field configured for #{@clazz.name} with name '#{field_name}'"
    )
  end
end

#field_factoriesObject

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

Returns

Array

Collection of all field_factories associated with this setup



124
125
126
# File 'lib/sunspot/setup.rb', line 124

def field_factories
  collection_from_inheritable_hash(:field_factories)
end

#fieldsObject



109
110
111
# File 'lib/sunspot/setup.rb', line 109

def fields
  field_factories.map { |field_factory| field_factory.build }
end

#setup(&block) ⇒ Object

Builder method for evaluating the setup DSL



76
77
78
# File 'lib/sunspot/setup.rb', line 76

def setup(&block)
  @dsl.instance_eval(&block)
end

#text_field(field_name) ⇒ Object



91
92
93
94
95
96
97
98
99
100
# File 'lib/sunspot/setup.rb', line 91

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

#text_field_factoriesObject

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

Returns

Array

Collection of all text field_factories associated with this setup



136
137
138
# File 'lib/sunspot/setup.rb', line 136

def text_field_factories
  collection_from_inheritable_hash(:text_field_factories)
end

#text_fieldsObject



113
114
115
# File 'lib/sunspot/setup.rb', line 113

def text_fields
  text_field_factories.map { |text_field_factory| text_field_factory.build }
end

#type_namesObject



17
18
19
# File 'lib/sunspot/setup.rb', line 17

def type_names
  [@class_name]
end