class Dor::RoleMetadataDS

Public Class Methods

xml_template() click to toggle source
# File lib/dor/datastreams/role_metadata_ds.rb, line 31
def self.xml_template
  Nokogiri::XML::Builder.new do |xml|
    xml.roleMetadata {}
  end.doc
end

Public Instance Methods

add_roleplayer(role, entity, type = :workgroup) click to toggle source

Adds a person or group to a role in the APO role metadata datastream

@param role [String] the role the group or person will be filed under, ex. dor-apo-manager @param entity [String] the name of the person or group, ex dlss:developers or sunetid:someone @param type [Symbol] :workgroup for a group or :person for a person

# File lib/dor/datastreams/role_metadata_ds.rb, line 53
def add_roleplayer(role, entity, type = :workgroup)
  xml = ng_xml
  ng_xml_will_change!
  group = type == :workgroup ? 'group' : 'person'
  nodes = xml.search('/roleMetadata/role[@type=\'' + role + '\']')
  if nodes.length > 0
    group_node = Nokogiri::XML::Node.new(group, xml)
    id_node = Nokogiri::XML::Node.new('identifier', xml)
    group_node.add_child(id_node)
    id_node.content = entity
    id_node['type'] = type.to_s
    nodes.first.add_child(group_node)
  else
    node = Nokogiri::XML::Node.new('role', xml)
    node['type'] = role
    group_node = Nokogiri::XML::Node.new(group, xml)
    node.add_child group_node
    id_node = Nokogiri::XML::Node.new('identifier', xml)
    group_node.add_child(id_node)
    id_node.content = entity
    id_node['type'] = type.to_s
    xml.search('/roleMetadata').first.add_child(node)
  end
end
prefix() click to toggle source

maintain AF < 8 indexing behavior

# File lib/dor/datastreams/role_metadata_ds.rb, line 97
def prefix
  ''
end
purge_roles() click to toggle source

remove all people groups and roles from the APO role metadata datastream

# File lib/dor/datastreams/role_metadata_ds.rb, line 79
def purge_roles
  ng_xml.search('/roleMetadata/role').each(&:remove)
end
roles() click to toggle source

Get all roles defined in the role metadata, and the people or groups in those roles. Groups are prefixed with 'workgroup:' @return [Hash] role => ['person','group'] ex. {“dor-apo-manager” => [“workgroup:dlss:developers”, “sunetid:lmcrae”]

# File lib/dor/datastreams/role_metadata_ds.rb, line 85
def roles
  {}.tap do |roles|
    ng_xml.search('/roleMetadata/role').each do |role|
      roles[role['type']] = []
      role.search('identifier').each do |entity|
        roles[role['type']] << entity['type'] + ':' + entity.text
      end
    end
  end
end
to_solr(solr_doc = {}, *_args) click to toggle source
# File lib/dor/datastreams/role_metadata_ds.rb, line 37
def to_solr(solr_doc = {}, *_args)
  find_by_xpath('/roleMetadata/role/*').each do |actor|
    role_type = actor.parent['type']
    val = [actor.at_xpath('identifier/@type'), actor.at_xpath('identifier/text()')].join ':'
    add_solr_value(solr_doc, "apo_role_#{actor.name}_#{role_type}", val, :string, [:symbol])
    add_solr_value(solr_doc, "apo_role_#{role_type}", val, :string, [:symbol])
    add_solr_value(solr_doc, 'apo_register_permissions', val, :string, %i[symbol stored_searchable]) if %w[dor-apo-manager dor-apo-depositor].include? role_type
  end
  solr_doc
end