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.
Files changed (106) hide show
  1. data/Gemfile +8 -1
  2. data/Gemfile.lock +46 -46
  3. data/HISTORY.textile +2 -0
  4. data/app/controllers/hydra/application_controller.rb +5 -0
  5. data/app/controllers/hydra/contributors_controller.rb +2 -1
  6. data/app/controllers/hydra/permissions_controller.rb +2 -2
  7. data/app/helpers/hydra/hydra_assets_helper_behavior.rb +4 -3
  8. data/app/models/ability.rb +97 -0
  9. data/app/models/common_metadata_asset.rb +2 -2
  10. data/app/models/generic_content.rb +2 -4
  11. data/app/models/generic_image.rb +3 -3
  12. data/app/models/hydra/datastream/common_mods_index_methods.rb +45 -0
  13. data/app/models/hydra/datastream/mods_article.rb +528 -0
  14. data/app/models/hydra/datastream/mods_dataset.rb +166 -0
  15. data/app/models/hydra/datastream/mods_generic_content.rb +496 -0
  16. data/app/models/hydra/datastream/mods_image.rb +496 -0
  17. data/app/models/hydra/datastream/rights_metadata.rb +190 -0
  18. data/app/models/mods_asset.rb +4 -4
  19. data/app/models/uses_default_partials.rb +2 -2
  20. data/app/views/catalog/_edit_partials/_default.html.erb +1 -1
  21. data/app/views/catalog/show.html.erb +1 -1
  22. data/app/views/contributors/_edit_conference.html.erb +1 -1
  23. data/app/views/contributors/_edit_organization.html.erb +1 -1
  24. data/app/views/contributors/_edit_person.html.erb +1 -1
  25. data/app/views/contributors/_show_organization.html.erb +1 -1
  26. data/app/views/hydra/file_assets/_index.html.erb +1 -1
  27. data/app/views/hydra/file_assets/_result.html.erb +1 -1
  28. data/app/views/hydra/permissions/index.html.erb +1 -1
  29. data/app/views/hydra/permissions/new.html.erb +1 -1
  30. data/app/views/mods_assets/_show_permissions.html.erb +1 -1
  31. data/hydra-head.gemspec +4 -6
  32. data/lib/hydra/access_controls_enforcement.rb +10 -6
  33. data/lib/hydra/access_controls_evaluation.rb +7 -71
  34. data/lib/hydra/assets.rb +1 -4
  35. data/lib/hydra/common_mods_index_methods.rb +5 -0
  36. data/lib/hydra/controller.rb +4 -7
  37. data/lib/hydra/file_assets.rb +3 -8
  38. data/lib/hydra/model_methods.rb +3 -2
  39. data/lib/hydra/model_mixins/common_metadata.rb +2 -2
  40. data/lib/hydra/model_mixins/mods_object.rb +3 -3
  41. data/lib/hydra/models/file_asset.rb +3 -3
  42. data/lib/hydra/mods_article.rb +7 -1
  43. data/lib/hydra/mods_dataset.rb +8 -0
  44. data/lib/hydra/mods_generic_content.rb +5 -0
  45. data/lib/hydra/mods_image.rb +5 -0
  46. data/lib/hydra/repository_controller.rb +14 -15
  47. data/lib/hydra/rights_metadata.rb +5 -1
  48. data/lib/hydra/submission_workflow.rb +1 -1
  49. data/lib/hydra-head/version.rb +1 -1
  50. data/lib/hydra.rb +1 -0
  51. data/lib/mediashelf/active_fedora_helper.rb +71 -0
  52. data/lib/uva/mods_index_methods.rb +5 -0
  53. data/test_support/etc/Gemfile +3 -2
  54. data/test_support/spec/controllers/catalog_controller_viewing_context_spec.rb +5 -7
  55. data/test_support/spec/controllers/file_assets_controller_spec.rb +3 -14
  56. data/test_support/spec/controllers/hydra-assets_controller_spec.rb +2 -2
  57. data/test_support/spec/helpers/access_controls_enforcement_spec.rb +14 -0
  58. data/test_support/spec/helpers/access_controls_evaluation_spec.rb +7 -16
  59. data/test_support/spec/helpers/hydra-repository_controller_spec.rb +0 -14
  60. data/test_support/spec/helpers/hydra_assets_helper_spec.rb +11 -11
  61. data/test_support/spec/helpers/hydra_model_methods_spec.rb +2 -2
  62. data/test_support/spec/integration/file_asset_spec.rb +0 -1
  63. data/test_support/spec/lib/common_mods_index_methods_spec.rb +1 -1
  64. data/test_support/spec/lib/hydra_submission_workflow_spec.rb +1 -1
  65. data/test_support/spec/models/ability_spec.rb +16 -0
  66. data/test_support/spec/models/file_asset_spec.rb +0 -1
  67. data/test_support/spec/models/hydra_rights_metadata_spec.rb +4 -5
  68. data/test_support/spec/models/mods_asset_spec.rb +2 -11
  69. data/vendor/cache/{active-fedora-4.0.0.rc13.gem → active-fedora-4.0.0.rc18.gem} +0 -0
  70. data/vendor/cache/blacklight-3.3.1.gem +0 -0
  71. data/vendor/cache/cancan-1.6.7.gem +0 -0
  72. data/vendor/cache/compass-0.12.1.gem +0 -0
  73. data/vendor/cache/compass-rails-1.0.1.gem +0 -0
  74. data/vendor/cache/compass-susy-plugin-0.9.gem +0 -0
  75. data/vendor/cache/factory_girl-2.6.4.gem +0 -0
  76. data/vendor/cache/gherkin-2.9.1.gem +0 -0
  77. data/vendor/cache/mail-2.4.4.gem +0 -0
  78. data/vendor/cache/nokogiri-1.5.2.gem +0 -0
  79. data/vendor/cache/om-1.6.0.rc3.gem +0 -0
  80. data/vendor/cache/orm_adapter-0.0.7.gem +0 -0
  81. data/vendor/cache/rack-cache-1.2.gem +0 -0
  82. data/vendor/cache/rspec-2.9.0.gem +0 -0
  83. data/vendor/cache/rspec-core-2.9.0.gem +0 -0
  84. data/vendor/cache/rspec-expectations-2.9.0.gem +0 -0
  85. data/vendor/cache/rspec-mocks-2.9.0.gem +0 -0
  86. data/vendor/cache/rspec-rails-2.9.0.gem +0 -0
  87. data/vendor/cache/sass-rails-3.2.5.gem +0 -0
  88. data/vendor/cache/stomp-1.2.2.gem +0 -0
  89. metadata +71 -59
  90. data/lib/hydra/image.rb +0 -178
  91. data/uninstall.rb +0 -1
  92. data/vendor/cache/compass-0.12.rc.1.gem +0 -0
  93. data/vendor/cache/factory_girl-2.6.1.gem +0 -0
  94. data/vendor/cache/gherkin-2.9.0.gem +0 -0
  95. data/vendor/cache/mail-2.4.3.gem +0 -0
  96. data/vendor/cache/nokogiri-1.5.0.gem +0 -0
  97. data/vendor/cache/om-1.5.3.gem +0 -0
  98. data/vendor/cache/orm_adapter-0.0.6.gem +0 -0
  99. data/vendor/cache/rack-cache-1.1.gem +0 -0
  100. data/vendor/cache/rspec-2.6.0.gem +0 -0
  101. data/vendor/cache/rspec-core-2.6.4.gem +0 -0
  102. data/vendor/cache/rspec-expectations-2.6.0.gem +0 -0
  103. data/vendor/cache/rspec-mocks-2.6.0.gem +0 -0
  104. data/vendor/cache/rspec-rails-2.6.1.gem +0 -0
  105. data/vendor/cache/sass-rails-3.2.4.gem +0 -0
  106. 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
- gem 'blacklight', :git=>'git://github.com/projectblacklight/blacklight.git'
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.rc2)
4
+ hydra-head (4.0.0.rc3)
20
5
  RedCloth (= 4.2.9)
21
- active-fedora (~> 4.0.0.rc13)
22
- blacklight (~> 3.2.2)
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.rc13)
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 (>= 1.5.3)
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.rc.1)
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.1)
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.0)
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.3)
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.0)
157
+ nokogiri (1.5.2)
157
158
  nori (1.1.0)
158
- om (1.5.3)
159
+ om (1.6.0.rc3)
159
160
  mediashelf-loggable
160
161
  nokogiri (>= 1.4.2)
161
- orm_adapter (0.0.6)
162
+ orm_adapter (0.0.7)
162
163
  polyglot (0.3.3)
163
164
  rack (1.4.1)
164
- rack-cache (1.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.6.0)
200
- rspec-core (~> 2.6.0)
201
- rspec-expectations (~> 2.6.0)
202
- rspec-mocks (~> 2.6.0)
203
- rspec-core (2.6.4)
204
- rspec-expectations (2.6.0)
205
- diff-lcs (~> 1.1.2)
206
- rspec-mocks (2.6.0)
207
- rspec-rails (2.6.1)
208
- actionpack (~> 3.0)
209
- activesupport (~> 3.0)
210
- railties (~> 3.0)
211
- rspec (~> 2.6.0)
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.4)
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.1)
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 (~> 2.6.0)
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.
@@ -0,0 +1,5 @@
1
+ class ApplicationController < ActionController::Base
2
+ def current_ability
3
+ @current_ability ||= Ability.new(current_user, session)
4
+ end
5
+ end
@@ -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
- #obj = load_af_instance_from_solr(document)
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
- obj = load_af_instance_from_solr(document)
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|
@@ -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