Class: Dor::RightsMetadataDS

Inherits:
ActiveFedora::OmDatastream
  • Object
show all
Defined in:
lib/dor/datastreams/rights_metadata_ds.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#dra_objectObject



60
61
62
# File 'lib/dor/datastreams/rights_metadata_ds.rb', line 60

def dra_object
  @dra_object ||= Dor::RightsAuth.parse(ng_xml, true)
end

Class Method Details

.xml_templateObject



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/dor/datastreams/rights_metadata_ds.rb', line 33

def self.xml_template
  Nokogiri::XML::Builder.new do |xml|
    xml. {
      xml.access(:type => 'discover') {
        xml.machine { xml.none }
      }
      xml.access(:type => 'read') {
        xml.machine { xml.none }   # dark default
      }
      xml.use {
        xml.human(:type => 'useAndReproduction')
        xml.human(:type => 'creativeCommons')
        xml.machine(:type => 'creativeCommons', :uri => '')
        xml.human(:type => 'openDataCommons')
        xml.machine(:type => 'openDataCommons', :uri => '')
      }
      xml.copyright { xml.human }
    }
  end.doc
end

Instance Method Details

#content=(xml) ⇒ Object

just a wrapper to invalidate @dra_object



55
56
57
58
# File 'lib/dor/datastreams/rights_metadata_ds.rb', line 55

def content=(xml)
  @dra_object = nil
  super
end

#set_read_rights(rights) ⇒ Object

Moved from Governable slight misnomer: also sets discover rights! TODO: convert xpath reads to dra_object calls

Parameters:

  • rights (string)

    archetypical rights to assign: ‘world’, ‘stanford’, ‘none’ or ‘dark’

Raises:

  • (ArgumentError)


68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/dor/datastreams/rights_metadata_ds.rb', line 68

def set_read_rights(rights)
  raise(ArgumentError, "Argument '#{rights}' is not a recognized value") unless %w(world stanford none dark).include? rights
  rights_xml = ng_xml
  if rights_xml.search('//rightsMetadata/access[@type=\'read\']').length == 0
    raise('The rights metadata stream doesnt contain an entry for machine read permissions. Consider populating it from the APO before trying to change it.')
  end
  label = rights == 'dark' ? 'none' : 'world'
  @dra_object = nil # until TODO complete, we'll expect to have to reparse after modification
  rights_xml.search('//rightsMetadata/access[@type=\'discover\']/machine').each do |node|
    node.children.remove
    node.add_child Nokogiri::XML::Node.new(label, rights_xml)
  end
  rights_xml.search('//rightsMetadata/access[@type=\'read\']').each do |node|
    node.children.remove
    machine_node = Nokogiri::XML::Node.new('machine', rights_xml)
    node.add_child(machine_node)
    if rights == 'world'
      machine_node.add_child Nokogiri::XML::Node.new(rights, rights_xml)
    elsif rights == 'stanford'
      group_node = Nokogiri::XML::Node.new('group', rights_xml)
      group_node.content = 'Stanford'
      machine_node.add_child(group_node)
    else  # we know it is none or dark by the argument filter (first line)
      machine_node.add_child Nokogiri::XML::Node.new('none', rights_xml)
    end
  end
  self.content = rights_xml.to_xml
  content_will_change!
end

#to_solr(solr_doc = {}, *args) ⇒ Object



98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/dor/datastreams/rights_metadata_ds.rb', line 98

def to_solr(solr_doc = {}, *args)
  super(solr_doc, *args)
  dra = dra_object
  solr_doc['rights_primary_ssi'] = dra.index_elements[:primary]
  solr_doc['rights_errors_ssim'] = dra.index_elements[:errors] if dra.index_elements[:errors].size > 0
  solr_doc['rights_characteristics_ssim'] = dra.index_elements[:terms] if dra.index_elements[:terms].size > 0
  # suppress empties
  %w(use_statement_ssim copyright_ssim).each do |key|
    solr_doc[key] = solr_doc[key].reject { |val| val.nil? || val == '' }.flatten unless solr_doc[key].nil?
  end
  add_solr_value(solr_doc, 'use_license_machine', use_license, :string, [:stored_sortable])

  solr_doc
end

#use_licenseObject



113
114
115
116
117
# File 'lib/dor/datastreams/rights_metadata_ds.rb', line 113

def use_license
  return creative_commons unless ['', nil].include?(creative_commons)
  return open_data_commons unless ['', nil].include?(open_data_commons)
  ''
end