Module: Dor::Publishable
- Extended by:
- ActiveSupport::Concern, Deprecation
- Defined in:
- lib/dor/models/concerns/publishable.rb
Instance Method Summary collapse
-
#encoded_thumb ⇒ String
Return a URI encoded version of the thumb image for use by indexers (leaving the extension of the filename).
-
#public_relationships ⇒ Nokogiri::XML
strips away the relationships that should not be shown in public desc metadata.
-
#public_xml ⇒ xml
Generate the public .xml for a PURL page.
-
#publish_delete_on_success ⇒ Object
When publishing a PURL, we notify purl-fetcher of changes.
-
#publish_metadata ⇒ Object
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.
-
#publish_metadata_remotely ⇒ Object
Call dor services app to have it publish the metadata.
-
#publish_notify_on_success ⇒ Object
When publishing a PURL, we notify purl-fetcher of changes.
-
#thumb ⇒ String
Compute the thumbnail for this object following the rules at consul.stanford.edu/display/chimera/The+Rules+of+Thumb Used by PublicXmlService.
-
#thumb_url ⇒ String
Return a full qualified thumbnail image URL if the thumb is computable.
Instance Method Details
#encoded_thumb ⇒ String
Return a URI encoded version of the thumb image for use by indexers (leaving the extension of the filename)
22 23 24 25 26 27 28 29 |
# File 'lib/dor/models/concerns/publishable.rb', line 22 def encoded_thumb thumb_image = thumb # store the result locally, so we don't have to compute each time we use it below return unless thumb_image thumb_druid = thumb_image.split('/').first # the druid (before the first slash) thumb_filename = thumb_image.split(/#{pid_regex}[\/]/).last # everything after the druid "#{thumb_druid}%2F#{ERB::Util.url_encode(thumb_filename)}" end |
#public_relationships ⇒ Nokogiri::XML
strips away the relationships that should not be shown in public desc metadata
44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/dor/models/concerns/publishable.rb', line 44 def public_relationships include_elements = ['fedora:isMemberOf', 'fedora:isMemberOfCollection', 'fedora:isConstituentOf'] rels_doc = Nokogiri::XML(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_xml ⇒ xml
Generate the public .xml for a PURL page.
58 59 60 |
# File 'lib/dor/models/concerns/publishable.rb', line 58 def public_xml PublicXmlService.new(self).to_xml end |
#publish_delete_on_success ⇒ Object
When publishing a PURL, we notify purl-fetcher of changes.
116 117 118 119 120 121 122 123 |
# File 'lib/dor/models/concerns/publishable.rb', line 116 def publish_delete_on_success return unless Dor::Config.purl_services.url id = pid.gsub(/^druid:/, '') purl_services = Dor::Config.purl_services.rest_client purl_services["purls/#{id}"].delete end |
#publish_metadata ⇒ Object
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
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/dor/models/concerns/publishable.rb', line 64 def rights = datastreams['rightsMetadata'].ng_xml.clone.remove_namespaces! if rights.at_xpath("//rightsMetadata/access[@type='discover']/machine/world") dc_xml = generate_dublin_core.to_xml { |config| config.no_declaration } DigitalStacksService.transfer_to_document_store(pid, dc_xml, 'dc') %w(identityMetadata contentMetadata rightsMetadata).each do |stream| DigitalStacksService.transfer_to_document_store(pid, datastreams[stream].content.to_s, stream) if datastreams[stream] end DigitalStacksService.transfer_to_document_store(pid, public_xml, 'public') DigitalStacksService.transfer_to_document_store(pid, generate_public_desc_md, 'mods') publish_notify_on_success else # Clear out the document cache for this item DigitalStacksService.prune_purl_dir pid publish_delete_on_success end end |
#publish_metadata_remotely ⇒ Object
Call dor services app to have it publish the metadata
83 84 85 86 87 88 |
# File 'lib/dor/models/concerns/publishable.rb', line 83 def dor_services = Dor::Config.dor_services.rest_client endpoint = dor_services["v1/objects/#{pid}/publish"] endpoint.post '' endpoint.url end |
#publish_notify_on_success ⇒ Object
When publishing a PURL, we notify purl-fetcher of changes. If the purl service isn’t configured, instead we drop a ‘aa11bb2222` file into the `local_recent_changes` folder to notify other applications watching the filesystem (i.e., purl-fetcher). We also remove any .deletes entry that may have left over from a previous removal
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/dor/models/concerns/publishable.rb', line 95 def publish_notify_on_success id = pid.gsub(/^druid:/, '') if Dor::Config.purl_services.url purl_services = Dor::Config.purl_services.rest_client purl_services["purls/#{id}"].post '' else local_recent_changes = Config.stacks.local_recent_changes raise ArgumentError, "Missing local_recent_changes directory: #{local_recent_changes}" unless File.directory?(local_recent_changes) FileUtils.touch(File.join(local_recent_changes, id)) begin DruidTools::Druid.new(id, Dor::Config.stacks.local_document_cache_root).deletes_delete_record rescue Errno::EACCES Dor.logger.warn "Access denied while trying to remove .deletes file for druid:#{id}" end end end |
#thumb ⇒ String
Compute the thumbnail for this object following the rules at consul.stanford.edu/display/chimera/The+Rules+of+Thumb Used by PublicXmlService
15 16 17 |
# File 'lib/dor/models/concerns/publishable.rb', line 15 def thumb ThumbnailService.new(self).thumb end |
#thumb_url ⇒ String
Return a full qualified thumbnail image URL if the thumb is computable
34 35 36 37 38 39 |
# File 'lib/dor/models/concerns/publishable.rb', line 34 def thumb_url return unless encoded_thumb thumb_basename = File.basename(encoded_thumb, File.extname(encoded_thumb)) # strip the extension for URL generation "https://#{Dor::Config.stacks.host}/image/iiif/#{thumb_basename}/full/!400,400/0/default.jpg" end |