Module: Rubydora::Ext::Solr::DigitalObjectMixin
- Defined in:
- lib/rubydora/ext/solr.rb
Overview
DigitalObject mixin
Class Method Summary collapse
-
.included(base) ⇒ Object
Initialize solr mapping logic.
Instance Method Summary collapse
-
#datastreams_to_solr(doc) ⇒ Object
add solr document attributes from the object datastreams.
-
#object_profile_to_solr(doc) ⇒ Object
add solr document attributes from the object profile.
-
#relations_to_solr(doc) ⇒ Object
add solr document attributes by querying the resource index.
-
#to_solr(doc = {}) ⇒ Object
Set appropriate solr document attributes for this object.
Class Method Details
.included(base) ⇒ Object
Initialize solr mapping logic
43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/rubydora/ext/solr.rb', line 43 def self.included(base) base.instance_eval %Q{ class << self; attr_accessor :solr_mapping_logic end } base.class_eval %Q{ attr_writer :solr_mapping_logic def solr_mapping_logic @solr_mapping_logic ||= self.class.solr_mapping_logic.dup end } base.solr_mapping_logic ||= [:object_profile_to_solr,:datastreams_to_solr, :relations_to_solr] end |
Instance Method Details
#datastreams_to_solr(doc) ⇒ Object
add solr document attributes from the object datastreams
82 83 84 85 86 87 88 |
# File 'lib/rubydora/ext/solr.rb', line 82 def datastreams_to_solr doc datastreams.each do |dsid, ds| doc['disseminates_s'] ||= [] doc['disseminates_s'] << dsid ds.to_solr(doc) end end |
#object_profile_to_solr(doc) ⇒ Object
add solr document attributes from the object profile
71 72 73 74 75 76 77 78 |
# File 'lib/rubydora/ext/solr.rb', line 71 def object_profile_to_solr doc doc['id'] = pid doc['pid_s'] = pid self.profile.each do |key, value| doc["#{key}_s"] = value end end |
#relations_to_solr(doc) ⇒ Object
add solr document attributes by querying the resource index
92 93 94 95 96 97 98 99 100 |
# File 'lib/rubydora/ext/solr.rb', line 92 def relations_to_solr doc self.repository.sparql("SELECT ?relation ?object FROM <#ri> WHERE { <#{uri}> ?relation ?object }").each do |row| solr_field = "ri_#{row['relation'].split('#').last}_s" doc[solr_field] ||= [] doc[solr_field] << row['object'] end end |
#to_solr(doc = {}) ⇒ Object
Set appropriate solr document attributes for this object
61 62 63 64 65 66 67 |
# File 'lib/rubydora/ext/solr.rb', line 61 def to_solr(doc = {}) self.solr_mapping_logic.each do |method_name| send(method_name, doc) end doc.reject { |k,v| v.nil? or (v.respond_to?(:empty?) and v.empty?) } end |