Module: Dor::Governable
- Extended by:
- ActiveSupport::Concern
- Included in:
- AdminPolicyObject, BasicItem, Collection, Publishable, Set, WorkflowObject
- Defined in:
- lib/dor/models/governable.rb
Instance Method Summary collapse
- #add_collection(collection_or_druid) ⇒ Object
- #can_manage_content?(roles) ⇒ Boolean
- #can_manage_desc_metadata?(roles) ⇒ Boolean
- #can_manage_embargo?(roles) ⇒ Boolean
- #can_manage_item?(roles) ⇒ Boolean
- #can_manage_rights?(roles) ⇒ Boolean
- #can_manage_system_metadata?(roles) ⇒ Boolean
- #can_view_content?(roles) ⇒ Boolean
- #can_view_metadata?(roles) ⇒ Boolean
-
#default_workflow_lane ⇒ String
Returns the default lane_id from the item’s APO.
- #groups_which_manage_content ⇒ Object
- #groups_which_manage_desc_metadata ⇒ Object
- #groups_which_manage_embargo ⇒ Object
- #groups_which_manage_item ⇒ Object
- #groups_which_manage_rights ⇒ Object
- #groups_which_manage_system_metadata ⇒ Object
- #groups_which_view_content ⇒ Object
- #groups_which_view_metadata ⇒ Object
- #initiate_apo_workflow(name) ⇒ Object
- #intersect(arr1, arr2) ⇒ Object
-
#reapplyAdminPolicyObjectDefaults ⇒ Object
set the rights metadata datastream to the content of the APO’s default object rights.
- #remove_collection(collection_or_druid) ⇒ Object
- #reset_to_apo_default ⇒ Object
- #rights ⇒ Object
-
#set_read_rights(rights) ⇒ Object
slight misnomer: also sets discover rights!.
Instance Method Details
#add_collection(collection_or_druid) ⇒ Object
61 62 63 64 65 66 67 68 69 70 |
# File 'lib/dor/models/governable.rb', line 61 def add_collection(collection_or_druid) collection = case collection_or_druid when String Dor::Collection.find(collection_or_druid) when Dor::Collection collection_or_druid end self.collections << collection self.sets << collection end |
#can_manage_content?(roles) ⇒ Boolean
138 139 140 |
# File 'lib/dor/models/governable.rb', line 138 def can_manage_content? roles intersect roles, groups_which_manage_content end |
#can_manage_desc_metadata?(roles) ⇒ Boolean
132 133 134 |
# File 'lib/dor/models/governable.rb', line 132 def roles intersect roles, end |
#can_manage_embargo?(roles) ⇒ Boolean
144 145 146 |
# File 'lib/dor/models/governable.rb', line 144 def roles intersect roles, end |
#can_manage_item?(roles) ⇒ Boolean
129 130 131 |
# File 'lib/dor/models/governable.rb', line 129 def can_manage_item? roles intersect roles, groups_which_manage_item end |
#can_manage_rights?(roles) ⇒ Boolean
141 142 143 |
# File 'lib/dor/models/governable.rb', line 141 def can_manage_rights? roles intersect roles, groups_which_manage_rights end |
#can_manage_system_metadata?(roles) ⇒ Boolean
135 136 137 |
# File 'lib/dor/models/governable.rb', line 135 def roles intersect roles, end |
#can_view_content?(roles) ⇒ Boolean
147 148 149 |
# File 'lib/dor/models/governable.rb', line 147 def can_view_content? roles intersect roles, groups_which_view_content end |
#can_view_metadata?(roles) ⇒ Boolean
150 151 152 |
# File 'lib/dor/models/governable.rb', line 150 def roles intersect roles, end |
#default_workflow_lane ⇒ String
Returns the default lane_id from the item’s APO. Will return ‘default’ if the item does not have
and APO, or if the APO does not have a default_lane
18 19 20 21 22 23 24 25 26 |
# File 'lib/dor/models/governable.rb', line 18 def default_workflow_lane return 'default' if self.admin_policy_object.nil? # TODO log warning? admin_md = admin_policy_object.datastreams['administrativeMetadata'] return 'default' unless admin_md.respond_to? :default_workflow_lane lane = admin_md.default_workflow_lane return 'default' if lane.nil? || lane.strip == '' lane end |
#groups_which_manage_content ⇒ Object
111 112 113 |
# File 'lib/dor/models/governable.rb', line 111 def groups_which_manage_content ['dor-administrator', 'sdr-administrator', 'dor-apo-manager', 'dor-apo-depositor'] end |
#groups_which_manage_desc_metadata ⇒ Object
105 106 107 |
# File 'lib/dor/models/governable.rb', line 105 def ['dor-administrator', 'sdr-administrator', 'dor-apo-manager', 'dor-apo-depositor', 'dor-apo-metadata'] end |
#groups_which_manage_embargo ⇒ Object
117 118 119 |
# File 'lib/dor/models/governable.rb', line 117 def ['dor-administrator', 'sdr-administrator', 'dor-apo-manager', 'dor-apo-depositor'] end |
#groups_which_manage_item ⇒ Object
102 103 104 |
# File 'lib/dor/models/governable.rb', line 102 def groups_which_manage_item ['dor-administrator', 'sdr-administrator', 'dor-apo-manager', 'dor-apo-depositor'] end |
#groups_which_manage_rights ⇒ Object
114 115 116 |
# File 'lib/dor/models/governable.rb', line 114 def groups_which_manage_rights ['dor-administrator', 'sdr-administrator', 'dor-apo-manager', 'dor-apo-depositor'] end |
#groups_which_manage_system_metadata ⇒ Object
108 109 110 |
# File 'lib/dor/models/governable.rb', line 108 def ['dor-administrator', 'sdr-administrator', 'dor-apo-manager', 'dor-apo-depositor'] end |
#groups_which_view_content ⇒ Object
120 121 122 |
# File 'lib/dor/models/governable.rb', line 120 def groups_which_view_content ['dor-administrator', 'sdr-administrator', 'dor-apo-manager', 'dor-apo-depositor', 'dor-viewer', 'sdr-viewer'] end |
#groups_which_view_metadata ⇒ Object
123 124 125 |
# File 'lib/dor/models/governable.rb', line 123 def ['dor-administrator', 'sdr-administrator', 'dor-apo-manager', 'dor-apo-depositor', 'dor-viewer', 'sdr-viewer'] end |
#initiate_apo_workflow(name) ⇒ Object
11 12 13 |
# File 'lib/dor/models/governable.rb', line 11 def initiate_apo_workflow(name) self.initialize_workflow(name, 'dor', !self.new_object?) end |
#intersect(arr1, arr2) ⇒ Object
126 127 128 |
# File 'lib/dor/models/governable.rb', line 126 def intersect arr1, arr2 return (arr1 & arr2).length > 0 end |
#reapplyAdminPolicyObjectDefaults ⇒ Object
set the rights metadata datastream to the content of the APO’s default object rights
85 86 87 |
# File 'lib/dor/models/governable.rb', line 85 def reapplyAdminPolicyObjectDefaults rightsMetadata.content=admin_policy_object.datastreams['defaultObjectRights'].content end |
#remove_collection(collection_or_druid) ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/dor/models/governable.rb', line 72 def remove_collection(collection_or_druid) collection = case collection_or_druid when String Dor::Collection.find(collection_or_druid) when Dor::Collection collection_or_druid end self.collections.delete(collection) self.sets.delete(collection) end |
#reset_to_apo_default ⇒ Object
28 29 30 31 |
# File 'lib/dor/models/governable.rb', line 28 def reset_to_apo_default() = self.rightsMetadata .content = admin_policy_object.rightsMetadata.ng_xml end |
#rights ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/dor/models/governable.rb', line 88 def rights return nil unless self.respond_to? :rightsMetadata xml = self.rightsMetadata.ng_xml return nil if xml.search('//rightsMetadata').length != 1 # ORLY? if xml.search('//rightsMetadata/access[@type=\'read\']/machine/group').length == 1 'Stanford' elsif xml.search('//rightsMetadata/access[@type=\'read\']/machine/world').length == 1 'World' elsif xml.search('//rightsMetadata/access[@type=\'discover\']/machine/none').length == 1 'Dark' else 'None' end end |
#set_read_rights(rights) ⇒ Object
slight misnomer: also sets discover rights!
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/dor/models/governable.rb', line 34 def set_read_rights(rights) raise(ArgumentError, "Argument '#{rights}' is not a recognized value") unless ['world','stanford','none','dark'].include? rights rights_xml = self.rightsMetadata.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' 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 end |