Module: Dor::Publishable

Extended by:
ActiveSupport::Concern
Includes:
Describable, Governable, Identifiable, Itemizable
Included in:
BasicItem, Collection, Embargoable, Set
Defined in:
lib/dor/models/publishable.rb

Constant Summary

Constants included from Itemizable

Itemizable::DIFF_FILENAME, Itemizable::DIFF_QUERY

Constants included from Describable

Describable::DESC_MD_FORMATS

Instance Method Summary collapse

Methods included from Itemizable

#clear_diff_cache, #get_content_diff

Methods included from Describable

#add_access_conditions, #add_collection_reference, #add_identifier, #build_descMetadata_datastream, #delete_identifier, #fetch_descMetadata_datastream, #generate_dublin_core, #generate_public_desc_md, get_collection_title, #metadata_format, #metadata_namespace, #set_desc_metadata_using_label, #to_solr, #update_title

Methods included from Governable

#add_collection, #can_manage_content?, #can_manage_desc_metadata?, #can_manage_embargo?, #can_manage_item?, #can_manage_rights?, #can_manage_system_metadata?, #can_view_content?, #can_view_metadata?, #default_workflow_lane, #groups_which_manage_content, #groups_which_manage_desc_metadata, #groups_which_manage_embargo, #groups_which_manage_item, #groups_which_manage_rights, #groups_which_manage_system_metadata, #groups_which_view_content, #groups_which_view_metadata, #initiate_apo_workflow, #intersect, #reapplyAdminPolicyObjectDefaults, #remove_collection, #reset_to_apo_default, #rights, #set_read_rights

Methods included from Identifiable

#add_other_Id, #add_tag, #content_type_tag, #initialize, #method_missing, #normalize_tag, #normalize_tag_arr, #remove_other_Id, #remove_tag, #set_source_id, #split_tag_to_arr, #tags, #to_solr, #update_other_Id, #update_tag, #validate_and_normalize_tag

Methods included from Upgradable

add_upgrade_callback, included, run_upgrade_callbacks, #upgrade!

Methods included from Eventable

#add_event

Methods included from SolrDocHelper

#add_solr_value

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Dor::Identifiable

Instance Method Details

#build_rightsMetadata_datastream(ds) ⇒ Object


15
16
17
18
19
20
# File 'lib/dor/models/publishable.rb', line 15

def (ds)
  content_ds = self.admin_policy_object.datastreams['defaultObjectRights']
  ds.dsLabel = 'Rights Metadata'
  ds.ng_xml = content_ds.ng_xml.clone
  ds.content = ds.ng_xml.to_xml
end

#public_relationshipsObject


22
23
24
25
26
27
28
29
30
31
32
# File 'lib/dor/models/publishable.rb', line 22

def public_relationships
  include_elements = ['fedora:isMemberOf','fedora:isMemberOfCollection']
  rels_doc = Nokogiri::XML(self.datastreams['RELS-EXT'].content)
  rels_doc.xpath('/rdf:RDF/rdf:Description/*', { 'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#' }).each do |rel|
    unless include_elements.include?([rel.namespace.prefix,rel.name].join(':'))
      rel.next_sibling.remove if rel.next_sibling.content.strip.empty?
      rel.remove
    end
  end
  rels_doc
end

#public_xmlObject


34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/dor/models/publishable.rb', line 34

def public_xml
  pub = Nokogiri::XML("<publicObject/>").root
  pub['id'] = pid
  pub['published'] = Time.now.xmlschema
  pub.add_child(self.datastreams['identityMetadata'].ng_xml.root.clone)
  pub.add_child(self.datastreams['contentMetadata'].public_xml.root.clone)
  pub.add_child(self.datastreams['rightsMetadata'].ng_xml.root.clone)
  rels = public_relationships.root
  pub.add_child(rels.clone) unless rels.nil? # TODO: Should never be nil in practice; working around an ActiveFedora quirk for testing
  pub.add_child(self.generate_dublin_core.root.clone)
  new_pub = Nokogiri::XML(pub.to_xml) { |x| x.noblanks }
  new_pub.encoding = 'UTF-8'
  new_pub.to_xml
end

#publish_metadataObject

Copies this object's public_xml to the Purl document cache if it is world discoverable

otherwise, it prunes the object's metadata from the document cache

51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/dor/models/publishable.rb', line 51

def 
  rights = datastreams['rightsMetadata'].ng_xml.clone.remove_namespaces!
  if(rights.at_xpath("//rightsMetadata/access[@type='discover']/machine/world"))
    dc_xml = self.generate_dublin_core.to_xml {|config| config.no_declaration}
    DigitalStacksService.transfer_to_document_store(pid, dc_xml, 'dc')
    DigitalStacksService.transfer_to_document_store(pid, self.datastreams['identityMetadata'].to_xml, 'identityMetadata')
    DigitalStacksService.transfer_to_document_store(pid, self.datastreams['contentMetadata'].to_xml, 'contentMetadata')
    DigitalStacksService.transfer_to_document_store(pid, self.datastreams['rightsMetadata'].to_xml, 'rightsMetadata')
    DigitalStacksService.transfer_to_document_store(pid, public_xml, 'public')
    if self. == 'mods'
      DigitalStacksService.transfer_to_document_store(pid, self.generate_public_desc_md, 'mods')
    end
  else
    # Clear out the document cache for this item
    DigitalStacksService.prune_purl_dir pid
  end
end

#publish_metadata_remotelyObject

call the dor services app to have it publish the metadata


69
70
71
72
73
# File 'lib/dor/models/publishable.rb', line 69

def 
  dor_services = RestClient::Resource.new(Config.dor_services.url+"/v1/objects/#{pid}/publish")
  dor_services.post ''
  dor_services.url
end