Class: Dor::IdentityMetadataDS
- Inherits:
-
ActiveFedora::OmDatastream
- Object
- ActiveFedora::OmDatastream
- Dor::IdentityMetadataDS
- Includes:
- SolrDocHelper
- Defined in:
- lib/dor/datastreams/identity_metadata_ds.rb
Class Method Summary collapse
Instance Method Summary collapse
- #add_otherId(other_id) ⇒ Object
-
#add_value(name, value, attrs = {}) ⇒ Object
self.xml_template.
- #objectId ⇒ Object
- #otherId(type = nil) ⇒ Object
- #sourceId ⇒ Object
- #sourceId=(value) ⇒ Object
- #tags ⇒ Object
- #to_solr(solr_doc = Hash.new, *args) ⇒ Object
Methods included from SolrDocHelper
Class Method Details
.xml_template ⇒ Object
26 27 28 |
# File 'lib/dor/datastreams/identity_metadata_ds.rb', line 26 def self.xml_template Nokogiri::XML('<identityMetadata/>') end |
Instance Method Details
#add_otherId(other_id) ⇒ Object
75 76 77 78 79 80 81 |
# File 'lib/dor/datastreams/identity_metadata_ds.rb', line 75 def add_otherId(other_id) (name,val) = other_id.split(/:/,2) node = ng_xml.root.add_child('<otherId/>').first node['name'] = name node.content = val node end |
#add_value(name, value, attrs = {}) ⇒ Object
self.xml_template
30 31 32 |
# File 'lib/dor/datastreams/identity_metadata_ds.rb', line 30 def add_value(name, value, attrs={}) add_child_node(ng_xml.root, :value, name, value, attrs) end |
#objectId ⇒ Object
34 35 36 |
# File 'lib/dor/datastreams/identity_metadata_ds.rb', line 34 def objectId self.find_by_terms(:objectId).text end |
#otherId(type = nil) ⇒ Object
66 67 68 69 70 71 72 73 |
# File 'lib/dor/datastreams/identity_metadata_ds.rb', line 66 def otherId(type = nil) result = self.find_by_terms(:otherId).to_a if type.nil? result.collect { |n| [n['name'],n.text].join(':') } else result.select { |n| n['name'] == type }.collect { |n| n.text } end end |
#sourceId ⇒ Object
38 39 40 41 |
# File 'lib/dor/datastreams/identity_metadata_ds.rb', line 38 def sourceId node = self.find_by_terms(:sourceId).first node ? [node['source'],node.text].join(':') : nil end |
#sourceId=(value) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/dor/datastreams/identity_metadata_ds.rb', line 43 def sourceId=(value) node = self.find_by_terms(:sourceId).first unless value.present? node.remove unless node.nil? nil else (source,val) = value.split(/:/,2) unless source.present? and value.present? raise ArgumentError, "Source ID must follow the format namespace:value" end node = ng_xml.root.add_child('<sourceId/>').first if node.nil? node['source'] = source node.content = val node end end |
#tags ⇒ Object
59 60 61 62 63 64 65 |
# File 'lib/dor/datastreams/identity_metadata_ds.rb', line 59 def () result=[] self.ng_xml.search('//tag').each do |node| result << node.content end result end |
#to_solr(solr_doc = Hash.new, *args) ⇒ Object
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/dor/datastreams/identity_metadata_ds.rb', line 83 def to_solr(solr_doc=Hash.new, *args) super(solr_doc, *args) if digital_object.respond_to?(:profile) digital_object.profile.each_pair do |property,value| add_solr_value(solr_doc, property.underscore, value, property =~ /Date/ ? :date : :string, [:searchable]) end end if sourceId.present? (name,id) = sourceId.split(/:/,2) add_solr_value(solr_doc, "dor_id", id, :string, [:searchable]) add_solr_value(solr_doc, "identifier", sourceId, :string, [:searchable]) add_solr_value(solr_doc, "source_id", sourceId, :string, [:searchable]) end otherId.compact.each { |qid| (name,id) = qid.split(/:/,2) add_solr_value(solr_doc, "dor_id", id, :string, [:searchable]) add_solr_value(solr_doc, "identifier", qid, :string, [:searchable]) add_solr_value(solr_doc, "#{name}_id", id, :string, [:searchable]) } self.find_by_terms(:tag).each { |tag| (top,rest) = tag.text.split(/:/,2) unless rest.nil? add_solr_value(solr_doc, "#{top.downcase.strip.gsub(/\s/,'_')}_tag", rest.strip, :string, [:searchable, :facetable]) end } solr_doc end |