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
@@ -1,14 +1,14 @@
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 ModsAsset < 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
- # declares a descMetadata datastream with type Hydra::ModsArticle
9
+ # declares a descMetadata datastream with type Hydra::Datastream::ModsArticle
10
10
  # basically, it is another expression of
11
- # has_metadata :name => "descMetadata", :type => Hydra::ModsArticle
11
+ # has_metadata :name => "descMetadata", :type => Hydra::Datastream::ModsArticle
12
12
  include Hydra::ModelMixins::ModsObject
13
13
 
14
14
  # adds helpful methods for basic hydra objects
@@ -4,9 +4,9 @@
4
4
  # a Fedora object for the Hypatia SET hydra content type
5
5
  class UsesDefaultPartials < ActiveFedora::Base
6
6
 
7
- has_metadata :name => "descMetadata", :type => Hydra::ModsGenericContent
7
+ has_metadata :name => "descMetadata", :type => Hydra::Datastream::ModsGenericContent
8
8
 
9
- has_metadata :name => "rightsMetadata", :type => Hydra::RightsMetadata
9
+ has_metadata :name => "rightsMetadata", :type => Hydra::Datastream::RightsMetadata
10
10
 
11
11
  # adds helpful methods for basic hydra objects.
12
12
  include Hydra::ModelMethods
@@ -7,7 +7,7 @@
7
7
 
8
8
 
9
9
 
10
- <% @fedora_object = ActiveFedora::Base.load_instance(params[:id])
10
+ <% @fedora_object = ActiveFedora::Base.find(params[:id])
11
11
  @datastreams = @fedora_object.datastreams
12
12
  %>
13
13
 
@@ -18,7 +18,7 @@
18
18
  <span class="next"><%= link_to_next_document(@next_document)%></span>
19
19
  </div>
20
20
  <%- end -%>
21
- <%- if editor? && controller.action_name != "delete" -%>
21
+ <%- if can?(:edit, @document) && controller.action_name != "delete" -%>
22
22
  <span class="edit-browse">
23
23
  <%= edit_and_browse_links %>
24
24
  </span>
@@ -5,7 +5,7 @@
5
5
  <% if @document_fedora.class.respond_to?(:conference_relator_terms) %>
6
6
  <% choices = @document_fedora.class.conference_relator_terms %>
7
7
  <% else %>
8
- <% choices = Hydra::ModsArticle.conference_relator_terms %>
8
+ <% choices = Hydra::Datastream::ModsArticle.conference_relator_terms %>
9
9
  <% end %>
10
10
  <li>
11
11
  <dl class="conference contributor" id="<%= base_id %>">
@@ -5,7 +5,7 @@
5
5
  <% if @document_fedora.class.respond_to?(:organization_relator_terms) %>
6
6
  <% choices = @document_fedora.class.organization_relator_terms %>
7
7
  <% else %>
8
- <% choices = Hydra::ModsArticle.organization_relator_terms %>
8
+ <% choices = Hydra::Datastream::ModsArticle.organization_relator_terms %>
9
9
  <% end %>
10
10
 
11
11
  <dl class="organization contributor" id="<%= base_id %>">
@@ -5,7 +5,7 @@
5
5
  <% if @document_fedora.class.respond_to?(:person_relator_terms) %>
6
6
  <% choices = @document_fedora.class.person_relator_terms %>
7
7
  <% else %>
8
- <% choices = Hydra::ModsArticle.person_relator_terms %>
8
+ <% choices = Hydra::Datastream::ModsArticle.person_relator_terms %>
9
9
  <% end %>
10
10
  <fieldset class="person contributor" id="<%= base_id %>">
11
11
  <%- if @document_fedora.datastreams["descMetadata"].class.terminology.has_term?(:person, :computing_id) %>
@@ -5,7 +5,7 @@
5
5
  <% if @document_fedora.class.respond_to?(:organization_relator_terms) %>
6
6
  <% choices = @document_fedora.class.organization_relator_terms %>
7
7
  <% else %>
8
- <% choices = Hydra::ModsArticle.organization_relator_terms %>
8
+ <% choices = Hydra::Datastream::ModsArticle.organization_relator_terms %>
9
9
  <% end %>
10
10
  <% unless get_values_from_datastream(@document_fedora,"descMetadata", [{:organization => organization_counter}, :namePart]).first.empty? %>
11
11
  <li id="<%= base_id %>">
@@ -7,7 +7,7 @@
7
7
  </table>
8
8
  <% end %>
9
9
 
10
- <% if !@document.nil? && editor? && params[:number_of_files].to_i > 0 %>
10
+ <% if !@document.nil? && can?(:edit, @document) && params[:number_of_files].to_i > 0 %>
11
11
  <%- container_content_type_param = defined?(container_content_type) ? "?container_content_type=#{container_content_type}" : "" %>
12
12
  <fieldset id='uploader'>
13
13
  <legend>File Upload</legend>
@@ -4,7 +4,7 @@
4
4
  </td>
5
5
  <td>
6
6
 
7
- <% if editor? %>
7
+ <% if can? :edit, @document %>
8
8
  <%= button_to("Delete", "/file_assets/" + result["id"] + "?container_id=" + @document[:id], :confirm => "Are you sure you want to delete this file?", :method => :delete, :class => "delete-button") %>
9
9
 
10
10
  <% end %>
@@ -1 +1 @@
1
- <%= render :partial=>"permissions/index" %>
1
+ <%= render :partial=>"hydra/permissions/index" %>
@@ -1 +1 @@
1
- <%= render :partial=>"permissions/new" %>
1
+ <%= render :partial=>"hydra/permissions/new" %>
@@ -1,7 +1,7 @@
1
1
  <%- document ||= @document -%>
2
2
  <div>
3
3
  <dl class="defList">
4
- <% if editor? %>
4
+ <% if can? :edit, document %>
5
5
  <h3>Group</h3>
6
6
  <%= get_data_with_label(document, "Discover Access:", 'discover_access_group_t', :default=>"private") %>
7
7
  <%= get_data_with_label(document, "Read & Download Access:", 'read_access_group_t', :default=>"private") %>
data/hydra-head.gemspec CHANGED
@@ -13,22 +13,20 @@ Gem::Specification.new do |s|
13
13
  s.description = %q{Hydra-Head is a Rails Engine containing the core code for a Hydra application. The full hydra stack includes: Blacklight, Fedora, Solr, active-fedora, solrizer, and om}
14
14
 
15
15
  s.add_dependency "rails", '~> 3.2.1'
16
- s.add_dependency "blacklight", '~>3.2.2'
16
+ s.add_dependency "blacklight", '~>3.3.1'
17
17
  s.add_dependency "devise"
18
- s.add_dependency "active-fedora", '~>4.0.0.rc13'
18
+ s.add_dependency "active-fedora", '~>4.0.0.rc18'
19
19
  s.add_dependency 'RedCloth', '=4.2.9'
20
20
  s.add_dependency 'solrizer-fedora', '>=1.2.5'
21
21
  s.add_dependency 'block_helpers'
22
22
  s.add_dependency 'sanitize'
23
- s.add_dependency 'om', '=1.5.3'
24
-
23
+ s.add_dependency 'cancan'
25
24
 
26
25
  s.add_development_dependency 'sqlite3-ruby'
27
26
 
28
27
  s.add_development_dependency 'yard'
29
28
  s.add_development_dependency 'jettywrapper', ">=1.0.4"
30
- #s.add_development_dependency 'rspec-rails', '>= 2.8.0'
31
- s.add_development_dependency 'rspec-rails', '~> 2.6.0'
29
+ s.add_development_dependency 'rspec-rails'
32
30
  s.add_development_dependency 'mocha'
33
31
  s.add_development_dependency 'cucumber-rails', '>=1.2.0'
34
32
  s.add_development_dependency 'factory_girl'
@@ -18,9 +18,13 @@ module Hydra::AccessControlsEnforcement
18
18
  # end
19
19
  def enforce_access_controls(opts={})
20
20
  controller_action = params[:action].to_s
21
- if params[:action] == "destroy" then controller_action = "edit" end
21
+ controller_action = "edit" if params[:action] == "destroy"
22
22
  delegate_method = "enforce_#{controller_action}_permissions"
23
- self.send(delegate_method.to_sym)
23
+ if self.respond_to?(delegate_method.to_sym, true)
24
+ self.send(delegate_method.to_sym)
25
+ else
26
+ true
27
+ end
24
28
  end
25
29
 
26
30
 
@@ -71,7 +75,7 @@ module Hydra::AccessControlsEnforcement
71
75
  if params[:viewing_context] == "browse"
72
76
  session[:viewing_context] = params[:viewing_context]
73
77
  elsif session[:viewing_context] == "edit"
74
- if editor?
78
+ if can? :edit, params[:id]
75
79
  logger.debug("enforce_viewing_context_for_show_requests redirecting to edit")
76
80
  if params[:files]
77
81
  redirect_to :action=>:edit, :files=>true
@@ -104,7 +108,7 @@ module Hydra::AccessControlsEnforcement
104
108
  end
105
109
  end
106
110
  end
107
- unless reader?
111
+ unless can? :read, params[:id]
108
112
  flash[:notice]= "You do not have sufficient access privileges to read this document, which has been marked private."
109
113
  redirect_to(:action => 'index', :q => nil , :f => nil) and return false
110
114
  end
@@ -116,7 +120,7 @@ module Hydra::AccessControlsEnforcement
116
120
  def enforce_edit_permissions(opts={})
117
121
  logger.debug("Enforcing edit permissions")
118
122
  load_permissions_from_solr
119
- if !editor?
123
+ if !can? :edit, params[:id]
120
124
  session[:viewing_context] = "browse"
121
125
  flash[:notice] = "You do not have sufficient privileges to edit this document. You have been redirected to the read-only view."
122
126
  redirect_to :action=>:show
@@ -164,7 +168,7 @@ module Hydra::AccessControlsEnforcement
164
168
  # end
165
169
  def add_access_controls_to_solr_params(solr_parameters, user_parameters)
166
170
  apply_gated_discovery(solr_parameters, user_parameters)
167
- if !reader?
171
+ if !can? :read, params[:id]
168
172
  solr_parameters[:qt] = Blacklight.config[:public_qt]
169
173
  end
170
174
  end
@@ -16,86 +16,22 @@ module Hydra::AccessControlsEvaluation
16
16
  # @example
17
17
  # test_permission(:edit)
18
18
  def test_permission(permission_type)
19
- # if !current_user.nil?
20
- if (@permissions_solr_document == nil)
21
- logger.warn("SolrDocument is nil")
22
- end
23
-
24
- if current_user.nil?
25
- user = "public"
26
- logger.debug("current_user is nil, assigning public")
27
- else
28
- user = user_key
29
- end
30
-
31
- user_groups = RoleMapper.roles(user)
32
- # everyone is automatically a member of the group 'public'
33
- user_groups.push 'public' unless user_groups.include?('public')
34
- # logged-in users are automatically members of the group "registered"
35
- user_groups.push 'registered' unless (user == "public" || user_groups.include?('registered') )
36
-
37
- logger.debug("User #{user} is a member of groups: #{user_groups.inspect}")
38
- case permission_type
39
- when :edit
40
- logger.debug("Checking edit permissions for user: #{user}")
41
- group_intersection = user_groups & edit_groups
42
- result = !group_intersection.empty? || edit_persons.include?(user)
43
- when :read
44
- logger.debug("Checking read permissions for user: #{user}")
45
- group_intersection = user_groups & read_groups
46
- result = !group_intersection.empty? || read_persons.include?(user)
47
- else
48
- result = false
49
- end
50
- logger.debug("test_permission result: #{result}")
51
- return result
52
- # else
53
- # logger.debug("nil user, test_permission returning false")
54
- # return false
55
- # end
19
+ ActiveSupport::Deprecation.warn("test_permission has been deprecated. Use can? instead")
20
+ can? permission_type, @permissions_solr_document
56
21
  end
57
-
22
+
58
23
  # Test whether the the current user has edit permissions.
59
24
  # This is available as a view helper method as well as within your controllers.
60
25
  def editor?
61
- test_permission(:edit) or (current_user and current_user.is_being_superuser?(session))
26
+ logger.warn("editor? has been deprecated. Use can? instead")
27
+ can? :edit, @permissions_solr_document
62
28
  end
63
29
 
64
30
  # Test whether the the current user has read permissions.
65
31
  # This is available as a view helper method as well as within your controllers.
66
32
  def reader?
67
- test_permission(:read) or (current_user and current_user.is_being_superuser?(session))
68
- end
69
-
70
- private
71
- def edit_groups
72
- edit_group_field = Hydra.config[:permissions][:edit][:group]
73
- eg = ((@permissions_solr_document == nil || @permissions_solr_document.fetch(edit_group_field,nil) == nil) ? [] : @permissions_solr_document.fetch(edit_group_field,nil))
74
- logger.debug("edit_groups: #{eg.inspect}")
75
- return eg
76
- end
77
-
78
- # edit implies read, so read_groups is the union of edit and read groups
79
- def read_groups
80
- read_group_field = Hydra.config[:permissions][:read][:group]
81
- rg = edit_groups | ((@permissions_solr_document == nil || @permissions_solr_document.fetch(read_group_field,nil) == nil) ? [] : @permissions_solr_document.fetch(read_group_field,nil))
82
- logger.debug("read_groups: #{rg.inspect}")
83
- return rg
84
- end
85
-
86
- def edit_persons
87
- edit_person_field = Hydra.config[:permissions][:edit][:individual]
88
- ep = ((@permissions_solr_document == nil || @permissions_solr_document.fetch(edit_person_field,nil) == nil) ? [] : @permissions_solr_document.fetch(edit_person_field,nil))
89
- logger.debug("edit_persons: #{ep.inspect}")
90
- return ep
91
- end
92
-
93
- # edit implies read, so read_persons is the union of edit and read persons
94
- def read_persons
95
- read_individual_field = Hydra.config[:permissions][:read][:individual]
96
- rp = edit_persons | ((@permissions_solr_document == nil || @permissions_solr_document.fetch(read_individual_field,nil) == nil) ? [] : @permissions_solr_document.fetch(read_individual_field,nil))
97
- logger.debug("read_persons: #{rp.inspect}")
98
- return rp
33
+ logger.warn("reader? has been deprecated. Use can? instead")
34
+ can? :read, @permissions_solr_document
99
35
  end
100
36
 
101
37
  end
data/lib/hydra/assets.rb CHANGED
@@ -90,7 +90,7 @@ module Hydra::Assets
90
90
  end
91
91
 
92
92
  def destroy
93
- af = ActiveFedora::Base.find(params[:id])
93
+ af = ActiveFedora::Base.find(params[:id], :cast=>true)
94
94
  assets = af.destroy_child_assets
95
95
  af.delete
96
96
  msg = "Deleted #{params[:id]}"
@@ -105,9 +105,6 @@ module Hydra::Assets
105
105
 
106
106
  protected
107
107
 
108
- def load_document
109
- @document = load_document_from_params
110
- end
111
108
 
112
109
 
113
110
  def mods_assets_update_validation
@@ -8,6 +8,11 @@
8
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
9
 
10
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
+
11
16
  # Extracts the first and last names of persons and creates Solr::Field objects with for person_full_name_facet
12
17
  #
13
18
  # == Returns:
@@ -24,15 +24,12 @@ module Hydra::Controller
24
24
  # Sets @document_fedora with the loaded object
25
25
  # Sets @file_assets with file objects that are children of the loaded object
26
26
  def load_fedora_document
27
- @document_fedora = ActiveFedora::Base.find(params[:id])
28
- unless @document_fedora.class.include?(ActiveFedora::Relationships)
29
- @document_fedora.class.send :include, ActiveFedora::Relationships
30
- end
31
- unless @document_fedora.class.include?(ActiveFedora::FileManagement)
32
- @document_fedora.class.send :include, ActiveFedora::FileManagement
27
+ @document_fedora = ActiveFedora::Base.find(params[:id], :cast=>true)
28
+ unless @document_fedora.class.include?(Hydra::ModelMethods)
29
+ @document_fedora.class.send :include, Hydra::ModelMethods
33
30
  end
34
31
 
35
- @file_assets = @document_fedora.file_objects(:response_format=>:solr)
32
+ @file_assets = @document_fedora.parts(:response_format=>:solr)
36
33
  end
37
34
 
38
35
 
@@ -1,7 +1,6 @@
1
1
  module Hydra::FileAssets
2
2
  extend ActiveSupport::Concern
3
3
 
4
-
5
4
  included do
6
5
  include Hydra::AccessControlsEnforcement
7
6
  include Hydra::AssetsControllerHelper
@@ -33,7 +32,7 @@ module Hydra::FileAssets
33
32
  @container_response, @document = get_solr_response_for_doc_id(params[:asset_id])
34
33
 
35
34
  # Including these lines for backwards compatibility (until we can use Rails3 callbacks)
36
- @container = ActiveFedora::Base.find(params[:asset_id])
35
+ @container = ActiveFedora::Base.find(params[:asset_id], :cast=>true)
37
36
  @solr_result = @container.file_objects(:response_format=>:solr)
38
37
  end
39
38
 
@@ -98,7 +97,7 @@ module Hydra::FileAssets
98
97
 
99
98
  # Common destroy method for all AssetsControllers
100
99
  def destroy
101
- ActiveFedora::Base.find(params[:id]).delete
100
+ ActiveFedora::Base.find(params[:id], :cast=>true).delete
102
101
 
103
102
  flash[:notice] = "Deleted #{params[:id]} from #{params[:container_id]}."
104
103
 
@@ -125,11 +124,7 @@ module Hydra::FileAssets
125
124
  pid = @file_asset.container_id
126
125
  @downloadable = false
127
126
  # A FileAsset is downloadable iff the user has read or higher access to a parent
128
- begin
129
- @response, @permissions_solr_document = get_solr_response_for_doc_id(pid)
130
- rescue Blacklight::Exceptions::InvalidSolrID
131
- end
132
- if reader?
127
+ if can? :read, @file_asset
133
128
  @downloadable = true
134
129
  end
135
130
 
@@ -2,8 +2,9 @@ module Hydra::ModelMethods
2
2
  extend ActiveSupport::Concern
3
3
 
4
4
  included do
5
- extend ActiveFedora::Relationships
6
- extend ActiveFedora::FileManagement
5
+ unless self.class == Module
6
+ self.has_many :parts, :class_name=>'ActiveFedora::Base', :property=>:is_part_of
7
+ end
7
8
  end
8
9
 
9
10
  #
@@ -15,10 +15,10 @@ module Hydra::ModelMixins
15
15
 
16
16
  def self.included(klazz)
17
17
  # Uses the Hydra Rights Metadata Schema for tracking access permissions & copyright
18
- klazz.has_metadata :name => "rightsMetadata", :type => Hydra::RightsMetadata
18
+ klazz.has_metadata :name => "rightsMetadata", :type => Hydra::Datastream::RightsMetadata
19
19
 
20
20
  # Ensure that objects assert the commonMetadata cModel
21
21
  # klazz.relationships << :has_model => "info:fedora/hydra-cModel:commonMetadata"
22
22
  end
23
23
  end
24
- end
24
+ end
@@ -1,16 +1,16 @@
1
1
  # Include this into models to specify that the descMetadata datastream contains basic MODS metadata
2
2
  #
3
3
  # Explicitly declares:
4
- # descMetadata datastream using Hydra::ModsArticle Terminology
4
+ # descMetadata datastream using Hydra::Datastream::ModsArticle Terminology
5
5
  #
6
6
  module Hydra::ModelMixins::ModsObject
7
7
 
8
8
  def self.included(klazz)
9
9
  # Uses the Hydra MODS Basic profile for tracking descriptive metadata
10
- klazz.has_metadata :name => "descMetadata", :type => Hydra::ModsArticle
10
+ klazz.has_metadata :name => "descMetadata", :type => Hydra::Datastream::ModsArticle
11
11
 
12
12
  # Ensure that objects assert the modsObject cModel
13
13
  # klazz.relationships << :has_model => "info:fedora/hydra-cModel:modsObject"
14
14
  end
15
15
 
16
- end
16
+ end
@@ -28,12 +28,12 @@ module Hydra
28
28
 
29
29
 
30
30
  def label
31
- descMetadata.title_values.first
31
+ descMetadata.title.first
32
32
  end
33
33
 
34
34
  def label=(label)
35
35
  super
36
- descMetadata.title_values = label
36
+ descMetadata.title = label
37
37
  end
38
38
 
39
39
  # augments add_file_datastream to also put file size (in bytes/KB/MB/GB/TB) in dc:extent
@@ -46,7 +46,7 @@ module Hydra
46
46
  else
47
47
  size = ""
48
48
  end
49
- datastreams["descMetadata"].extent_values = size
49
+ datastreams["descMetadata"].extent = size
50
50
  end
51
51
 
52
52
  # Override ActiveFedora::Base.to_solr to...
@@ -2,9 +2,15 @@ require "uva/mods_index_methods"
2
2
  module Hydra
3
3
 
4
4
  class ModsArticle < ActiveFedora::NokogiriDatastream
5
- include Hydra::CommonModsIndexMethods
5
+ include Hydra::Datastream::CommonModsIndexMethods
6
6
  include Uva::ModsIndexMethods
7
7
 
8
+ def initialize(digital_object, dsid, options={})
9
+ ActiveSupport::Deprecation.warn("Hydra::ModsArticle has been deprecated. Use Hydra::Datastream::ModsArticle instead")
10
+ super
11
+
12
+ end
13
+
8
14
  set_terminology do |t|
9
15
  t.root(:path=>"mods", :xmlns=>"http://www.loc.gov/mods/v3", :schema=>"http://www.loc.gov/standards/mods/v3/mods-3-2.xsd")
10
16
 
@@ -1,7 +1,15 @@
1
1
  require "uva/mods_index_methods"
2
2
  module Hydra
3
+
3
4
  class ModsDataset < ActiveFedora::NokogiriDatastream
4
5
  include Hydra::CommonModsIndexMethods
6
+
7
+ def initialize(digital_object, dsid, options={})
8
+ ActiveSupport::Deprecation.warn("Hydra::ModsDataset has been deprecated. Use Hydra::Datastream::ModsDataset instead")
9
+ super
10
+
11
+ end
12
+
5
13
  set_terminology do |t|
6
14
  t.root(:path=>"mods", :xmlns=>"http://www.loc.gov/mods/v3", :schema=>"http://www.loc.gov/standards/mods/v3/mods-3-2.xsd")
7
15
 
@@ -2,6 +2,11 @@ module Hydra
2
2
  class ModsGenericContent < ActiveFedora::NokogiriDatastream
3
3
  include Hydra::CommonModsIndexMethods
4
4
 
5
+ def initialize(digital_object, dsid, options={})
6
+ ActiveSupport::Deprecation.warn("Hydra::ModsGenericContent has been deprecated. Use Hydra::Datastream::ModsGenericContent instead")
7
+ super
8
+ end
9
+
5
10
  set_terminology do |t|
6
11
  t.root(:path=>"mods", :xmlns=>"http://www.loc.gov/mods/v3", :schema=>"http://www.loc.gov/standards/mods/v3/mods-3-2.xsd")
7
12
 
@@ -2,6 +2,11 @@ module Hydra
2
2
  class ModsImage < ActiveFedora::NokogiriDatastream
3
3
  include Hydra::CommonModsIndexMethods
4
4
 
5
+ def initialize(digital_object, dsid, options={})
6
+ ActiveSupport::Deprecation.warn("Hydra::ModsImage has been deprecated. Use Hydra::Datastream::ModsImage instead")
7
+ super
8
+ end
9
+
5
10
  set_terminology do |t|
6
11
  t.root(:path=>"mods", :xmlns=>"http://www.loc.gov/mods/v3", :schema=>"http://www.loc.gov/standards/mods/v3/mods-3-2.xsd")
7
12
 
@@ -38,15 +38,6 @@ module Hydra::RepositoryController
38
38
  ::ActiveFedora::SolrService.solr_name(field_name, field_type)
39
39
  end
40
40
 
41
- # Uses submitted params Hash to figure out what Model to load
42
- # params should contain :content_type and :id
43
- def load_document_from_params
44
- af_model = retrieve_af_model(params[:content_type])
45
- unless af_model
46
- af_model = ModsAsset
47
- end
48
- return af_model.find(params[:id])
49
- end
50
41
 
51
42
  # Returns a list of datastreams for download.
52
43
  # Uses user's roles and "mime_type" value in submitted params to decide what to return.
@@ -55,7 +46,7 @@ module Hydra::RepositoryController
55
46
  if opts[:canonical]
56
47
  mime_type = opts[:mime_type] ? opts[:mime_type] : "application/pdf"
57
48
  result = filter_datastreams_for_mime_type(fedora_object.datastreams, mime_type).sort.first[1]
58
- elsif editor?
49
+ elsif can? :edit, fedora_object
59
50
  if params["mime_type"] == "all"
60
51
  result = fedora_object.datastreams
61
52
  else
@@ -82,6 +73,19 @@ module Hydra::RepositoryController
82
73
  end
83
74
 
84
75
  protected
76
+ def load_document
77
+ @document = load_document_from_params
78
+ end
79
+
80
+ # Uses submitted params Hash to figure out what Model to load
81
+ # params should contain :content_type and :id
82
+ def load_document_from_params
83
+ af_model = retrieve_af_model(params[:content_type])
84
+ unless af_model
85
+ af_model = ModsAsset
86
+ end
87
+ return af_model.find(params[:id])
88
+ end
85
89
 
86
90
  def retrieve_af_model(class_name, opts={})
87
91
  if !class_name.nil?
@@ -98,11 +102,6 @@ module Hydra::RepositoryController
98
102
  return false
99
103
  end
100
104
 
101
- def load_af_instance_from_solr(doc)
102
- pid = doc[:id] ? doc[:id] : doc[:id.to_s]
103
- pid ? ActiveFedora::Base.load_instance_from_solr(pid,doc) : nil
104
- end
105
-
106
105
  private
107
106
 
108
107
  def filter_datastreams_for_mime_type(datastreams_hash, mime_type)
@@ -1,7 +1,11 @@
1
- require "active-fedora"
2
1
  module Hydra
3
2
  class RightsMetadata < ActiveFedora::NokogiriDatastream
4
3
 
4
+ def initialize(digital_object, dsid, options={})
5
+ ActiveSupport::Deprecation.warn("Hydra::RightsMetadata has been deprecated. Use Hydra::Datastream::RightsMetadata instead")
6
+ super
7
+ end
8
+
5
9
  set_terminology do |t|
6
10
  t.root(:path=>"rightsMetadata", :xmlns=>"http://hydra-collab.stanford.edu/schemas/rightsMetadata/v1", :schema=>"http://github.com/projecthydra/schemas/tree/v1/rightsMetadata.xsd")
7
11
  t.copyright {
@@ -118,7 +118,7 @@ module Hydra::SubmissionWorkflow
118
118
  begin
119
119
  af = ActiveFedora::Base.load_instance_from_solr(params[:id])
120
120
  return "#{ActiveFedora::ContentModel.known_models_for( af ).first}".underscore.pluralize.to_sym
121
- rescue
121
+ rescue Exception => e #TODO this should be ActiveFedora::ObjectNotFoundError
122
122
  nil
123
123
  end
124
124
  end
@@ -1,4 +1,4 @@
1
1
  module HydraHead
2
- VERSION = "4.0.0.rc2"
2
+ VERSION = "4.0.0.rc3"
3
3
  end
4
4
 
data/lib/hydra.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "blacklight"
2
+ require 'active-fedora'
2
3
  # Hydra libraries
3
4
  module Hydra
4
5
  extend Blacklight::GlobalConfigurable