Class: Sunspot::Setup
- Inherits:
-
Object
- Object
- Sunspot::Setup
- Defined in:
- sunspot/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.
Instance Attribute Summary (collapse)
-
- (Object) class_object_id
readonly
:nodoc:.
Class Method Summary (collapse)
-
+ (Object) for(clazz)
Retrieve the setup instance for the given class, or for the nearest ancestor that has a setup, if any.
-
+ (Object) setup(clazz, &block)
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)
-
- (Object) add_document_boost(attr_name, &block)
Add a document boost to documents at index time.
-
- (Object) add_dynamic_field_factory(name, type, options = {}, &block)
Add dynamic field_factories.
-
- (Object) add_field_factory(name, type, options = {}, &block)
Add field factory for scope/ordering.
-
- (Object) add_text_field_factory(name, options = {}, &block)
Add field_factories for fulltext search.
-
- (Object) all_field_factories
Get all static, dynamic, and text field_factories associated with this setup as well as all inherited field_factories.
-
- (Object) all_more_like_this_fields
Return all more_like_this fields.
-
- (Object) all_text_fields
Return all text fields.
-
- (Object) clazz
Return the class associated with this setup.
-
- (Object) document_boost_for(model)
Get the document boost for a given model.
-
- (Object) dynamic_field_factories
Get all dynamic field_factories for this and parent setups.
-
- (Object) dynamic_field_factory(field_name)
Return the DynamicFieldFactory with the given base name.
-
- (Object) field(field_name)
Return the Field with the given (public-facing) name.
-
- (Object) field_factories
Get the field_factories associated with this setup as well as all inherited field_factories.
-
- (Object) fields
Return all attribute fields.
-
- (Setup) initialize(clazz)
constructor
A new instance of Setup.
-
- (Object) more_like_this_fields(field_name)
Return one or more more_like_this fields (can be either attribute or text fields) for the given name.
-
- (Object) setup(&block)
Builder method for evaluating the setup DSL.
-
- (Object) stored_fields(field_name, dynamic_field_name = nil)
Return one or more stored fields (can be either attribute or text fields) for the given name.
-
- (Object) text_field_factories
Get the text field_factories associated with this setup as well as all inherited text field_factories.
-
- (Object) text_fields(field_name)
Return one or more text fields with the given public-facing name.
- - (Object) type_names
Constructor Details
- (Setup) initialize(clazz)
A new instance of Setup
8 9 10 11 12 13 14 15 16 17 18 |
# File 'sunspot/lib/sunspot/setup.rb', line 8 def initialize(clazz) @class_object_id = clazz.object_id @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 } @stored_field_factories_cache = Hash.new { |h, k| h[k] = [] } @more_like_this_field_factories_cache = Hash.new { |h, k| h[k] = [] } @dsl = DSL::Fields.new(self) add_field_factory(:class, Type::ClassType.instance) end |
Instance Attribute Details
- (Object) class_object_id (readonly)
:nodoc:
7 8 9 |
# File 'sunspot/lib/sunspot/setup.rb', line 7 def class_object_id @class_object_id end |
Class Method Details
+ (Object) for(clazz)
Retrieve the setup instance for the given class, or for the nearest ancestor that has a setup, if any.
Parameters
clazz | Class for which to retrieve a setup |
Returns
Sunspot::Setup | Setup instance associated with the given class or its nearest ancestor |
311 312 313 |
# File 'sunspot/lib/sunspot/setup.rb', line 311 def for(clazz) #:nodoc: setups[clazz.name.to_sym] || self.for(clazz.superclass) if clazz end |
+ (Object) setup(clazz, &block)
Retrieve or create the Setup instance for the given class, evaluating the given block to add to the setup’s configuration
294 295 296 |
# File 'sunspot/lib/sunspot/setup.rb', line 294 def setup(clazz, &block) #:nodoc: self.for!(clazz).setup(&block) end |
Instance Method Details
- (Object) add_document_boost(attr_name, &block)
Add a document boost to documents at index time. Document boost can be static (the same for all documents of this class), or extracted on a per- document basis using either attribute or block extraction as per usual.
85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'sunspot/lib/sunspot/setup.rb', line 85 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 |
- (Object) add_dynamic_field_factory(name, type, options = {}, &block)
Add dynamic field_factories
Parameters
field_factories | Array of dynamic field objects |
67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'sunspot/lib/sunspot/setup.rb', line 67 def add_dynamic_field_factory(name, type, = {}, &block) stored, more_like_this = [:stored], [:more_like_this] 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 if stored @stored_field_factories_cache[field_factory.name] << field_factory end if more_like_this @more_like_this_field_factories_cache[field_factory.name] << field_factory end end |
- (Object) add_field_factory(name, type, options = {}, &block)
Add field factory for scope/ordering
27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'sunspot/lib/sunspot/setup.rb', line 27 def add_field_factory(name, type, = {}, &block) stored, more_like_this = [:stored], [:more_like_this] field_factory = FieldFactory::Static.new(name, type, , &block) @field_factories[field_factory.signature] = field_factory @field_factories_cache[field_factory.name] = field_factory if stored @stored_field_factories_cache[field_factory.name] << field_factory end if more_like_this @more_like_this_field_factories_cache[field_factory.name] << field_factory end end |
- (Object) add_text_field_factory(name, options = {}, &block)
Add field_factories for fulltext search
Parameters
field_factories | Array of Sunspot::Field objects |
47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'sunspot/lib/sunspot/setup.rb', line 47 def add_text_field_factory(name, = {}, &block) stored, more_like_this = [:stored], [:more_like_this] field_factory = FieldFactory::Static.new(name, Type::TextType.instance, , &block) @text_field_factories[name] = field_factory @text_field_factories_cache[field_factory.name] = field_factory if stored @stored_field_factories_cache[field_factory.name] << field_factory end if more_like_this @more_like_this_field_factories_cache[field_factory.name] << field_factory end end |
- (Object) all_field_factories
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 |
225 226 227 228 229 |
# File 'sunspot/lib/sunspot/setup.rb', line 225 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 |
- (Object) all_more_like_this_fields
Return all more_like_this fields
188 189 190 191 192 |
# File 'sunspot/lib/sunspot/setup.rb', line 188 def all_more_like_this_fields @more_like_this_field_factories_cache.values.map do |field_factories| field_factories.map { |field_factory| field_factory.build } end.flatten end |
- (Object) all_text_fields
Return all text fields
181 182 183 |
# File 'sunspot/lib/sunspot/setup.rb', line 181 def all_text_fields text_field_factories.map { |text_field_factory| text_field_factory.build } end |
- (Object) clazz
Return the class associated with this setup.
Returns
clazz | Class setup is configured for |
249 250 251 |
# File 'sunspot/lib/sunspot/setup.rb', line 249 def clazz Util.full_const_get(@class_name) end |
- (Object) document_boost_for(model)
Get the document boost for a given model
256 257 258 259 260 |
# File 'sunspot/lib/sunspot/setup.rb', line 256 def document_boost_for(model) if @document_boost_extractor @document_boost_extractor.value_for(model) end end |
- (Object) dynamic_field_factories
Get all dynamic field_factories for this and parent setups
Returns
Array | Dynamic field_factories |
238 239 240 |
# File 'sunspot/lib/sunspot/setup.rb', line 238 def dynamic_field_factories collection_from_inheritable_hash(:dynamic_field_factories) end |
- (Object) dynamic_field_factory(field_name)
Return the DynamicFieldFactory with the given base name
164 165 166 167 168 169 |
# File 'sunspot/lib/sunspot/setup.rb', line 164 def dynamic_field_factory(field_name) @dynamic_field_factories_cache[field_name.to_sym] || raise( UnrecognizedFieldError, "No dynamic field configured for #{@class_name} with name '#{field_name}'" ) end |
- (Object) field(field_name)
Return the Field with the given (public-facing) name
108 109 110 111 112 113 114 115 116 117 |
# File 'sunspot/lib/sunspot/setup.rb', line 108 def field(field_name) if field_factory = @field_factories_cache[field_name.to_sym] field_factory.build else raise( UnrecognizedFieldError, "No field configured for #{@class_name} with name '#{field_name}'" ) end end |
- (Object) field_factories
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 |
201 202 203 |
# File 'sunspot/lib/sunspot/setup.rb', line 201 def field_factories collection_from_inheritable_hash(:field_factories) end |
- (Object) fields
Return all attribute fields
174 175 176 |
# File 'sunspot/lib/sunspot/setup.rb', line 174 def fields field_factories.map { |field_factory| field_factory.build } end |
- (Object) more_like_this_fields(field_name)
Return one or more more_like_this fields (can be either attribute or text fields) for the given name.
155 156 157 158 159 |
# File 'sunspot/lib/sunspot/setup.rb', line 155 def more_like_this_fields(field_name) @more_like_this_field_factories_cache[field_name.to_sym].map do |field_factory| field_factory.build end end |
- (Object) setup(&block)
Builder method for evaluating the setup DSL
101 102 103 |
# File 'sunspot/lib/sunspot/setup.rb', line 101 def setup(&block) Util.instance_eval_or_call(@dsl, &block) end |
- (Object) stored_fields(field_name, dynamic_field_name = nil)
Return one or more stored fields (can be either attribute or text fields) for the given name.
141 142 143 144 145 146 147 148 149 |
# File 'sunspot/lib/sunspot/setup.rb', line 141 def stored_fields(field_name, dynamic_field_name = nil) @stored_field_factories_cache[field_name.to_sym].map do |field_factory| if dynamic_field_name field_factory.build(dynamic_field_name) else field_factory.build end end end |
- (Object) text_field_factories
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 |
213 214 215 |
# File 'sunspot/lib/sunspot/setup.rb', line 213 def text_field_factories collection_from_inheritable_hash(:text_field_factories) end |
- (Object) text_fields(field_name)
Return one or more text fields with the given public-facing name. This implementation will always return a single field (in an array), but CompositeSetup objects might return more than one.
124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'sunspot/lib/sunspot/setup.rb', line 124 def text_fields(field_name) text_field = if field_factory = @text_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 [text_field] end |
- (Object) type_names
20 21 22 |
# File 'sunspot/lib/sunspot/setup.rb', line 20 def type_names [@class_name] end |