Module: Rubydora::Ext::Solr::DigitalObjectMixin

Defined in:
lib/rubydora/ext/solr.rb

Overview

DigitalObject mixin

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object

Initialize solr mapping logic

Parameters:

  • base (Class)


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

Parameters:

  • doc (Hash)

    Solr document object (pass-by-reference)



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

Parameters:

  • doc (Hash)

    Solr document object (pass-by-reference)



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

Parameters:

  • doc (Hash)

    Solr document object (pass-by-reference)



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

Parameters:

  • doc (Hash) (defaults to: {})

    Solr document object (pass-by-reference)



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