hydra-head 4.0.0.rc2 → 4.0.0.rc3
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +8 -1
- data/Gemfile.lock +46 -46
- data/HISTORY.textile +2 -0
- data/app/controllers/hydra/application_controller.rb +5 -0
- data/app/controllers/hydra/contributors_controller.rb +2 -1
- data/app/controllers/hydra/permissions_controller.rb +2 -2
- data/app/helpers/hydra/hydra_assets_helper_behavior.rb +4 -3
- data/app/models/ability.rb +97 -0
- data/app/models/common_metadata_asset.rb +2 -2
- data/app/models/generic_content.rb +2 -4
- data/app/models/generic_image.rb +3 -3
- data/app/models/hydra/datastream/common_mods_index_methods.rb +45 -0
- data/app/models/hydra/datastream/mods_article.rb +528 -0
- data/app/models/hydra/datastream/mods_dataset.rb +166 -0
- data/app/models/hydra/datastream/mods_generic_content.rb +496 -0
- data/app/models/hydra/datastream/mods_image.rb +496 -0
- data/app/models/hydra/datastream/rights_metadata.rb +190 -0
- data/app/models/mods_asset.rb +4 -4
- data/app/models/uses_default_partials.rb +2 -2
- data/app/views/catalog/_edit_partials/_default.html.erb +1 -1
- data/app/views/catalog/show.html.erb +1 -1
- data/app/views/contributors/_edit_conference.html.erb +1 -1
- data/app/views/contributors/_edit_organization.html.erb +1 -1
- data/app/views/contributors/_edit_person.html.erb +1 -1
- data/app/views/contributors/_show_organization.html.erb +1 -1
- data/app/views/hydra/file_assets/_index.html.erb +1 -1
- data/app/views/hydra/file_assets/_result.html.erb +1 -1
- data/app/views/hydra/permissions/index.html.erb +1 -1
- data/app/views/hydra/permissions/new.html.erb +1 -1
- data/app/views/mods_assets/_show_permissions.html.erb +1 -1
- data/hydra-head.gemspec +4 -6
- data/lib/hydra/access_controls_enforcement.rb +10 -6
- data/lib/hydra/access_controls_evaluation.rb +7 -71
- data/lib/hydra/assets.rb +1 -4
- data/lib/hydra/common_mods_index_methods.rb +5 -0
- data/lib/hydra/controller.rb +4 -7
- data/lib/hydra/file_assets.rb +3 -8
- data/lib/hydra/model_methods.rb +3 -2
- data/lib/hydra/model_mixins/common_metadata.rb +2 -2
- data/lib/hydra/model_mixins/mods_object.rb +3 -3
- data/lib/hydra/models/file_asset.rb +3 -3
- data/lib/hydra/mods_article.rb +7 -1
- data/lib/hydra/mods_dataset.rb +8 -0
- data/lib/hydra/mods_generic_content.rb +5 -0
- data/lib/hydra/mods_image.rb +5 -0
- data/lib/hydra/repository_controller.rb +14 -15
- data/lib/hydra/rights_metadata.rb +5 -1
- data/lib/hydra/submission_workflow.rb +1 -1
- data/lib/hydra-head/version.rb +1 -1
- data/lib/hydra.rb +1 -0
- data/lib/mediashelf/active_fedora_helper.rb +71 -0
- data/lib/uva/mods_index_methods.rb +5 -0
- data/test_support/etc/Gemfile +3 -2
- data/test_support/spec/controllers/catalog_controller_viewing_context_spec.rb +5 -7
- data/test_support/spec/controllers/file_assets_controller_spec.rb +3 -14
- data/test_support/spec/controllers/hydra-assets_controller_spec.rb +2 -2
- data/test_support/spec/helpers/access_controls_enforcement_spec.rb +14 -0
- data/test_support/spec/helpers/access_controls_evaluation_spec.rb +7 -16
- data/test_support/spec/helpers/hydra-repository_controller_spec.rb +0 -14
- data/test_support/spec/helpers/hydra_assets_helper_spec.rb +11 -11
- data/test_support/spec/helpers/hydra_model_methods_spec.rb +2 -2
- data/test_support/spec/integration/file_asset_spec.rb +0 -1
- data/test_support/spec/lib/common_mods_index_methods_spec.rb +1 -1
- data/test_support/spec/lib/hydra_submission_workflow_spec.rb +1 -1
- data/test_support/spec/models/ability_spec.rb +16 -0
- data/test_support/spec/models/file_asset_spec.rb +0 -1
- data/test_support/spec/models/hydra_rights_metadata_spec.rb +4 -5
- data/test_support/spec/models/mods_asset_spec.rb +2 -11
- data/vendor/cache/{active-fedora-4.0.0.rc13.gem → active-fedora-4.0.0.rc18.gem} +0 -0
- data/vendor/cache/blacklight-3.3.1.gem +0 -0
- data/vendor/cache/cancan-1.6.7.gem +0 -0
- data/vendor/cache/compass-0.12.1.gem +0 -0
- data/vendor/cache/compass-rails-1.0.1.gem +0 -0
- data/vendor/cache/compass-susy-plugin-0.9.gem +0 -0
- data/vendor/cache/factory_girl-2.6.4.gem +0 -0
- data/vendor/cache/gherkin-2.9.1.gem +0 -0
- data/vendor/cache/mail-2.4.4.gem +0 -0
- data/vendor/cache/nokogiri-1.5.2.gem +0 -0
- data/vendor/cache/om-1.6.0.rc3.gem +0 -0
- data/vendor/cache/orm_adapter-0.0.7.gem +0 -0
- data/vendor/cache/rack-cache-1.2.gem +0 -0
- data/vendor/cache/rspec-2.9.0.gem +0 -0
- data/vendor/cache/rspec-core-2.9.0.gem +0 -0
- data/vendor/cache/rspec-expectations-2.9.0.gem +0 -0
- data/vendor/cache/rspec-mocks-2.9.0.gem +0 -0
- data/vendor/cache/rspec-rails-2.9.0.gem +0 -0
- data/vendor/cache/sass-rails-3.2.5.gem +0 -0
- data/vendor/cache/stomp-1.2.2.gem +0 -0
- metadata +71 -59
- data/lib/hydra/image.rb +0 -178
- data/uninstall.rb +0 -1
- data/vendor/cache/compass-0.12.rc.1.gem +0 -0
- data/vendor/cache/factory_girl-2.6.1.gem +0 -0
- data/vendor/cache/gherkin-2.9.0.gem +0 -0
- data/vendor/cache/mail-2.4.3.gem +0 -0
- data/vendor/cache/nokogiri-1.5.0.gem +0 -0
- data/vendor/cache/om-1.5.3.gem +0 -0
- data/vendor/cache/orm_adapter-0.0.6.gem +0 -0
- data/vendor/cache/rack-cache-1.1.gem +0 -0
- data/vendor/cache/rspec-2.6.0.gem +0 -0
- data/vendor/cache/rspec-core-2.6.4.gem +0 -0
- data/vendor/cache/rspec-expectations-2.6.0.gem +0 -0
- data/vendor/cache/rspec-mocks-2.6.0.gem +0 -0
- data/vendor/cache/rspec-rails-2.6.1.gem +0 -0
- data/vendor/cache/sass-rails-3.2.4.gem +0 -0
- data/vendor/cache/stomp-1.2.1.gem +0 -0
data/Gemfile
CHANGED
@@ -3,4 +3,11 @@ source "http://rubygems.org"
|
|
3
3
|
# Specify your gem's dependencies in hydra-head-r3.gemspec
|
4
4
|
gemspec
|
5
5
|
|
6
|
-
|
6
|
+
# For rvm users:
|
7
|
+
# bundle config build.ruby-debug-base19 --with-ruby-include=$rvm_path/src/ruby-1.9.3-p0
|
8
|
+
group :test do
|
9
|
+
# gem 'linecache19', '>= 0.5.13'
|
10
|
+
# gem 'ruby-debug-base19', '>= 0.11.26'
|
11
|
+
# gem 'ruby-debug19'
|
12
|
+
end
|
13
|
+
|
data/Gemfile.lock
CHANGED
@@ -1,28 +1,13 @@
|
|
1
|
-
GIT
|
2
|
-
remote: git://github.com/projectblacklight/blacklight.git
|
3
|
-
revision: 14d3ab3654245f13348389f4b94cf551034ef725
|
4
|
-
specs:
|
5
|
-
blacklight (3.2.2)
|
6
|
-
compass (>= 0.12.alpha.2)
|
7
|
-
kaminari
|
8
|
-
marc (~> 0.4.3)
|
9
|
-
nokogiri (~> 1.5)
|
10
|
-
rails (~> 3.1)
|
11
|
-
rsolr (~> 1.0.6)
|
12
|
-
rsolr-ext (~> 1.0.3)
|
13
|
-
sass-rails (~> 3.1)
|
14
|
-
unicode
|
15
|
-
|
16
1
|
PATH
|
17
2
|
remote: .
|
18
3
|
specs:
|
19
|
-
hydra-head (4.0.0.
|
4
|
+
hydra-head (4.0.0.rc3)
|
20
5
|
RedCloth (= 4.2.9)
|
21
|
-
active-fedora (~> 4.0.0.
|
22
|
-
blacklight (~> 3.
|
6
|
+
active-fedora (~> 4.0.0.rc18)
|
7
|
+
blacklight (~> 3.3.1)
|
23
8
|
block_helpers
|
9
|
+
cancan
|
24
10
|
devise
|
25
|
-
om (= 1.5.3)
|
26
11
|
rails (~> 3.2.1)
|
27
12
|
sanitize
|
28
13
|
solrizer-fedora (>= 1.2.5)
|
@@ -44,7 +29,7 @@ GEM
|
|
44
29
|
rack-cache (~> 1.1)
|
45
30
|
rack-test (~> 0.6.1)
|
46
31
|
sprockets (~> 2.1.2)
|
47
|
-
active-fedora (4.0.0.
|
32
|
+
active-fedora (4.0.0.rc18)
|
48
33
|
activeresource (>= 3.0.0)
|
49
34
|
activesupport (>= 3.0.0)
|
50
35
|
equivalent-xml
|
@@ -52,7 +37,7 @@ GEM
|
|
52
37
|
mime-types (>= 1.16)
|
53
38
|
multipart-post (= 1.1.2)
|
54
39
|
nokogiri
|
55
|
-
om (
|
40
|
+
om (~> 1.6.0.rc3)
|
56
41
|
rdf
|
57
42
|
rdf-rdfxml (= 0.3.5)
|
58
43
|
rsolr
|
@@ -78,9 +63,21 @@ GEM
|
|
78
63
|
gyoku (>= 0.4.0)
|
79
64
|
arel (3.0.2)
|
80
65
|
bcrypt-ruby (3.0.1)
|
66
|
+
blacklight (3.3.1)
|
67
|
+
compass-rails (~> 1.0.0)
|
68
|
+
compass-susy-plugin (>= 0.9.0)
|
69
|
+
kaminari
|
70
|
+
marc (~> 0.4.3)
|
71
|
+
nokogiri (~> 1.5)
|
72
|
+
rails (~> 3.1)
|
73
|
+
rsolr (~> 1.0.6)
|
74
|
+
rsolr-ext (~> 1.0.3)
|
75
|
+
sass-rails (~> 3.2.0)
|
76
|
+
unicode
|
81
77
|
block_helpers (0.3.3)
|
82
78
|
activesupport (>= 2.0)
|
83
79
|
builder (3.0.0)
|
80
|
+
cancan (1.6.7)
|
84
81
|
capybara (1.1.2)
|
85
82
|
mime-types (>= 1.16)
|
86
83
|
nokogiri (>= 1.3.3)
|
@@ -91,10 +88,14 @@ GEM
|
|
91
88
|
childprocess (0.3.1)
|
92
89
|
ffi (~> 1.0.6)
|
93
90
|
chunky_png (1.2.5)
|
94
|
-
compass (0.12.
|
91
|
+
compass (0.12.1)
|
95
92
|
chunky_png (~> 1.2)
|
96
93
|
fssm (>= 0.2.7)
|
97
94
|
sass (~> 3.1)
|
95
|
+
compass-rails (1.0.1)
|
96
|
+
compass (~> 0.12.0)
|
97
|
+
compass-susy-plugin (0.9)
|
98
|
+
compass (>= 0.11.1)
|
98
99
|
cucumber (1.1.9)
|
99
100
|
builder (>= 2.1.2)
|
100
101
|
diff-lcs (>= 1.1.2)
|
@@ -115,12 +116,12 @@ GEM
|
|
115
116
|
equivalent-xml (0.2.9)
|
116
117
|
nokogiri (>= 1.4.3)
|
117
118
|
erubis (2.7.0)
|
118
|
-
factory_girl (2.6.
|
119
|
+
factory_girl (2.6.4)
|
119
120
|
activesupport (>= 2.3.9)
|
120
121
|
fastercsv (1.5.4)
|
121
122
|
ffi (1.0.11)
|
122
123
|
fssm (0.2.8.1)
|
123
|
-
gherkin (2.9.
|
124
|
+
gherkin (2.9.1)
|
124
125
|
json (>= 1.4.6)
|
125
126
|
gyoku (0.4.4)
|
126
127
|
builder (>= 2.1.2)
|
@@ -141,7 +142,7 @@ GEM
|
|
141
142
|
activesupport (>= 3.0.0)
|
142
143
|
railties (>= 3.0.0)
|
143
144
|
logger (1.2.8)
|
144
|
-
mail (2.4.
|
145
|
+
mail (2.4.4)
|
145
146
|
i18n (>= 0.4.0)
|
146
147
|
mime-types (~> 1.16)
|
147
148
|
treetop (~> 1.4.8)
|
@@ -153,15 +154,15 @@ GEM
|
|
153
154
|
metaclass (~> 0.0.1)
|
154
155
|
multi_json (1.1.0)
|
155
156
|
multipart-post (1.1.2)
|
156
|
-
nokogiri (1.5.
|
157
|
+
nokogiri (1.5.2)
|
157
158
|
nori (1.1.0)
|
158
|
-
om (1.
|
159
|
+
om (1.6.0.rc3)
|
159
160
|
mediashelf-loggable
|
160
161
|
nokogiri (>= 1.4.2)
|
161
|
-
orm_adapter (0.0.
|
162
|
+
orm_adapter (0.0.7)
|
162
163
|
polyglot (0.3.3)
|
163
164
|
rack (1.4.1)
|
164
|
-
rack-cache (1.
|
165
|
+
rack-cache (1.2)
|
165
166
|
rack (>= 0.4)
|
166
167
|
rack-ssl (1.3.2)
|
167
168
|
rack
|
@@ -196,19 +197,19 @@ GEM
|
|
196
197
|
builder (>= 2.1.2)
|
197
198
|
rsolr-ext (1.0.3)
|
198
199
|
rsolr (>= 1.0.2)
|
199
|
-
rspec (2.
|
200
|
-
rspec-core (~> 2.
|
201
|
-
rspec-expectations (~> 2.
|
202
|
-
rspec-mocks (~> 2.
|
203
|
-
rspec-core (2.
|
204
|
-
rspec-expectations (2.
|
205
|
-
diff-lcs (~> 1.1.
|
206
|
-
rspec-mocks (2.
|
207
|
-
rspec-rails (2.
|
208
|
-
actionpack (
|
209
|
-
activesupport (
|
210
|
-
railties (
|
211
|
-
rspec (~> 2.
|
200
|
+
rspec (2.9.0)
|
201
|
+
rspec-core (~> 2.9.0)
|
202
|
+
rspec-expectations (~> 2.9.0)
|
203
|
+
rspec-mocks (~> 2.9.0)
|
204
|
+
rspec-core (2.9.0)
|
205
|
+
rspec-expectations (2.9.0)
|
206
|
+
diff-lcs (~> 1.1.3)
|
207
|
+
rspec-mocks (2.9.0)
|
208
|
+
rspec-rails (2.9.0)
|
209
|
+
actionpack (>= 3.0)
|
210
|
+
activesupport (>= 3.0)
|
211
|
+
railties (>= 3.0)
|
212
|
+
rspec (~> 2.9.0)
|
212
213
|
rubydora (0.5.7)
|
213
214
|
activemodel
|
214
215
|
activesupport
|
@@ -221,7 +222,7 @@ GEM
|
|
221
222
|
sanitize (2.0.3)
|
222
223
|
nokogiri (>= 1.4.4, < 1.6)
|
223
224
|
sass (3.1.15)
|
224
|
-
sass-rails (3.2.
|
225
|
+
sass-rails (3.2.5)
|
225
226
|
railties (~> 3.2.0)
|
226
227
|
sass (>= 3.1.10)
|
227
228
|
tilt (~> 1.3)
|
@@ -260,7 +261,7 @@ GEM
|
|
260
261
|
sqlite3 (1.3.5)
|
261
262
|
sqlite3-ruby (1.3.3)
|
262
263
|
sqlite3 (>= 1.3.3)
|
263
|
-
stomp (1.2.
|
264
|
+
stomp (1.2.2)
|
264
265
|
term-ansicolor (1.0.7)
|
265
266
|
thor (0.14.6)
|
266
267
|
tilt (1.3.3)
|
@@ -282,12 +283,11 @@ PLATFORMS
|
|
282
283
|
ruby
|
283
284
|
|
284
285
|
DEPENDENCIES
|
285
|
-
blacklight!
|
286
286
|
cucumber-rails (>= 1.2.0)
|
287
287
|
factory_girl
|
288
288
|
hydra-head!
|
289
289
|
jettywrapper (>= 1.0.4)
|
290
290
|
mocha
|
291
|
-
rspec-rails
|
291
|
+
rspec-rails
|
292
292
|
sqlite3-ruby
|
293
293
|
yard
|
data/HISTORY.textile
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
h3. 4.0.0
|
2
2
|
* Upgrade to active fedora 4.0.0
|
3
|
+
* Upgrade to blacklight 3.3.0
|
3
4
|
* Removed railtie to configure active-fedora
|
4
5
|
* Register solr happens automatically
|
6
|
+
* Using CanCan gem for authorization
|
5
7
|
|
6
8
|
h3. 3.3.0
|
7
9
|
* HYDRA-737: fixes to work with Ruby Enterprise Edition 2011.12 and ruby-1.8.7-p357.
|
@@ -2,6 +2,8 @@ class Hydra::ContributorsController < ApplicationController
|
|
2
2
|
include Hydra::RepositoryController
|
3
3
|
include Hydra::AssetsControllerHelper
|
4
4
|
include Hydra::SubmissionWorkflow
|
5
|
+
|
6
|
+
before_filter :load_document, :only => :update
|
5
7
|
|
6
8
|
# Display form for adding a new Contributor
|
7
9
|
# If contributor_type is provided, renders the appropriate "new" form
|
@@ -42,7 +44,6 @@ class Hydra::ContributorsController < ApplicationController
|
|
42
44
|
if params[:id].nil?
|
43
45
|
params[:id] = params[:asset_id]
|
44
46
|
end
|
45
|
-
@document = load_document_from_params
|
46
47
|
# generates sanatized params from params hash to update the doc with
|
47
48
|
sanitize_update_params
|
48
49
|
@response = update_document(@document,@sanitized_params)
|
@@ -34,7 +34,7 @@ class Hydra::PermissionsController < ApplicationController
|
|
34
34
|
# Create a new permissions entry
|
35
35
|
# expects permission["actor_id"], permission["actor_type"] and permission["access_level"] as params. ie. :permission=>{"actor_id"=>"_person_id_","actor_type"=>"person","access_level"=>"read"}
|
36
36
|
def create
|
37
|
-
@document_fedora=ActiveFedora::Base.find(params[:asset_id])
|
37
|
+
@document_fedora=ActiveFedora::Base.find(params[:asset_id], :cast=>true)
|
38
38
|
|
39
39
|
access_actor_type = params["permission"]["actor_type"]
|
40
40
|
actor_id = params["permission"]["actor_id"]
|
@@ -69,7 +69,7 @@ class Hydra::PermissionsController < ApplicationController
|
|
69
69
|
pid = params[:id]
|
70
70
|
end
|
71
71
|
|
72
|
-
@document_fedora=ActiveFedora::Base.find(pid)
|
72
|
+
@document_fedora=ActiveFedora::Base.find(pid, :cast=>true)
|
73
73
|
|
74
74
|
# update the datastream's values
|
75
75
|
result = @document_fedora.rightsMetadata.update_permissions(params[:permission])
|
@@ -39,14 +39,15 @@ module Hydra::HydraAssetsHelperBehavior
|
|
39
39
|
|
40
40
|
def get_file_asset_count(document)
|
41
41
|
count = 0
|
42
|
+
### TODO switch to AF::Base.count
|
42
43
|
obj = ActiveFedora::Base.load_instance_from_solr(document['id'], document)
|
43
|
-
|
44
|
-
count += obj.file_objects.length unless obj.nil?
|
44
|
+
count += obj.parts.length unless obj.nil?
|
45
45
|
count
|
46
46
|
end
|
47
47
|
|
48
48
|
def get_file_asset_description(document)
|
49
|
-
|
49
|
+
#TODO need test coverage
|
50
|
+
obj = ActiveFedora::Base.load_instance_from_solr(document['id'], document)
|
50
51
|
if obj.nil? || obj.file_objects.empty?
|
51
52
|
return ""
|
52
53
|
else
|
@@ -0,0 +1,97 @@
|
|
1
|
+
class Ability
|
2
|
+
include CanCan::Ability
|
3
|
+
include Hydra::AccessControlsEnforcement
|
4
|
+
|
5
|
+
attr_reader :user, :user_groups
|
6
|
+
|
7
|
+
def initialize(user, session=nil)
|
8
|
+
user ||= User.new # guest user (not logged in)
|
9
|
+
@user = user
|
10
|
+
@user_groups = RoleMapper.roles(@user.email)
|
11
|
+
# everyone is automatically a member of the group 'public'
|
12
|
+
@user_groups.push 'public' unless @user_groups.include?('public')
|
13
|
+
# logged-in users are automatically members of the group "registered"
|
14
|
+
@user_groups.push 'registered' unless (@user.email == '' || @user == "public" || @user_groups.include?('registered') )
|
15
|
+
|
16
|
+
logger.debug("Usergroups is " + @user_groups.inspect)
|
17
|
+
|
18
|
+
if @user.is_being_superuser?(session)
|
19
|
+
can :manage, :all
|
20
|
+
else
|
21
|
+
can :edit, String do |pid|
|
22
|
+
@response, @permissions_solr_document = get_permissions_solr_response_for_doc_id(pid)
|
23
|
+
test_edit
|
24
|
+
end
|
25
|
+
|
26
|
+
can :edit, ActiveFedora::Base do |obj|
|
27
|
+
@response, @permissions_solr_document = get_permissions_solr_response_for_doc_id(obj.pid)
|
28
|
+
test_edit
|
29
|
+
end
|
30
|
+
|
31
|
+
can :edit, SolrDocument do |obj|
|
32
|
+
test_edit
|
33
|
+
end
|
34
|
+
|
35
|
+
can :read, String do |pid|
|
36
|
+
@response, @permissions_solr_document = get_permissions_solr_response_for_doc_id(pid)
|
37
|
+
test_read
|
38
|
+
end
|
39
|
+
|
40
|
+
can :read, ActiveFedora::Base do |obj|
|
41
|
+
@response, @permissions_solr_document = get_permissions_solr_response_for_doc_id(obj.pid)
|
42
|
+
test_read
|
43
|
+
end
|
44
|
+
|
45
|
+
can :read, SolrDocument do |obj|
|
46
|
+
test_read
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
def test_edit
|
53
|
+
logger.debug("CANCAN Checking edit permissions for user: #{@user}")
|
54
|
+
group_intersection = @user_groups & edit_groups
|
55
|
+
result = !group_intersection.empty? || edit_persons.include?(@user.email)
|
56
|
+
logger.debug("CANCAN decision: #{result}")
|
57
|
+
result
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_read
|
61
|
+
logger.debug("CANCAN Checking edit permissions for user: #{@user}")
|
62
|
+
group_intersection = @user_groups & read_groups
|
63
|
+
result = !group_intersection.empty? || read_persons.include?(@user.email)
|
64
|
+
logger.debug("CANCAN decision: #{result}")
|
65
|
+
result
|
66
|
+
end
|
67
|
+
|
68
|
+
def edit_groups
|
69
|
+
edit_group_field = Hydra.config[:permissions][:edit][:group]
|
70
|
+
eg = ((@permissions_solr_document == nil || @permissions_solr_document.fetch(edit_group_field,nil) == nil) ? [] : @permissions_solr_document.fetch(edit_group_field,nil))
|
71
|
+
logger.debug("edit_groups: #{eg.inspect}")
|
72
|
+
return eg
|
73
|
+
end
|
74
|
+
|
75
|
+
# edit implies read, so read_groups is the union of edit and read groups
|
76
|
+
def read_groups
|
77
|
+
read_group_field = Hydra.config[:permissions][:read][:group]
|
78
|
+
rg = edit_groups | ((@permissions_solr_document == nil || @permissions_solr_document.fetch(read_group_field,nil) == nil) ? [] : @permissions_solr_document.fetch(read_group_field,nil))
|
79
|
+
logger.debug("read_groups: #{rg.inspect}")
|
80
|
+
return rg
|
81
|
+
end
|
82
|
+
|
83
|
+
def edit_persons
|
84
|
+
edit_person_field = Hydra.config[:permissions][:edit][:individual]
|
85
|
+
ep = ((@permissions_solr_document == nil || @permissions_solr_document.fetch(edit_person_field,nil) == nil) ? [] : @permissions_solr_document.fetch(edit_person_field,nil))
|
86
|
+
logger.debug("edit_persons: #{ep.inspect}")
|
87
|
+
return ep
|
88
|
+
end
|
89
|
+
|
90
|
+
# edit implies read, so read_persons is the union of edit and read persons
|
91
|
+
def read_persons
|
92
|
+
read_individual_field = Hydra.config[:permissions][:read][:individual]
|
93
|
+
rp = edit_persons | ((@permissions_solr_document == nil || @permissions_solr_document.fetch(read_individual_field,nil) == nil) ? [] : @permissions_solr_document.fetch(read_individual_field,nil))
|
94
|
+
logger.debug("read_persons: #{rp.inspect}")
|
95
|
+
return rp
|
96
|
+
end
|
97
|
+
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# A Basic Model for Assets that conform to Hydra commonMetadata cModel and have basic MODS metadata (currently "Article" is the MODS exemplar)
|
2
2
|
class CommonMetadataAsset < ActiveFedora::Base
|
3
3
|
|
4
|
-
# declares a rightsMetadata datastream with type Hydra::RightsMetadata
|
4
|
+
# declares a rightsMetadata datastream with type Hydra::Datastream::RightsMetadata
|
5
5
|
# basically, it is another expression of
|
6
|
-
# has_metadata :name => "rightsMetadata", :type => Hydra::RightsMetadata
|
6
|
+
# has_metadata :name => "rightsMetadata", :type => Hydra::Datastream::RightsMetadata
|
7
7
|
include Hydra::ModelMixins::CommonMetadata
|
8
8
|
|
9
9
|
# adds helpful methods for basic hydra objects
|
@@ -1,12 +1,10 @@
|
|
1
|
-
require 'hydra'
|
2
|
-
|
3
1
|
class GenericContent < ActiveFedora::Base
|
4
2
|
|
5
3
|
# Uses the Hydra Rights Metadata Schema for tracking access permissions & copyright
|
6
|
-
has_metadata :name => "rightsMetadata", :type => Hydra::RightsMetadata
|
4
|
+
has_metadata :name => "rightsMetadata", :type => Hydra::Datastream::RightsMetadata
|
7
5
|
|
8
6
|
include Hydra::GenericContent
|
9
|
-
has_metadata :name => "descMetadata", :type => Hydra::ModsGenericContent
|
7
|
+
has_metadata :name => "descMetadata", :type => Hydra::Datastream::ModsGenericContent
|
10
8
|
|
11
9
|
# A place to put extra metadata values
|
12
10
|
has_metadata :name => "properties", :type => ActiveFedora::MetadataDatastream do |m|
|
data/app/models/generic_image.rb
CHANGED
@@ -45,10 +45,10 @@ class GenericImage < ActiveFedora::Base
|
|
45
45
|
include Hydra::ModelMethods
|
46
46
|
|
47
47
|
# Uses the Hydra Rights Metadata Schema for tracking access permissions & copyright
|
48
|
-
has_metadata :name => "rightsMetadata", :type => Hydra::RightsMetadata
|
48
|
+
has_metadata :name => "rightsMetadata", :type => Hydra::Datastream::RightsMetadata
|
49
49
|
|
50
50
|
include Hydra::GenericImage
|
51
|
-
has_metadata :name => "descMetadata", :type => Hydra::ModsImage
|
51
|
+
has_metadata :name => "descMetadata", :type => Hydra::Datastream::ModsImage
|
52
52
|
|
53
53
|
# A place to put extra metadata values
|
54
54
|
has_metadata :name => "properties", :type => ActiveFedora::MetadataDatastream do |m|
|
@@ -61,4 +61,4 @@ class GenericImage < ActiveFedora::Base
|
|
61
61
|
super
|
62
62
|
end
|
63
63
|
|
64
|
-
end
|
64
|
+
end
|
@@ -0,0 +1,45 @@
|
|
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
|
+
|
10
|
+
module Hydra
|
11
|
+
module Datastream
|
12
|
+
module CommonModsIndexMethods
|
13
|
+
# Extracts the first and last names of persons and creates Solr::Field objects with for person_full_name_facet
|
14
|
+
#
|
15
|
+
# == Returns:
|
16
|
+
# An array of Solr::Field objects
|
17
|
+
#
|
18
|
+
def extract_person_full_names
|
19
|
+
names = {}
|
20
|
+
self.find_by_terms(:person).each do |person|
|
21
|
+
name_parts = person.children.inject({}) do |hash,child|
|
22
|
+
hash[child.get_attribute(:type)] = child.text if ["family","given"].include? child.get_attribute(:type)
|
23
|
+
hash
|
24
|
+
end
|
25
|
+
::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"]
|
26
|
+
names
|
27
|
+
end
|
28
|
+
return names
|
29
|
+
end
|
30
|
+
|
31
|
+
# Extracts the affiliations of persons and creates Solr::Field objects for them
|
32
|
+
#
|
33
|
+
# == Returns:
|
34
|
+
# An array of Solr::Field objects
|
35
|
+
#
|
36
|
+
def extract_person_organizations
|
37
|
+
orgs = {}
|
38
|
+
self.find_by_terms(:person,:affiliation).each do |org|
|
39
|
+
::Solrizer::Extractor.insert_solr_field_value(orgs, "mods_organization_facet", org.text)
|
40
|
+
end
|
41
|
+
return orgs
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|