Class: Sunspot::FieldFactory::Dynamic
- Defined in:
- lib/sunspot/field_factory.rb
Overview
DynamicFieldFactories create dynamic field instances based on dynamic configuration.
Instance Attribute Summary collapse
-
#name ⇒ Object
Returns the value of attribute name.
-
#separator ⇒ Object
Returns the value of attribute separator.
-
#type ⇒ Object
Returns the value of attribute type.
Instance Method Summary collapse
-
#build(dynamic_name) ⇒ Object
(also: #field)
Build a field based on the dynamic name given.
-
#initialize(name, type, options = {}, &block) ⇒ Dynamic
constructor
A new instance of Dynamic.
-
#populate_document(document, model, options = {}) ⇒ Object
Generate dynamic fields based on hash returned by data accessor and add the field data to the document.
-
#signature ⇒ Object
Unique signature identifying this dynamic field based on name and type.
Constructor Details
#initialize(name, type, options = {}, &block) ⇒ Dynamic
Returns a new instance of Dynamic.
132 133 134 135 136 |
# File 'lib/sunspot/field_factory.rb', line 132 def initialize(name, type, = {}, &block) super(name, , &block) @type, @options = type, @separator = @options.delete(:separator) || ':' end |
Instance Attribute Details
#name ⇒ Object
Returns the value of attribute name.
130 131 132 |
# File 'lib/sunspot/field_factory.rb', line 130 def name @name end |
#separator ⇒ Object
Returns the value of attribute separator.
130 131 132 |
# File 'lib/sunspot/field_factory.rb', line 130 def separator @separator end |
#type ⇒ Object
Returns the value of attribute type.
130 131 132 |
# File 'lib/sunspot/field_factory.rb', line 130 def type @type end |
Instance Method Details
#build(dynamic_name) ⇒ Object Also known as: field
Build a field based on the dynamic name given.
141 142 143 |
# File 'lib/sunspot/field_factory.rb', line 141 def build(dynamic_name) AttributeField.new([@name, dynamic_name].join(separator), @type, @options.dup) end |
#populate_document(document, model, options = {}) ⇒ Object
Generate dynamic fields based on hash returned by data accessor and add the field data to the document.
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/sunspot/field_factory.rb', line 154 def populate_document(document, model, = {}) values = extract_value(model, ) if values values.each_pair do |dynamic_name, value| field_instance = build(dynamic_name) Util.Array(field_instance.to_indexed(value)).each do |scalar_value| document.add_field( field_instance.indexed_name.to_sym, scalar_value, ) end end end end |
#signature ⇒ Object
Unique signature identifying this dynamic field based on name and type
173 174 175 |
# File 'lib/sunspot/field_factory.rb', line 173 def signature [@name, @type] end |