Module: Dor::Describable

Extended by:
ActiveSupport::Concern, Deprecation
Included in:
Abstract
Defined in:
lib/dor/models/concerns/describable.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.get_collection_title(obj) ⇒ Object



74
75
76
# File 'lib/dor/models/concerns/describable.rb', line 74

def self.get_collection_title(obj)
  obj.full_title
end

Instance Method Details

#build_descMetadata_datastream(ds) ⇒ Object



33
34
35
36
37
38
39
40
41
# File 'lib/dor/models/concerns/describable.rb', line 33

def (ds)
  content = 
  return nil if content.nil?

  ds.dsLabel = 'Descriptive Metadata'
  ds.ng_xml = Nokogiri::XML(content)
  ds.ng_xml.normalize_text!
  ds.content = ds.ng_xml.to_xml
end

#fetch_descMetadata_datastreamObject



27
28
29
30
31
# File 'lib/dor/models/concerns/describable.rb', line 27

def 
  candidates = datastreams['identityMetadata'].otherId.collect(&:to_s)
   = Dor::MetadataService.resolvable(candidates).first
  .nil? ? nil : Dor::MetadataService.fetch(.to_s)
end

#full_titleObject



78
79
80
# File 'lib/dor/models/concerns/describable.rb', line 78

def full_title
  stanford_mods.sw_title_display
end

#generate_dublin_core(include_collection_as_related_item: true) ⇒ Nokogiri::XML::Document

Generates Dublin Core from the MODS in the descMetadata datastream using the LoC mods2dc stylesheet

Should not be used for the Fedora DC datastream

Returns:

Raises:

  • (CrosswalkError)

    Raises an Exception if the generated DC is empty or has no children



47
48
49
# File 'lib/dor/models/concerns/describable.rb', line 47

def generate_dublin_core(include_collection_as_related_item: true)
  DublinCoreService.new(self, include_collection_as_related_item: include_collection_as_related_item).ng_xml
end

#generate_public_desc_md(**options) ⇒ String

Returns Public descriptive medatada XML.

Returns:

  • (String)

    Public descriptive medatada XML



53
54
55
# File 'lib/dor/models/concerns/describable.rb', line 53

def generate_public_desc_md(**options)
  PublicDescMetadataService.new(self).to_xml(**options)
end

#set_desc_metadata_using_label(force = false) ⇒ String

Returns descMetadata.content XML.

Parameters:

  • force (Boolean) (defaults to: false)

    Overwrite existing XML

Returns:

  • (String)

    descMetadata.content XML



60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/dor/models/concerns/describable.rb', line 60

def (force = false)
  raise 'Cannot proceed, there is already content in the descriptive metadata datastream: ' + .content.to_s unless force || .new?

  label = self.label
  builder = Nokogiri::XML::Builder.new do |xml|
    xml.mods(Dor::DescMetadataDS::MODS_HEADER_CONFIG) do
      xml.titleInfo do
        xml.title label
      end
    end
  end
  .content = builder.to_xml
end

#stanford_mods(content = nil, ns_aware = true) ⇒ Object

intended for read-access, “as SearchWorks would see it”, mostly for to_solr()

Parameters:

  • content (Nokogiri::XML::Document) (defaults to: nil)

    Nokogiri descMetadata document (overriding internal data)

  • ns_aware (boolean) (defaults to: true)

    namespace awareness toggle for from_nk_node()



18
19
20
21
22
23
24
25
# File 'lib/dor/models/concerns/describable.rb', line 18

def stanford_mods(content = nil, ns_aware = true)
  @stanford_mods ||= begin
    m = Stanford::Mods::Record.new
    desc = content.nil? ? .ng_xml : content
    m.from_nk_node(desc.root, ns_aware)
    m
  end
end