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