hydra-head 4.0.3 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. data/.gitignore +1 -0
  2. data/HISTORY.textile +17 -2
  3. data/app/assets/stylesheets/hydra/html_refactor.css +3 -30
  4. data/app/assets/stylesheets/hydra/styles.css +6 -64
  5. data/app/controllers/downloads_controller.rb +1 -1
  6. data/app/controllers/hydra/assets_controller.rb +10 -1
  7. data/app/controllers/hydra/contributors_controller.rb +15 -1
  8. data/app/controllers/hydra/file_assets_controller.rb +1 -1
  9. data/app/controllers/hydra/permissions_controller.rb +14 -0
  10. data/app/helpers/hydra/article_metadata_helper_behavior.rb +14 -1
  11. data/app/helpers/hydra/downloads_helper_behavior.rb +6 -0
  12. data/app/helpers/hydra/facets_helper_behavior.rb +7 -0
  13. data/app/helpers/hydra/generic_content_objects_helper_behavior.rb +6 -0
  14. data/app/helpers/hydra/hydra_assets_helper_behavior.rb +10 -0
  15. data/app/helpers/hydra/hydra_fedora_metadata_helper_behavior.rb +31 -0
  16. data/app/helpers/hydra/hydra_helper_behavior.rb +18 -7
  17. data/app/helpers/hydra/hydra_uploader_helper_behavior.rb +5 -0
  18. data/app/helpers/hydra/inline_editable_metadata_helper_behavior.rb +6 -0
  19. data/app/helpers/hydra/javascript_includes_helper_behavior.rb +7 -0
  20. data/app/helpers/hydra/personalization_helper_behavior.rb +5 -0
  21. data/app/helpers/hydra/release_process_helper_behavior.rb +5 -0
  22. data/app/models/generic_content.rb +3 -0
  23. data/app/models/generic_image.rb +3 -0
  24. data/app/models/superuser.rb +4 -2
  25. data/app/models/user_attribute.rb +7 -2
  26. data/app/views/_add_assets_links.html.erb +4 -4
  27. data/app/views/catalog/_index_partials/_default.html.erb +2 -2
  28. data/app/views/catalog/show.html.erb +1 -1
  29. data/app/views/generic_contents/_index.html.erb +2 -2
  30. data/app/views/generic_images/_edit.html.erb +1 -1
  31. data/app/views/generic_images/_index.html.erb +2 -2
  32. data/app/views/hydra/file_assets/_file_assets_form.html.erb +1 -1
  33. data/app/views/hydra/file_assets/_index.html.erb +2 -2
  34. data/app/views/hydra/file_assets/_result.html.erb +1 -1
  35. data/app/views/layouts/hydra-head.html.erb +4 -1
  36. data/app/views/mods_assets/_index_list.html.erb +1 -1
  37. data/app/views/mods_assets/_index_table.html.erb +2 -2
  38. data/app/views/mods_assets/_show.html.erb +1 -1
  39. data/app/views/mods_assets/_show_file_assets.html.erb +1 -1
  40. data/config/jetty.yml +1 -1
  41. data/config/locales/hydra.en.yml +7 -0
  42. data/config/solr.yml +1 -1
  43. data/config/solr_mappings.yml +2 -2
  44. data/hydra-head.gemspec +5 -4
  45. data/lib/generators/hydra/head_generator.rb +6 -5
  46. data/lib/generators/hydra/templates/config/fedora.yml +1 -1
  47. data/lib/generators/hydra/templates/config/solr.yml +1 -1
  48. data/lib/hydra-head/version.rb +1 -1
  49. data/lib/hydra.rb +13 -11
  50. data/lib/hydra/assets.rb +5 -135
  51. data/lib/hydra/catalog.rb +6 -44
  52. data/lib/hydra/controller.rb +10 -27
  53. data/lib/hydra/controller/assets_controller_behavior.rb +142 -0
  54. data/lib/hydra/controller/catalog_controller_behavior.rb +56 -0
  55. data/lib/hydra/controller/controller_behavior.rb +59 -0
  56. data/lib/hydra/controller/file_assets_behavior.rb +142 -0
  57. data/lib/hydra/controller/repository_controller_behavior.rb +119 -0
  58. data/lib/hydra/controller/upload_behavior.rb +139 -0
  59. data/lib/hydra/file_assets.rb +3 -138
  60. data/lib/hydra/file_assets_helper.rb +6 -133
  61. data/lib/hydra/generic_content.rb +15 -0
  62. data/lib/hydra/generic_image.rb +10 -0
  63. data/lib/hydra/global_configurable.rb +46 -0
  64. data/lib/hydra/model_methods.rb +3 -3
  65. data/lib/hydra/model_mixins.rb +1 -1
  66. data/lib/hydra/model_mixins/solr_document_extension.rb +24 -0
  67. data/lib/hydra/repository_controller.rb +4 -95
  68. data/lib/hydra/ui/controller.rb +1 -2
  69. data/lib/hydra/user.rb +13 -1
  70. data/lib/railties/hydra-fixtures.rake +1 -1
  71. data/tasks/hydra-head.rake +2 -0
  72. data/{app/models → test_support/etc}/common_metadata_asset.rb +1 -2
  73. data/test_support/features/mods_asset_show.feature +1 -1
  74. data/test_support/features/support/env.rb +2 -0
  75. data/test_support/features/support/paths.rb +2 -0
  76. data/test_support/spec/controllers/catalog_controller_spec.rb +8 -0
  77. data/test_support/spec/controllers/catalog_controller_viewing_context_spec.rb +10 -1
  78. data/test_support/spec/controllers/catalog_valid_html_spec.rb +8 -0
  79. data/test_support/spec/controllers/contributors_controller_spec.rb +10 -0
  80. data/test_support/spec/controllers/file_assets_controller_spec.rb +15 -3
  81. data/test_support/spec/controllers/hydra-assets_controller_spec.rb +11 -1
  82. data/test_support/spec/controllers/hydra_controller_spec.rb +15 -4
  83. data/test_support/spec/controllers/permissions_controller_spec.rb +8 -0
  84. data/test_support/spec/helpers/access_controls_enforcement_spec.rb +1 -2
  85. data/test_support/spec/helpers/file_assets_helper_spec.rb +1 -1
  86. data/test_support/spec/helpers/generic_content_objects_helper_spec.rb +10 -1
  87. data/test_support/spec/helpers/hydra-repository_controller_spec.rb +1 -1
  88. data/test_support/spec/helpers/hydra_assets_helper_spec.rb +8 -0
  89. data/test_support/spec/helpers/hydra_fedora_metadata_helper_spec.rb +11 -0
  90. data/test_support/spec/helpers/hydra_helper_spec.rb +18 -0
  91. data/test_support/spec/helpers/hydra_model_methods_spec.rb +0 -12
  92. data/test_support/spec/helpers/hydra_uploader_helper_spec.rb +8 -0
  93. data/test_support/spec/helpers/javascript_includes_helper_spec.rb +9 -1
  94. data/test_support/spec/lib/catalog_spec.rb +10 -3
  95. data/test_support/spec/lib/global_configurable_spec.rb +98 -0
  96. data/test_support/spec/lib/model_methods_spec.rb +29 -0
  97. data/test_support/spec/models/generic_content_spec.rb +11 -0
  98. data/test_support/spec/models/generic_image_spec.rb +15 -0
  99. data/test_support/spec/models/user_spec.rb +25 -0
  100. metadata +39 -37
  101. data/app/models/ability.rb +0 -5
  102. data/app/models/hydra/ability.rb +0 -137
  103. data/app/models/hydra/datastream/common_mods_index_methods.rb +0 -47
  104. data/app/models/hydra/datastream/mods_article.rb +0 -530
  105. data/app/models/hydra/datastream/mods_dataset.rb +0 -173
  106. data/app/models/hydra/datastream/mods_generic_content.rb +0 -498
  107. data/app/models/hydra/datastream/mods_image.rb +0 -497
  108. data/app/models/hydra/datastream/rights_metadata.rb +0 -191
  109. data/app/models/hydra/role_mapper_behavior.rb +0 -33
  110. data/app/models/role_mapper.rb +0 -6
  111. data/lib/hydra/access_controls_enforcement.rb +0 -237
  112. data/lib/hydra/access_controls_evaluation.rb +0 -38
  113. data/lib/hydra/common_mods_index_methods.rb +0 -46
  114. data/lib/hydra/model_mixins/mods_object.rb +0 -17
  115. data/lib/hydra/model_mixins/rights_metadata.rb +0 -357
  116. data/lib/hydra/mods_article.rb +0 -535
  117. data/lib/hydra/mods_dataset.rb +0 -177
  118. data/lib/hydra/mods_generic_content.rb +0 -500
  119. data/lib/hydra/mods_image.rb +0 -500
  120. data/lib/uva/mods_index_methods.rb +0 -30
  121. data/test_support/spec/lib/common_mods_index_methods_spec.rb +0 -26
  122. data/test_support/spec/models/ability_spec.rb +0 -40
  123. data/test_support/spec/models/hydra_rights_metadata_spec.rb +0 -175
  124. data/test_support/spec/models/role_mapper_spec.rb +0 -22
  125. data/test_support/spec/unit/rights_metadata_spec.rb +0 -80
@@ -1,38 +0,0 @@
1
- # will move to lib/hydra/access_control folder/namespace in release 5.x
2
- # Provides methods for determining permissions
3
- # If you include this into a Controller, it will also make a number of these methods available as view helpers.
4
- module Hydra::AccessControlsEvaluation
5
-
6
- def self.included(klass)
7
- if klass.respond_to?(:helper_method)
8
- klass.helper_method(:editor?)
9
- klass.helper_method(:reader?)
10
- klass.helper_method(:test_permission?)
11
- end
12
- end
13
-
14
- # Test the current user's permissions. This method is used by the editor? and reader? methods
15
- # @param [Symbol] permission_type valid options: :edit, :read
16
- # This is available as a view helper method as well as within your controllers.
17
- # @example
18
- # test_permission(:edit)
19
- def test_permission(permission_type)
20
- ActiveSupport::Deprecation.warn("test_permission has been deprecated. Use can? instead")
21
- can? permission_type, @permissions_solr_document
22
- end
23
-
24
- # Test whether the the current user has edit permissions.
25
- # This is available as a view helper method as well as within your controllers.
26
- def editor?
27
- logger.warn("editor? has been deprecated. Use can? instead")
28
- can? :edit, @permissions_solr_document
29
- end
30
-
31
- # Test whether the the current user has read permissions.
32
- # This is available as a view helper method as well as within your controllers.
33
- def reader?
34
- logger.warn("reader? has been deprecated. Use can? instead")
35
- can? :read, @permissions_solr_document
36
- end
37
-
38
- end
@@ -1,46 +0,0 @@
1
- # Provides some helper methods for indexing compound or non-standard facets
2
- #
3
- # == Methods
4
- #
5
- # extract_person_full_names
6
- # This method returns a Hash of person_full_name_facet values which combine Lastname, Firstname
7
- # extract_person_organizations
8
- # This method returns a Hash of person_full_name_facet values which extract the persons affiliation and puts it in an mods_organization_facet
9
- # will be removed in release 5.x
10
- module Hydra::CommonModsIndexMethods
11
-
12
- def self.included(base)
13
- ActiveSupport::Deprecation.warn("Hydra::CommonModsIndexMethods has been deprecated. Use Hydra::Datastream::CommonModsIndexMethods instead")
14
- end
15
-
16
- # Extracts the first and last names of persons and creates Solr::Field objects with for person_full_name_facet
17
- #
18
- # == Returns:
19
- # An array of Solr::Field objects
20
- #
21
- def extract_person_full_names
22
- names = {}
23
- self.find_by_terms(:person).each do |person|
24
- name_parts = person.children.inject({}) do |hash,child|
25
- hash[child.get_attribute(:type)] = child.text if ["family","given"].include? child.get_attribute(:type)
26
- hash
27
- end
28
- ::Solrizer::Extractor.insert_solr_field_value(names, "person_full_name_facet", [name_parts["family"], name_parts["given"]].join(", ") ) if name_parts.keys.sort == ["family","given"]
29
- names
30
- end
31
- return names
32
- end
33
-
34
- # Extracts the affiliations of persons and creates Solr::Field objects for them
35
- #
36
- # == Returns:
37
- # An array of Solr::Field objects
38
- #
39
- def extract_person_organizations
40
- orgs = {}
41
- self.find_by_terms(:person,:affiliation).each do |org|
42
- ::Solrizer::Extractor.insert_solr_field_value(orgs, "mods_organization_facet", org.text)
43
- end
44
- return orgs
45
- end
46
- end
@@ -1,17 +0,0 @@
1
- # Include this into models to specify that the descMetadata datastream contains basic MODS metadata
2
- #
3
- # Explicitly declares:
4
- # descMetadata datastream using Hydra::Datastream::ModsArticle Terminology
5
- #
6
- # will move to lib/hydra/model/mods_object_behavior in release 5.x
7
- module Hydra::ModelMixins::ModsObject
8
-
9
- def self.included(klazz)
10
- # Uses the Hydra MODS Basic profile for tracking descriptive metadata
11
- klazz.has_metadata :name => "descMetadata", :type => Hydra::Datastream::ModsArticle
12
-
13
- # Ensure that objects assert the modsObject cModel
14
- # klazz.relationships << :has_model => "info:fedora/hydra-cModel:modsObject"
15
- end
16
-
17
- end
@@ -1,357 +0,0 @@
1
- module Hydra
2
- module ModelMixins
3
- module RightsMetadata
4
-
5
-
6
- ## Updates those permissions that are provided to it. Does not replace any permissions unless they are provided
7
- # @example
8
- # obj.permissions= [{:name=>"group1", :access=>"discover", :type=>'group'},
9
- # {:name=>"group2", :access=>"discover", :type=>'group'}]
10
- def permissions=(params)
11
- perm_hash = {'person' => rightsMetadata.individuals, 'group'=> rightsMetadata.groups}
12
-
13
- params.each do |row|
14
- if row[:type] == 'user'
15
- perm_hash['person'][row[:name]] = row[:access]
16
- else
17
- perm_hash['group'][row[:name]] = row[:access]
18
- end
19
- end
20
-
21
- rightsMetadata.update_permissions(perm_hash)
22
- end
23
-
24
-
25
- ## Returns a list with all the permissions on the object.
26
- # @example
27
- # [{:name=>"group1", :access=>"discover", :type=>'group'},
28
- # {:name=>"group2", :access=>"discover", :type=>'group'},
29
- # {:name=>"user2", :access=>"read", :type=>'user'},
30
- # {:name=>"user1", :access=>"edit", :type=>'user'},
31
- # {:name=>"user3", :access=>"read", :type=>'user'}]
32
- def permissions
33
- (rightsMetadata.groups.map {|x| {:type=>'group', :access=>x[1], :name=>x[0] }} +
34
- rightsMetadata.individuals.map {|x| {:type=>'user', :access=>x[1], :name=>x[0]}})
35
-
36
- end
37
-
38
- # Return a list of groups that have discover permission
39
- def discover_groups
40
- rightsMetadata.groups.map {|k, v| k if v == 'discover'}.compact
41
- end
42
-
43
- # Grant discover permissions to the groups specified. Revokes discover permission for all other groups.
44
- # @param[Array] groups a list of group names
45
- # @example
46
- # r.discover_groups= ['one', 'two', 'three']
47
- # r.discover_groups
48
- # => ['one', 'two', 'three']
49
- #
50
- def discover_groups=(groups)
51
- set_discover_groups(groups, discover_groups)
52
- end
53
-
54
- # Grant discover permissions to the groups specified. Revokes discover permission for all other groups.
55
- # @param[String] groups a list of group names
56
- # @example
57
- # r.discover_groups_string= 'one, two, three'
58
- # r.discover_groups
59
- # => ['one', 'two', 'three']
60
- #
61
- def discover_groups_string=(groups)
62
- self.discover_groups=groups.split(/[\s,]+/)
63
- end
64
-
65
- # Display the groups a comma delimeted string
66
- def discover_groups_string
67
- self.discover_groups.join(', ')
68
- end
69
-
70
- # Grant discover permissions to the groups specified. Revokes discover permission for
71
- # any of the eligible_groups that are not in groups.
72
- # This may be used when different users are responsible for setting different
73
- # groups. Supply the groups the current user is responsible for as the
74
- # 'eligible_groups'
75
- # @param[Array] groups a list of groups
76
- # @param[Array] eligible_groups the groups that are eligible to have their discover permssion revoked.
77
- # @example
78
- # r.discover_groups = ['one', 'two', 'three']
79
- # r.discover_groups
80
- # => ['one', 'two', 'three']
81
- # r.set_discover_groups(['one'], ['three'])
82
- # r.discover_groups
83
- # => ['one', 'two'] ## 'two' was not eligible to be removed
84
- #
85
- def set_discover_groups(groups, eligible_groups)
86
- set_entities(:discover, :group, groups, eligible_groups)
87
- end
88
-
89
- def discover_users
90
- rightsMetadata.individuals.map {|k, v| k if v == 'discover'}.compact
91
- end
92
-
93
- # Grant discover permissions to the users specified. Revokes discover permission for all other users.
94
- # @param[Array] users a list of usernames
95
- # @example
96
- # r.discover_users= ['one', 'two', 'three']
97
- # r.discover_users
98
- # => ['one', 'two', 'three']
99
- #
100
- def discover_users=(users)
101
- set_discover_users(users, discover_users)
102
- end
103
-
104
- # Grant discover permissions to the groups specified. Revokes discover permission for all other users.
105
- # @param[String] users a list of usernames
106
- # @example
107
- # r.discover_users_string= 'one, two, three'
108
- # r.discover_users
109
- # => ['one', 'two', 'three']
110
- #
111
- def discover_users_string=(users)
112
- self.discover_users=users.split(/[\s,]+/)
113
- end
114
-
115
- # Display the users as a comma delimeted string
116
- def discover_users_string
117
- self.discover_users.join(', ')
118
- end
119
-
120
- # Grant discover permissions to the users specified. Revokes discover permission for
121
- # any of the eligible_users that are not in users.
122
- # This may be used when different users are responsible for setting different
123
- # users. Supply the users the current user is responsible for as the
124
- # 'eligible_users'
125
- # @param[Array] users a list of users
126
- # @param[Array] eligible_users the users that are eligible to have their discover permssion revoked.
127
- # @example
128
- # r.discover_users = ['one', 'two', 'three']
129
- # r.discover_users
130
- # => ['one', 'two', 'three']
131
- # r.set_discover_users(['one'], ['three'])
132
- # r.discover_users
133
- # => ['one', 'two'] ## 'two' was not eligible to be removed
134
- #
135
- def set_discover_users(users, eligible_users)
136
- set_entities(:discover, :person, users, eligible_users)
137
- end
138
-
139
- # Return a list of groups that have discover permission
140
- def read_groups
141
- rightsMetadata.groups.map {|k, v| k if v == 'read'}.compact
142
- end
143
-
144
- # Grant read permissions to the groups specified. Revokes read permission for all other groups.
145
- # @param[Array] groups a list of group names
146
- # @example
147
- # r.read_groups= ['one', 'two', 'three']
148
- # r.read_groups
149
- # => ['one', 'two', 'three']
150
- #
151
- def read_groups=(groups)
152
- set_read_groups(groups, read_groups)
153
- end
154
-
155
- # Grant read permissions to the groups specified. Revokes read permission for all other groups.
156
- # @param[String] groups a list of group names
157
- # @example
158
- # r.read_groups_string= 'one, two, three'
159
- # r.read_groups
160
- # => ['one', 'two', 'three']
161
- #
162
- def read_groups_string=(groups)
163
- self.read_groups=groups.split(/[\s,]+/)
164
- end
165
-
166
- # Display the groups a comma delimeted string
167
- def read_groups_string
168
- self.read_groups.join(', ')
169
- end
170
-
171
- # Grant read permissions to the groups specified. Revokes read permission for
172
- # any of the eligible_groups that are not in groups.
173
- # This may be used when different users are responsible for setting different
174
- # groups. Supply the groups the current user is responsible for as the
175
- # 'eligible_groups'
176
- # @param[Array] groups a list of groups
177
- # @param[Array] eligible_groups the groups that are eligible to have their read permssion revoked.
178
- # @example
179
- # r.read_groups = ['one', 'two', 'three']
180
- # r.read_groups
181
- # => ['one', 'two', 'three']
182
- # r.set_read_groups(['one'], ['three'])
183
- # r.read_groups
184
- # => ['one', 'two'] ## 'two' was not eligible to be removed
185
- #
186
- def set_read_groups(groups, eligible_groups)
187
- set_entities(:read, :group, groups, eligible_groups)
188
- end
189
-
190
- def read_users
191
- rightsMetadata.individuals.map {|k, v| k if v == 'read'}.compact
192
- end
193
-
194
- # Grant read permissions to the users specified. Revokes read permission for all other users.
195
- # @param[Array] users a list of usernames
196
- # @example
197
- # r.read_users= ['one', 'two', 'three']
198
- # r.read_users
199
- # => ['one', 'two', 'three']
200
- #
201
- def read_users=(users)
202
- set_read_users(users, read_users)
203
- end
204
-
205
- # Grant read permissions to the groups specified. Revokes read permission for all other users.
206
- # @param[String] users a list of usernames
207
- # @example
208
- # r.read_users_string= 'one, two, three'
209
- # r.read_users
210
- # => ['one', 'two', 'three']
211
- #
212
- def read_users_string=(users)
213
- self.read_users=users.split(/[\s,]+/)
214
- end
215
-
216
- # Display the users as a comma delimeted string
217
- def read_users_string
218
- self.read_users.join(', ')
219
- end
220
-
221
- # Grant read permissions to the users specified. Revokes read permission for
222
- # any of the eligible_users that are not in users.
223
- # This may be used when different users are responsible for setting different
224
- # users. Supply the users the current user is responsible for as the
225
- # 'eligible_users'
226
- # @param[Array] users a list of users
227
- # @param[Array] eligible_users the users that are eligible to have their read permssion revoked.
228
- # @example
229
- # r.read_users = ['one', 'two', 'three']
230
- # r.read_users
231
- # => ['one', 'two', 'three']
232
- # r.set_read_users(['one'], ['three'])
233
- # r.read_users
234
- # => ['one', 'two'] ## 'two' was not eligible to be removed
235
- #
236
- def set_read_users(users, eligible_users)
237
- set_entities(:read, :person, users, eligible_users)
238
- end
239
-
240
-
241
- # Return a list of groups that have edit permission
242
- def edit_groups
243
- rightsMetadata.groups.map {|k, v| k if v == 'edit'}.compact
244
- end
245
-
246
- # Grant edit permissions to the groups specified. Revokes edit permission for all other groups.
247
- # @param[Array] groups a list of group names
248
- # @example
249
- # r.edit_groups= ['one', 'two', 'three']
250
- # r.edit_groups
251
- # => ['one', 'two', 'three']
252
- #
253
- def edit_groups=(groups)
254
- set_edit_groups(groups, edit_groups)
255
- end
256
-
257
- # Grant edit permissions to the groups specified. Revokes edit permission for all other groups.
258
- # @param[String] groups a list of group names
259
- # @example
260
- # r.edit_groups_string= 'one, two, three'
261
- # r.edit_groups
262
- # => ['one', 'two', 'three']
263
- #
264
- def edit_groups_string=(groups)
265
- self.edit_groups=groups.split(/[\s,]+/)
266
- end
267
-
268
- # Display the groups a comma delimeted string
269
- def edit_groups_string
270
- self.edit_groups.join(', ')
271
- end
272
-
273
- # Grant edit permissions to the groups specified. Revokes edit permission for
274
- # any of the eligible_groups that are not in groups.
275
- # This may be used when different users are responsible for setting different
276
- # groups. Supply the groups the current user is responsible for as the
277
- # 'eligible_groups'
278
- # @param[Array] groups a list of groups
279
- # @param[Array] eligible_groups the groups that are eligible to have their edit permssion revoked.
280
- # @example
281
- # r.edit_groups = ['one', 'two', 'three']
282
- # r.edit_groups
283
- # => ['one', 'two', 'three']
284
- # r.set_edit_groups(['one'], ['three'])
285
- # r.edit_groups
286
- # => ['one', 'two'] ## 'two' was not eligible to be removed
287
- #
288
- def set_edit_groups(groups, eligible_groups)
289
- set_entities(:edit, :group, groups, eligible_groups)
290
- end
291
-
292
- def edit_users
293
- rightsMetadata.individuals.map {|k, v| k if v == 'edit'}.compact
294
- end
295
-
296
- # Grant edit permissions to the groups specified. Revokes edit permission for all other groups.
297
- # @param[Array] users a list of usernames
298
- # @example
299
- # r.edit_users= ['one', 'two', 'three']
300
- # r.edit_users
301
- # => ['one', 'two', 'three']
302
- #
303
- def edit_users=(users)
304
- set_edit_users(users, edit_users)
305
- end
306
-
307
- # Grant edit permissions to the users specified. Revokes edit permission for
308
- # any of the eligible_users that are not in users.
309
- # This may be used when different users are responsible for setting different
310
- # users. Supply the users the current user is responsible for as the
311
- # 'eligible_users'
312
- # @param[Array] users a list of users
313
- # @param[Array] eligible_users the users that are eligible to have their edit permssion revoked.
314
- # @example
315
- # r.edit_users = ['one', 'two', 'three']
316
- # r.edit_users
317
- # => ['one', 'two', 'three']
318
- # r.set_edit_users(['one'], ['three'])
319
- # r.edit_users
320
- # => ['one', 'two'] ## 'two' was not eligible to be removed
321
- #
322
- def set_edit_users(users, eligible_users)
323
- set_entities(:edit, :person, users, eligible_users)
324
- end
325
-
326
-
327
- private
328
-
329
- # @param permission either :discover, :read or :edit
330
- # @param type either :person or :group
331
- # @param values Values to set
332
- # @param changeable Values we are allowed to change
333
- def set_entities(permission, type, values, changeable)
334
- g = preserved(type, permission)
335
- (changeable - values).each do |entity|
336
- #Strip permissions from users not provided
337
- g[entity] = 'none'
338
- end
339
- values.each { |name| g[name] = permission.to_s}
340
- rightsMetadata.update_permissions(type.to_s=>g)
341
- end
342
-
343
- ## Get those permissions we don't want to change
344
- def preserved(type, permission)
345
- case permission
346
- when :edit
347
- g = {}
348
- when :read
349
- Hash[rightsMetadata.quick_search_by_type(type).select {|k, v| v == 'edit'}]
350
- when :discover
351
- Hash[rightsMetadata.quick_search_by_type(type).select {|k, v| v == 'discover'}]
352
- end
353
- end
354
-
355
- end
356
- end
357
- end