Class: Sunspot::Setup
- Inherits:
-
Object
- Object
- Sunspot::Setup
- 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
-
.for(clazz) ⇒ Object
Retrieve the setup instance for the given class, or for the nearest ancestor that has a setup, if any.
-
.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.
Instance Method Summary collapse
- #add_document_boost(attr_name, &block) ⇒ Object
-
#add_dynamic_field_factory(name, type, options = {}, &block) ⇒ Object
Add dynamic field_factories.
-
#add_field_factory(name, type, options = {}, &block) ⇒ Object
Add field_factories for scope/ordering.
-
#add_text_field_factory(name, options = {}, &block) ⇒ Object
Add field_factories for fulltext search.
-
#all_field_factories ⇒ Object
Get all static, dynamic, and text field_factories associated with this setup as well as all inherited field_factories.
-
#clazz ⇒ Object
Return the class associated with this setup.
- #document_boost_for(model) ⇒ Object
-
#dynamic_field_factories ⇒ Object
Get all dynamic field_factories for this and parent setups.
- #dynamic_field_factory(field_name) ⇒ Object
- #field(field_name) ⇒ Object
-
#field_factories ⇒ Object
Get the field_factories associated with this setup as well as all inherited field_factories.
- #fields ⇒ Object
-
#initialize(clazz) ⇒ Setup
constructor
:nodoc:.
-
#setup(&block) ⇒ Object
Builder method for evaluating the setup DSL.
- #text_field(field_name) ⇒ Object
-
#text_field_factories ⇒ Object
Get the text field_factories associated with this setup as well as all inherited text field_factories.
- #text_fields ⇒ Object
- #type_names ⇒ Object
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, = {}, &block) field_factory = FieldFactory::Dynamic.new(name, type, , &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, = {}, &block) field_factory = FieldFactory::Static.new(name, type, , &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, = {}, &block) field_factory = FieldFactory::Static.new(name, Type::TextType, , &block) @text_field_factories[name] = field_factory @text_field_factories_cache[field_factory.name] = field_factory end |
#all_field_factories ⇒ Object
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 |
#clazz ⇒ Object
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_factories ⇒ Object
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_factories ⇒ Object
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 |
#fields ⇒ Object
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_factories ⇒ Object
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_fields ⇒ Object
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_names ⇒ Object
17 18 19 |
# File 'lib/sunspot/setup.rb', line 17 def type_names [@class_name] end |