Class: Dor::RoleMetadataDS
- Inherits:
-
ActiveFedora::OmDatastream
- Object
- ActiveFedora::OmDatastream
- Dor::RoleMetadataDS
- Includes:
- SolrDocHelper
- Defined in:
- lib/dor/datastreams/role_metadata_ds.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#add_roleplayer(role, entity, type = :workgroup) ⇒ Object
Adds a person or group to a role in the APO role metadata datastream.
-
#prefix ⇒ Object
maintain AF < 8 indexing behavior.
-
#purge_roles ⇒ Object
remove all people groups and roles from the APO role metadata datastream.
-
#roles ⇒ Hash
Get all roles defined in the role metadata, and the people or groups in those roles.
- #to_solr(solr_doc = {}, *_args) ⇒ Object
Methods included from SolrDocHelper
Class Method Details
.xml_template ⇒ Object
31 32 33 34 35 |
# 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 |
Instance Method Details
#add_roleplayer(role, entity, type = :workgroup) ⇒ Object
Adds a person or group to a role in the APO role metadata datastream
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# 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 ⇒ Object
maintain AF < 8 indexing behavior
97 98 99 |
# File 'lib/dor/datastreams/role_metadata_ds.rb', line 97 def prefix '' end |
#purge_roles ⇒ Object
remove all people groups and roles from the APO role metadata datastream
79 80 81 |
# File 'lib/dor/datastreams/role_metadata_ds.rb', line 79 def purge_roles ng_xml.search('/roleMetadata/role').each(&:remove) end |
#roles ⇒ Hash
Get all roles defined in the role metadata, and the people or groups in those roles. Groups are prefixed with ‘workgroup:’
85 86 87 88 89 90 91 92 93 94 |
# 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) ⇒ Object
37 38 39 40 41 42 43 44 45 46 |
# 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 ['dor-apo-manager', 'dor-apo-depositor'].include? role_type end solr_doc end |