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.
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