class Dor::EmbargoService
Sets up and removes embargos on an object This assumes the object has embargoMetadata, rightsMetadata, and events datastreams
Attributes
obj[R]
Public Class Methods
new(obj)
click to toggle source
# File lib/dor/services/embargo_service.rb, line 7 def initialize(obj) @obj = obj end
Public Instance Methods
release(release_agent)
click to toggle source
Lift the embargo from the object Sets embargo status to released in embargoMetadata Modifies rightsMetadata to remove embargoReleaseDate and updates/adds access from embargoMetadata/releaseAccess @param [String] release_agent name of the person, application or thing that released embargo @note The caller should save the object to fedora to commit the changes
# File lib/dor/services/embargo_service.rb, line 16 def release(release_agent) # Set status to released embargoMetadata.status = 'released' # Remove all read acces nodes rights_xml = rightsMetadata.ng_xml rightsMetadata.ng_xml_will_change! rights_xml.xpath("//rightsMetadata/access[@type='read']").each(&:remove) # Replace rights <access> nodes with those from embargoMetadta release_access = embargoMetadata.release_access_node release_access.xpath('//releaseAccess/access').each do |new_access| access_sibling = rights_xml.at_xpath('//rightsMetadata/access[last()]') if access_sibling access_sibling.add_next_sibling(new_access.clone) else rights_xml.root.add_child(new_access.clone) end end events.add_event('embargo', release_agent, 'Embargo released') end
release_20_pct_vis(release_agent)
click to toggle source
# File lib/dor/services/embargo_service.rb, line 40 def release_20_pct_vis(release_agent) # Set status to released embargoMetadata.twenty_pct_status = 'released' # Remove all read acces nodes rights_xml = rightsMetadata.ng_xml rightsMetadata.ng_xml_will_change! rights_xml.xpath("//rightsMetadata/access[@type='read']").each(&:remove) # Replace rights <access> nodes with 1 machine/world node access_sibling = rights_xml.at_xpath('//rightsMetadata/access[last()]') if access_sibling access_sibling.add_next_sibling(world_doc.root.clone) else rights_xml.root.add_child(world_doc.root.clone) end events.add_event('embargo', release_agent, '20% Visibility Embargo released') end
update(new_date)
click to toggle source
# File lib/dor/services/embargo_service.rb, line 61 def update(new_date) raise ArgumentError, 'You cannot change the embargo date of an item that is not embargoed.' if embargoMetadata.status != 'embargoed' raise ArgumentError, 'You cannot set the embargo date to a past date.' if new_date.past? time = new_date.beginning_of_day.utc rightsMetadata.embargo_release_date = time embargoMetadata.release_date = time obj.save! end
Private Instance Methods
world_doc()
click to toggle source
# File lib/dor/services/embargo_service.rb, line 77 def world_doc Nokogiri::XML::Builder.new do |xml| xml.access(type: 'read') do xml.machine { xml.world } end end.doc end