class ActiveFedora::RDF::IndexingService

Responsible for generating the solr document (via generate_solr_document) of the given object.

@see ActiveFedora::Indexing @see ActiveFedora::IndexingService

Attributes

index_config[R]
object[R]

Public Class Methods

new(obj, index_config = nil) click to toggle source

@param [#resource, rdf_subject] obj the object to build an solr document for. Its class must respond to ‘properties’ @param [ActiveFedora::Indexing::Map] index_config the configuration to use to map object values to index document values

# File lib/active_fedora/rdf/indexing_service.rb, line 12
def initialize(obj, index_config = nil)
  unless index_config
    Deprecation.warn(self, "initializing ActiveFedora::RDF::IndexingService without an index_config is deprecated and will be removed in ActiveFedora 13.0")
    index_config = obj.class.index_config
  end
  @object = obj
  @index_config = index_config
end

Public Instance Methods

generate_solr_document(prefix_method = nil) { |solr_doc| ... } click to toggle source

Creates a solr document hash for the rdf assertions of the {#object} @yield [Hash] yields the solr document @return [Hash] the solr document

# File lib/active_fedora/rdf/indexing_service.rb, line 24
def generate_solr_document(prefix_method = nil)
  solr_doc = add_assertions(prefix_method)
  yield(solr_doc) if block_given?
  solr_doc
end

Protected Instance Methods

add_assertions(prefix_method, solr_doc = {}) click to toggle source
# File lib/active_fedora/rdf/indexing_service.rb, line 32
def add_assertions(prefix_method, solr_doc = {})
  fields.each do |field_key, field_info|
    solr_field_key = solr_document_field_name(field_key, prefix_method)
    field_info.values.each do |val|
      append_to_solr_doc(solr_doc, solr_field_key, field_info, val)
    end
  end
  solr_doc
end
append_to_solr_doc(solr_doc, solr_field_key, field_info, val) click to toggle source

Override this in order to allow one field to be expanded into more than one:

example:
  def append_to_solr_doc(solr_doc, field_key, field_info, val)
    ActiveFedora.index_field_mapper.set_field(solr_doc, 'lcsh_subject_uri', val.to_uri, :symbol)
    ActiveFedora.index_field_mapper.set_field(solr_doc, 'lcsh_subject_label', val.to_label, :searchable)
  end
# File lib/active_fedora/rdf/indexing_service.rb, line 48
def append_to_solr_doc(solr_doc, solr_field_key, field_info, val)
  ActiveFedora::Indexing::Inserter.create_and_insert_terms(solr_field_key,
                                                           solr_document_field_value(val),
                                                           field_info.behaviors,
                                                           solr_doc)
end
field_map_class() click to toggle source

Override this method to use your own FieldMap class for custom indexing of objects and properties

# File lib/active_fedora/rdf/indexing_service.rb, line 86
def field_map_class
  ActiveFedora::RDF::FieldMap
end
fields() click to toggle source

returns the field map instance

# File lib/active_fedora/rdf/indexing_service.rb, line 79
def fields
  field_map_class.new do |field_map|
    index_config.each { |name, index_field_config| field_map.insert(name, index_field_config, object) }
  end
end
resource() click to toggle source
# File lib/active_fedora/rdf/indexing_service.rb, line 74
def resource
  object.resource
end
solr_document_field_name(field_key, prefix_method) click to toggle source
# File lib/active_fedora/rdf/indexing_service.rb, line 55
def solr_document_field_name(field_key, prefix_method)
  if prefix_method
    prefix_method.call(field_key)
  else
    field_key.to_s
  end
end
solr_document_field_value(val) click to toggle source
# File lib/active_fedora/rdf/indexing_service.rb, line 63
def solr_document_field_value(val)
  case val
  when ::RDF::URI
    val.to_s
  when ActiveTriples::Resource
    val.node? ? val.rdf_label : val.rdf_subject.to_s
  else
    val
  end
end