hydra-head 4.0.0.rc2 → 4.0.0.rc3
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.
- 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
|