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