fcrepo_admin 0.3.1 → 0.3.2

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 (28) hide show
  1. data/HISTORY.rdoc +8 -3
  2. data/app/controllers/fcrepo_admin/datastreams_controller.rb +27 -21
  3. data/app/controllers/fcrepo_admin/objects_controller.rb +16 -41
  4. data/app/helpers/fcrepo_admin/objects_helper.rb +41 -1
  5. data/app/views/fcrepo_admin/datastreams/_content.html.erb +0 -4
  6. data/app/views/fcrepo_admin/datastreams/_context_nav_items.html.erb +17 -0
  7. data/app/views/fcrepo_admin/datastreams/edit.html.erb +8 -14
  8. data/app/views/fcrepo_admin/datastreams/upload.html.erb +10 -0
  9. data/app/views/fcrepo_admin/objects/_context_nav_items.html.erb +9 -0
  10. data/app/views/fcrepo_admin/objects/_properties.html.erb +1 -1
  11. data/app/views/fcrepo_admin/objects/audit_trail.html.erb +9 -9
  12. data/app/views/fcrepo_admin/objects/show.html.erb +8 -8
  13. data/app/views/fcrepo_admin/shared/_context_nav_list.html.erb +5 -0
  14. data/app/views/layouts/fcrepo_admin/datastreams.html.erb +2 -1
  15. data/app/views/layouts/fcrepo_admin/objects.html.erb +1 -1
  16. data/config/locales/fcrepo_admin.en.yml +19 -14
  17. data/config/routes.rb +6 -1
  18. data/lib/fcrepo_admin/version.rb +1 -1
  19. data/spec/features/datastreams/edit.html.erb_spec.rb +0 -3
  20. data/spec/features/datastreams/show.html.erb_spec.rb +1 -1
  21. data/spec/features/datastreams/upload.html.erb_spec.rb +27 -0
  22. data/spec/features/objects/audit_trail.html.erb_spec.rb +1 -1
  23. data/spec/features/objects/show.html.erb_spec.rb +2 -2
  24. metadata +9 -8
  25. data/app/views/fcrepo_admin/objects/_object_nav.html.erb +0 -5
  26. data/app/views/fcrepo_admin/objects/_object_nav_items.html.erb +0 -9
  27. data/lib/fcrepo_admin/controller_behavior.rb +0 -32
  28. data/spec/fixtures/auditable.foxml.xml +0 -110
@@ -1,12 +1,17 @@
1
- === 0.3.0
1
+ === 0.3.1
2
+
3
+ * Object and datastream context nav menus added.
4
+ * Audit trail moved into objects controller
5
+
6
+ == 0.3.0
2
7
 
3
8
  * Feature: Permissions and inherited permissions added to object show view.
4
9
 
5
- === 0.2.0
10
+ == 0.2.0
6
11
 
7
12
  * Feature: Datastream content editing.
8
13
 
9
- === 0.1.0
14
+ == 0.1.0
10
15
 
11
16
  Initial release to RubyGems.
12
17
 
@@ -3,68 +3,74 @@ require 'mime/types'
3
3
  module FcrepoAdmin
4
4
  class DatastreamsController < ApplicationController
5
5
 
6
- # include FcrepoAdmin::ControllerBehavior
7
-
8
6
  layout 'fcrepo_admin/datastreams'
9
7
 
10
8
  # Additional types of content that should be displayed inline
11
9
  TEXT_MIME_TYPES = ['application/xml', 'application/rdf+xml', 'application/json']
10
+ MAX_INLINE_SIZE = 1024 * 64
12
11
 
13
- # before_filter :load_and_authorize_object, :only => :index
14
- before_filter :load_and_authorize_datastream # , :except => :index
15
- # before_filter :load_datastream, :only => :download
12
+ before_filter :load_and_authorize_datastream
16
13
  before_filter :inline_filter, :only => [:show, :edit]
17
14
 
18
- # def index
19
- # end
20
-
21
15
  def show
22
- if params[:download]
23
- mimetypes = MIME::Types[@datastream.mimeType]
24
- send_data @datastream.content, :disposition => 'attachment', :type => @datastream.mimeType, :filename => "#{@datastream.pid.sub(/:/, '_')}_#{@datastream.dsid}.#{mimetypes.first.extensions.first}"
25
- end
26
16
  end
27
17
 
28
- # def download
29
- # mimetypes = MIME::Types[@datastream.mimeType]
30
- # send_data @datastream.content, :disposition => 'attachment', :type => @datastream.mimeType, :filename => "#{@datastream.pid.sub(/:/, '_')}_#{@datastream.dsid}.#{mimetypes.first.extensions.first}"
31
- # end
18
+ def download
19
+ mimetypes = MIME::Types[@datastream.mimeType]
20
+ send_data @datastream.content, :disposition => 'attachment', :type => @datastream.mimeType, :filename => "#{@datastream.pid.sub(/:/, '_')}_#{@datastream.dsid}.#{mimetypes.first.extensions.first}"
21
+ end
32
22
 
33
23
  def edit
34
24
  end
35
25
 
26
+ def upload
27
+ end
28
+
36
29
  def update
37
- if params[:file]
30
+ if params[:file] # file uploaded
38
31
  @datastream.content = params[:file].read
39
- else
32
+ else # content submitted
40
33
  @datastream.content = params[:content]
41
34
  end
42
35
  @object.save
43
- flash[:notice] = "Datastream content updated."
36
+ flash[:notice] = "Datastream content updated." # i18n
44
37
  redirect_to fcrepo_admin.object_datastream_url(@object, @datastream.dsid)
45
38
  end
46
39
 
47
40
  private
48
41
 
49
42
  def load_and_authorize_datastream
43
+ load_object
50
44
  load_datastream
51
45
  authorize_datastream
52
46
  end
47
+
48
+ def load_object
49
+ @object = ActiveFedora::Base.find(params[:object_id], :cast => true)
50
+ end
53
51
 
54
52
  def load_datastream
55
- @object = ActiveFedora::Base.find(params[:object_id], :cast => true)
56
53
  @datastream = @object.datastreams[params[:id]]
57
54
  end
58
55
 
59
56
  def authorize_datastream
57
+ action = case params[:action]
58
+ when 'upload'
59
+ :edit
60
+ when 'download'
61
+ :read
62
+ else
63
+ params[:action].to_sym
64
+ end
60
65
  # Datastream permissions are solely based on object permissions
61
- authorize! params[:action].to_sym, @object
66
+ authorize! action, @object
62
67
  end
63
68
 
64
69
  protected
65
70
 
66
71
  def inline_filter
67
72
  @inline = @datastream.mimeType.start_with?('text/') || TEXT_MIME_TYPES.include?(@datastream.mimeType)
73
+ # @inline &&= @datastream.dsSize <= MAX_INLINE_SIZE
68
74
  end
69
75
 
70
76
  end
@@ -5,14 +5,10 @@ module FcrepoAdmin
5
5
 
6
6
  PROPERTIES = [:owner_id, :state, :create_date, :modified_date, :label]
7
7
 
8
- helper_method :apo_enforcement_enabled?
9
8
  helper_method :object_properties
10
- helper_method :admin_policy_object?
11
- helper_method :object_type
12
- helper_method :has_permissions?
13
9
 
14
10
  before_filter :load_and_authorize_object
15
- before_filter :load_apo_info, :only => :show # depends on load_and_authz_object
11
+ before_filter :load_apo_info, :only => :show
16
12
 
17
13
  def show
18
14
  end
@@ -43,49 +39,28 @@ module FcrepoAdmin
43
39
 
44
40
  protected
45
41
 
46
- def apo_enforcement_enabled?
47
- # Including Hydra::PolicyAwareAccessControlsEnforcement in ApplicationController
48
- # appears to be the only way that APO access control enforcement can be enabled.
49
- self.class.ancestors.include?(Hydra::PolicyAwareAccessControlsEnforcement)
50
- end
51
-
52
42
  def object_properties
53
- properties = {}
54
- PROPERTIES.each { |p| properties[p] = @object.send(p) }
55
- properties
56
- end
57
-
58
- def object_type
59
- @object.class.to_s
43
+ unless @object_properties
44
+ @object_properties = {}
45
+ PROPERTIES.each { |p| @object_properties[p] = @object.send(p) }
46
+ end
47
+ @object_properties
60
48
  end
61
49
 
62
- def load_apo_info
63
- @apo_relationship_name = nil
64
- @apo = nil
50
+ def apo_relationship_name
65
51
  @object.reflections.each_value do |reflection|
66
- if reflection.options[:property] == :is_governed_by \
67
- && reflection.macro == :belongs_to
68
- @apo_relationship_name = reflection.name
69
- @apo = @object.send(@apo_relationship_name)
70
- break
71
- end
52
+ # XXX This test should also check that reflection class is identical to admin policy class
53
+ return reflection.name if reflection.options[:property] == :is_governed_by && reflection.macro == :belongs_to
72
54
  end
55
+ nil
73
56
  end
74
57
 
75
- def has_permissions?
76
- @object.is_a?(Hydra::ModelMixins::RightsMetadata)
77
- end
78
-
79
- def admin_policy_object?
80
- @object.is_a?(apo_class)
81
- end
82
-
83
- def apo_class
84
- # XXX Ideally we would use Hydra::PolicyAwareAccessControlsEnforcement#policy_class,
85
- # but it's only available if it's been included in the application controller, i.e.,
86
- # if APO access control enforcement is enabled. We want to know the name of the
87
- # relationship regardless of whether policy enforcement is enabled.
88
- Hydra.config[:permissions].fetch(:policy_class, Hydra::AdminPolicy)
58
+ def load_apo_info
59
+ @apo_relationship_name ||= apo_relationship_name
60
+ @object_admin_policy ||= @apo_relationship_name ? @object.send(@apo_relationship_name) : nil
61
+ # Including Hydra::PolicyAwareAccessControlsEnforcement in ApplicationController
62
+ # appears to be the only way that APO access control enforcement can be enabled.
63
+ @apo_enforcement_enabled ||= self.class.ancestors.include?(Hydra::PolicyAwareAccessControlsEnforcement)
89
64
  end
90
65
 
91
66
  end
@@ -2,7 +2,47 @@ module FcrepoAdmin
2
2
  module ObjectsHelper
3
3
 
4
4
  def object_title
5
- "#{@object.class.to_s} #{@object.pid}"
5
+ "#{object_type} #{@object.pid}"
6
+ end
7
+
8
+ def object_type
9
+ @object.class.to_s
10
+ end
11
+
12
+ def object_has_permissions?
13
+ @object.is_a?(Hydra::ModelMixins::RightsMetadata)
14
+ end
15
+
16
+ def object_model_belongs_to_apo?
17
+ !@apo_relationship_name.nil?
18
+ end
19
+
20
+ def object_admin_policy
21
+ @object_admin_policy
22
+ end
23
+
24
+ def object_has_admin_policy?
25
+ !object_admin_policy.nil?
26
+ end
27
+
28
+ def object_has_inherited_permissions?
29
+ object_has_admin_policy?
30
+ end
31
+
32
+ def object_inherited_permissions
33
+ object_admin_policy && object_admin_policy.default_permissions
34
+ end
35
+
36
+ def admin_policy_enforcement_enabled?
37
+ @apo_enforcement_enabled
38
+ end
39
+
40
+ def admin_policy_object?
41
+ # XXX Ideally we would use Hydra::PolicyAwareAccessControlsEnforcement#policy_class,
42
+ # but it's only available if it's been included in the application controller, i.e.,
43
+ # if APO access control enforcement is enabled. We want to know the name of the
44
+ # relationship regardless of whether policy enforcement is enabled.
45
+ @object.is_a?(Hydra.config[:permissions].fetch(:policy_class, Hydra::AdminPolicy))
6
46
  end
7
47
 
8
48
  end
@@ -5,7 +5,3 @@
5
5
  <%= t("fcrepo_admin.datastream.content_not_text") %>.
6
6
  </p>
7
7
  <% end %>
8
- <p>
9
- <%= link_to t("fcrepo_admin.datastream.download"), "#{fcrepo_admin.object_datastream_path(datastream.pid, datastream.dsid)}?download=true", :class => "btn btn-primary" %>
10
- </p>
11
-
@@ -0,0 +1,17 @@
1
+ <li class="nav-header">
2
+ <%= t("fcrepo_admin.datastream.nav.header") %>
3
+ </li>
4
+ <li>
5
+ <%= link_to_unless_current t("fcrepo_admin.datastream.nav.items.summary"), fcrepo_admin.object_datastream_path(object, datastream.dsid) %>
6
+ </li>
7
+ <% if can? :edit, object %>
8
+ <li>
9
+ <%= link_to_unless_current t("fcrepo_admin.datastream.nav.items.edit"), fcrepo_admin.edit_object_datastream_path(object, datastream.dsid) %>
10
+ </li>
11
+ <li>
12
+ <%= link_to_unless_current t("fcrepo_admin.datastream.nav.items.upload"), fcrepo_admin.upload_object_datastream_path(object, datastream.dsid) %>
13
+ </li>
14
+ <% end %>
15
+ <li>
16
+ <%= link_to t("fcrepo_admin.datastream.nav.items.download"), fcrepo_admin.download_object_datastream_path(object, datastream.dsid) %>
17
+ </li>
@@ -1,15 +1,9 @@
1
- <%= form_tag fcrepo_admin.object_datastream_path(@datastream.pid, @datastream.dsid), :method => :put, :multipart => true do %>
2
- <div>
3
- <%= label_tag "file", t("fcrepo_admin.datastream.edit.file") %>
4
- <%= file_field_tag "file" %>
5
- </div>
6
- <% if @inline %>
7
- <div>
8
- <%= label_tag "content", t("fcrepo_admin.datastream.edit.content") %>
9
- <%= text_area_tag "content", @datastream.content, :size => "50x20", :class => "field span9" %>
10
- </div>
11
- <% end %>
12
- <p>
13
- <%= submit_tag t("fcrepo_admin.datastream.edit.submit"), :confirm => t("fcrepo_admin.datastream.edit.confirm"), :class => "btn btn-primary" %>
14
- </p>
1
+ <h4><%= t("fcrepo_admin.datastream.edit.header") %></h4>
2
+ <%= form_tag fcrepo_admin.object_datastream_path(@datastream.pid, @datastream.dsid), :method => :put do %>
3
+ <div>
4
+ <%= text_area_tag "content", @datastream.content, :size => "50x20", :class => "field", :style => "width: 100%" %>
5
+ </div>
6
+ <p>
7
+ <%= submit_tag t("fcrepo_admin.datastream.edit.submit"), :confirm => t("fcrepo_admin.datastream.edit.confirm"), :class => "btn btn-primary" %>
8
+ </p>
15
9
  <% end %>
@@ -0,0 +1,10 @@
1
+ <h4><%= t("fcrepo_admin.datastream.upload.header") %></h4>
2
+ <%= form_tag fcrepo_admin.object_datastream_path(@datastream.pid, @datastream.dsid), :method => :put, :multipart => true do %>
3
+ <div>
4
+ <%= file_field_tag "file" %>
5
+ </div>
6
+ <p>
7
+ <%= submit_tag t("fcrepo_admin.datastream.upload.submit"), :confirm => t("fcrepo_admin.datastream.upload.confirm"), :class => "btn btn-primary" %>
8
+ </p>
9
+ <% end %>
10
+
@@ -0,0 +1,9 @@
1
+ <li class="nav-header">
2
+ <%= t("fcrepo_admin.object.nav.header") %>
3
+ </li>
4
+ <li>
5
+ <%= link_to_unless_current t("fcrepo_admin.object.nav.items.summary"), fcrepo_admin.object_path(object) %>
6
+ </li>
7
+ <li>
8
+ <%= link_to_unless_current t("fcrepo_admin.object.nav.items.audit_trail"), fcrepo_admin.audit_trail_object_path(object) %>
9
+ </li>
@@ -1,5 +1,5 @@
1
1
  <table class="table table-bordered table-condensed">
2
- <% properties.each do |key, value| %>
2
+ <% object_properties.each do |key, value| %>
3
3
  <tr>
4
4
  <th scope="row"><%= t("fcrepo_admin.object.properties.keys.#{key}") %></th>
5
5
  <td><%= value %></td>
@@ -1,19 +1,19 @@
1
- <h3><%= t("fcrepo_admin.audit_trail.title") %></h3>
1
+ <h3><%= t("fcrepo_admin.object.audit_trail.title") %></h3>
2
2
 
3
3
  <p>
4
- <%= link_to t("fcrepo_admin.audit_trail.download"), "#{fcrepo_admin.audit_trail_object_path(@object)}?download=true", :class => "btn btn-primary" %>
4
+ <%= link_to t("fcrepo_admin.object.audit_trail.download"), "#{fcrepo_admin.audit_trail_object_path(@object)}?download=true", :class => "btn btn-primary" %>
5
5
  </p>
6
6
 
7
7
  <table class="table table-bordered table-condensed table-striped">
8
8
  <thead>
9
9
  <tr>
10
- <th scope="col"><%= t("fcrepo_admin.audit_trail.record.id") %></th>
11
- <th scope="col"><%= t("fcrepo_admin.audit_trail.record.process_type") %></th>
12
- <th scope="col"><%= t("fcrepo_admin.audit_trail.record.action") %></th>
13
- <th scope="col"><%= t("fcrepo_admin.audit_trail.record.component_id") %></th>
14
- <th scope="col"><%= t("fcrepo_admin.audit_trail.record.responsibility") %></th>
15
- <th scope="col"><%= t("fcrepo_admin.audit_trail.record.date") %></th>
16
- <th scope="col"><%= t("fcrepo_admin.audit_trail.record.justification") %></th>
10
+ <th scope="col"><%= t("fcrepo_admin.object.audit_trail.record.id") %></th>
11
+ <th scope="col"><%= t("fcrepo_admin.object.audit_trail.record.process_type") %></th>
12
+ <th scope="col"><%= t("fcrepo_admin.object.audit_trail.record.action") %></th>
13
+ <th scope="col"><%= t("fcrepo_admin.object.audit_trail.record.component_id") %></th>
14
+ <th scope="col"><%= t("fcrepo_admin.object.audit_trail.record.responsibility") %></th>
15
+ <th scope="col"><%= t("fcrepo_admin.object.audit_trail.record.date") %></th>
16
+ <th scope="col"><%= t("fcrepo_admin.object.audit_trail.record.justification") %></th>
17
17
  </tr>
18
18
  </thead>
19
19
  <tbody>
@@ -9,29 +9,29 @@
9
9
  <%= render :partial => 'fcrepo_admin/datastreams/datastreams', :locals => {:datastreams => @object.datastreams} %>
10
10
  </div>
11
11
  <div class="tab-pane" id="tab-properties">
12
- <%= render :partial => 'properties', :locals => {:properties => object_properties} %>
12
+ <%= render 'properties' %>
13
13
  </div>
14
14
  <div class="tab-pane" id="tab-permissions">
15
- <% if has_permissions? %>
15
+ <% if object_has_permissions? %>
16
16
  <h4>Direct Permissions</h4>
17
17
  <%= render :partial => 'permissions', :locals => {:permissions => @object.permissions} %>
18
18
  <h4>Inherited Permissions</h4>
19
- <% unless apo_enforcement_enabled? %>
19
+ <% unless admin_policy_enforcement_enabled? %>
20
20
  <p class="alert">
21
21
  <%= t("fcrepo_admin.object.apo.enforcement_disabled") %>.
22
22
  </p>
23
23
  <% end %>
24
- <% if @apo_relationship_name %>
24
+ <% if object_model_belongs_to_apo? %>
25
25
  <p>
26
26
  <%= t("fcrepo_admin.object.apo.governed_by") %>:
27
- <% if @apo %>
28
- <%= link_to @apo.pid, fcrepo_admin.object_path(@apo.pid) %>
27
+ <% if object_has_admin_policy? %>
28
+ <%= link_to object_admin_policy.pid, fcrepo_admin.object_path(object_admin_policy) %>
29
29
  <% else %>
30
30
  <span class="label"><%= t("fcrepo_admin.object.apo.not_assigned") %></span>
31
31
  <% end %>
32
32
  </p>
33
- <% if @apo %>
34
- <%= render :partial => 'permissions', :locals => {:permissions => @apo.default_permissions} %>
33
+ <% if object_has_inherited_permissions? %>
34
+ <%= render :partial => 'permissions', :locals => {:permissions => object_inherited_permissions} %>
35
35
  <% end %>
36
36
  <% else %>
37
37
  <p class="alert alert-info">
@@ -0,0 +1,5 @@
1
+ <div class="well">
2
+ <ul class="nav nav-list">
3
+ <%= yield %>
4
+ </ul>
5
+ </div>
@@ -4,6 +4,7 @@
4
4
  <%= yield %>
5
5
  <% end %>
6
6
  <% content_for :sidebar do %>
7
- <%= render :partial => 'fcrepo_admin/datastreams/datastream_nav', :locals => {:datastream => @datastream, :object => @object} %>
7
+ <%= render :partial => 'fcrepo_admin/objects/context_nav_items', :locals => {:object => @object}, :layout => 'fcrepo_admin/shared/context_nav_list' %>
8
+ <%= render :partial => 'fcrepo_admin/datastreams/context_nav_items', :locals => {:datastream => @datastream, :object => @object}, :layout => 'fcrepo_admin/shared/context_nav_list' %>
8
9
  <% end %>
9
10
  <%= render :template => 'layouts/fcrepo_admin/default' %>
@@ -3,6 +3,6 @@
3
3
  <%= yield %>
4
4
  <% end %>
5
5
  <% content_for :sidebar do %>
6
- <%= render :partial => 'fcrepo_admin/objects/object_nav', :locals => {:object => @object} %>
6
+ <%= render :partial => 'fcrepo_admin/objects/context_nav_items', :locals => {:object => @object}, :layout => 'fcrepo_admin/shared/context_nav_list' %>
7
7
  <% end %>
8
8
  <%= render :template => 'layouts/fcrepo_admin/default' %>
@@ -30,17 +30,17 @@ en:
30
30
  not_assigned: 'Not Assigned'
31
31
  enforcement_disabled: 'Admin policy access control enforcement is disabled'
32
32
  relationship_undefined: 'This object type does not define an admin policy relationship'
33
- audit_trail:
34
- title: 'Audit Trail'
35
- download: 'Download'
36
- record:
37
- id: 'Record ID'
38
- process_type: 'Process Type'
39
- action: 'Action'
40
- component_id: 'Component ID'
41
- responsibility: 'Responsibility'
42
- date: 'Date'
43
- justification: 'Justification'
33
+ audit_trail:
34
+ title: 'Audit Trail'
35
+ download: 'Download'
36
+ record:
37
+ id: 'Record ID'
38
+ process_type: 'Process Type'
39
+ action: 'Action'
40
+ component_id: 'Component ID'
41
+ responsibility: 'Responsibility'
42
+ date: 'Date'
43
+ justification: 'Justification'
44
44
  datastreams:
45
45
  title: 'Datastreams'
46
46
  header:
@@ -55,6 +55,7 @@ en:
55
55
  items:
56
56
  summary: 'Datastream Summary'
57
57
  edit: 'Edit Content'
58
+ upload: 'Upload Content'
58
59
  download: 'Download Content'
59
60
  object: 'Object Admin'
60
61
  tabs:
@@ -78,8 +79,12 @@ en:
78
79
  dsChecksumType: 'Checksum Type'
79
80
  dsChecksum: 'Checksum'
80
81
  edit:
81
- file: 'Upload File'
82
- content: 'Replace Content'
82
+ header: 'Edit Content'
83
+ confirm: "These changes are not validated and cannot be undone!"
84
+ submit: 'Update'
85
+ upload:
86
+ header: 'Upload Content'
83
87
  confirm: "These changes are not validated and cannot be undone!"
84
- submit: 'Update Content'
88
+ submit: 'Upload'
89
+
85
90
 
@@ -3,7 +3,12 @@ FcrepoAdmin::Engine.routes.draw do
3
3
  scope :module => "fcrepo_admin" do
4
4
  resources :objects, :only => :show do
5
5
  get 'audit_trail', :on => :member
6
- resources :datastreams, :only => [:show, :edit, :update]
6
+ resources :datastreams, :only => [:show, :edit, :update] do
7
+ member do
8
+ get 'upload'
9
+ get 'download'
10
+ end
11
+ end
7
12
  end
8
13
  end
9
14
 
@@ -1,3 +1,3 @@
1
1
  module FcrepoAdmin
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.2"
3
3
  end
@@ -17,9 +17,6 @@ describe "datastreams/edit.html.erb" do
17
17
  user.delete
18
18
  object.delete
19
19
  Warden.test_reset!
20
- end
21
- it "should provide an upload form to replace content" do
22
-
23
20
  end
24
21
  it "should provide a text field to edit/replace text content" do
25
22
  fill_in "content", :with => <<EOS
@@ -17,7 +17,7 @@ describe "datastreams/show.html.erb" do
17
17
  end
18
18
  end
19
19
  it "should have a link to download the datastream content" do
20
- page.should have_link(I18n.t("fcrepo_admin.datastream.download"), :href => "#{fcrepo_admin.object_datastream_path(object, dsid)}?download=true")
20
+ page.should have_link(I18n.t("fcrepo_admin.datastream.download"), :href => fcrepo_admin.download_object_datastream_path(object, dsid))
21
21
  end
22
22
  context "user can edit" do
23
23
  let(:user) { FactoryGirl.create(:user) }
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.configure do |c|
4
+ Warden.test_mode!
5
+ end
6
+
7
+ describe "datastreams/upload.html.erb" do
8
+ let(:object) { FactoryGirl.create(:content_model) }
9
+ let(:user) { FactoryGirl.create(:user) }
10
+ before {
11
+ object.permissions = [{type: 'user', name: user.email, access: 'edit'}]
12
+ object.save
13
+ login_as(user, :scope => :user, :run_callbacks => false)
14
+ visit fcrepo_admin.upload_object_datastream_path(object, "descMetadata")
15
+ }
16
+ after do
17
+ user.delete
18
+ object.delete
19
+ Warden.test_reset!
20
+ end
21
+ it "should provide an upload form" do
22
+ attach_file "file", File.join(Rails.root, "spec", "fixtures", "files", "descMetadata.xml")
23
+ click_button I18n.t("fcrepo_admin.datastream.upload.submit")
24
+ object.reload
25
+ object.title.should == "Altered Test Component"
26
+ end
27
+ end
@@ -6,6 +6,6 @@ describe "audit_trail.html.erb" do
6
6
  it "should display the audit trail" do
7
7
  visit fcrepo_admin.audit_trail_object_path(object)
8
8
  page.should have_content(object.pid)
9
- page.should have_link(I18n.t("fcrepo_admin.audit_trail.download"), :href => "#{fcrepo_admin.audit_trail_object_path(object)}?download=true")
9
+ page.should have_link(I18n.t("fcrepo_admin.object.audit_trail.download"), :href => "#{fcrepo_admin.audit_trail_object_path(object)}?download=true")
10
10
  end
11
11
  end
@@ -20,7 +20,7 @@ describe "objects/show.html.erb" do
20
20
  end
21
21
  it "should link to its audit trail" do
22
22
  visit fcrepo_admin.object_path(object)
23
- page.should have_link(I18n.t("fcrepo_admin.audit_trail.title"), :href => fcrepo_admin.audit_trail_object_path(object))
23
+ page.should have_link(I18n.t("fcrepo_admin.object.audit_trail.title"), :href => fcrepo_admin.audit_trail_object_path(object))
24
24
  end
25
25
  it "should display the object's permissions"
26
26
  end
@@ -29,7 +29,7 @@ describe "objects/show.html.erb" do
29
29
  after { object.admin_policy.delete }
30
30
  it "should link to the APO" do
31
31
  visit fcrepo_admin.object_path(object)
32
- page.should have_link(object.admin_policy.pid, :href => fcrepo_admin.object_path(object.admin_policy.pid))
32
+ page.should have_link(object.admin_policy.pid, :href => fcrepo_admin.object_path(object.admin_policy))
33
33
  end
34
34
  it "should display the inherited permissions"
35
35
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fcrepo_admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2013-04-18 00:00:00.000000000 Z
15
+ date: 2013-04-19 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: hydra-head
@@ -262,21 +262,23 @@ files:
262
262
  - app/mailers/.gitkeep
263
263
  - app/models/.gitkeep
264
264
  - app/views/fcrepo_admin/datastreams/_content.html.erb
265
+ - app/views/fcrepo_admin/datastreams/_context_nav_items.html.erb
265
266
  - app/views/fcrepo_admin/datastreams/_datastream_nav.html.erb
266
267
  - app/views/fcrepo_admin/datastreams/_datastreams.html
267
268
  - app/views/fcrepo_admin/datastreams/_profile.html.erb
268
269
  - app/views/fcrepo_admin/datastreams/edit.html.erb
269
270
  - app/views/fcrepo_admin/datastreams/index.html.erb
270
271
  - app/views/fcrepo_admin/datastreams/show.html.erb
272
+ - app/views/fcrepo_admin/datastreams/upload.html.erb
273
+ - app/views/fcrepo_admin/objects/_context_nav_items.html.erb
271
274
  - app/views/fcrepo_admin/objects/_more_info.html.erb
272
- - app/views/fcrepo_admin/objects/_object_nav.html.erb
273
- - app/views/fcrepo_admin/objects/_object_nav_items.html.erb
274
275
  - app/views/fcrepo_admin/objects/_permissions.html.erb
275
276
  - app/views/fcrepo_admin/objects/_permissions_header.html.erb
276
277
  - app/views/fcrepo_admin/objects/_permissions_row.html.erb
277
278
  - app/views/fcrepo_admin/objects/_properties.html.erb
278
279
  - app/views/fcrepo_admin/objects/audit_trail.html.erb
279
280
  - app/views/fcrepo_admin/objects/show.html.erb
281
+ - app/views/fcrepo_admin/shared/_context_nav_list.html.erb
280
282
  - app/views/layouts/fcrepo_admin/datastreams.html.erb
281
283
  - app/views/layouts/fcrepo_admin/default.html.erb
282
284
  - app/views/layouts/fcrepo_admin/objects.html.erb
@@ -287,7 +289,6 @@ files:
287
289
  - lib/assets/.gitkeep
288
290
  - lib/fcrepo_admin.rb
289
291
  - lib/fcrepo_admin/blacklight_helper_behavior.rb
290
- - lib/fcrepo_admin/controller_behavior.rb
291
292
  - lib/fcrepo_admin/datastream_ability.rb
292
293
  - lib/fcrepo_admin/engine.rb
293
294
  - lib/fcrepo_admin/solr_document_extension.rb
@@ -300,9 +301,9 @@ files:
300
301
  - spec/factories/user_factories.rb
301
302
  - spec/features/datastreams/edit.html.erb_spec.rb
302
303
  - spec/features/datastreams/show.html.erb_spec.rb
304
+ - spec/features/datastreams/upload.html.erb_spec.rb
303
305
  - spec/features/objects/audit_trail.html.erb_spec.rb
304
306
  - spec/features/objects/show.html.erb_spec.rb
305
- - spec/fixtures/auditable.foxml.xml
306
307
  - spec/internal/README.rdoc
307
308
  - spec/internal/Rakefile
308
309
  - spec/internal/app/assets/javascripts/application.js
@@ -375,7 +376,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
375
376
  version: '0'
376
377
  segments:
377
378
  - 0
378
- hash: 1033224864064252852
379
+ hash: 1491170108417626237
379
380
  requirements: []
380
381
  rubyforge_project:
381
382
  rubygems_version: 1.8.25
@@ -389,9 +390,9 @@ test_files:
389
390
  - spec/factories/user_factories.rb
390
391
  - spec/features/datastreams/edit.html.erb_spec.rb
391
392
  - spec/features/datastreams/show.html.erb_spec.rb
393
+ - spec/features/datastreams/upload.html.erb_spec.rb
392
394
  - spec/features/objects/audit_trail.html.erb_spec.rb
393
395
  - spec/features/objects/show.html.erb_spec.rb
394
- - spec/fixtures/auditable.foxml.xml
395
396
  - spec/internal/README.rdoc
396
397
  - spec/internal/Rakefile
397
398
  - spec/internal/app/assets/javascripts/application.js
@@ -1,5 +0,0 @@
1
- <div class="well">
2
- <ul class="nav nav-list">
3
- <%= render :partial => 'fcrepo_admin/objects/object_nav_items', :locals => {:object => object} %>
4
- </ul>
5
- </div>
@@ -1,9 +0,0 @@
1
- <li class="nav-header">
2
- <%= t("fcrepo_admin.object.nav.header") %>
3
- </li>
4
- <li>
5
- <%= link_to_unless_current t("fcrepo_admin.object.nav.items.summary"), fcrepo_admin.object_path(object) %>
6
- </li>
7
- <li>
8
- <%= link_to_unless_current t("fcrepo_admin.object.nav.items.audit_trail"), fcrepo_admin.audit_trail_object_path(object) %>
9
- </li>
@@ -1,32 +0,0 @@
1
- module FcrepoAdmin
2
- module ControllerBehavior
3
-
4
- def load_and_authz_object
5
- load_object
6
- authorize_object
7
- end
8
-
9
- def load_object
10
- @object = ActiveFedora::Base.find(params[:id], :cast => true)
11
- end
12
-
13
- def authorize_object
14
- authorize! params[:action].to_sym, @object
15
- end
16
-
17
- def load_and_authz_datastream
18
- load_datastream
19
- authorize_datastream
20
- end
21
-
22
- def load_datastream
23
- @object ||= ActiveFedora::Base.find(params[:object_id], :cast => true)
24
- @datastream = @object.datastreams[params[:id]]
25
- end
26
-
27
- def authorize_datastream
28
- authorize! params[:action].to_sym, @datastream
29
- end
30
-
31
- end
32
- end
@@ -1,110 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <foxml:digitalObject VERSION="1.1" PID="changeme:242"
3
- xmlns:foxml="info:fedora/fedora-system:def/foxml#"
4
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5
- xsi:schemaLocation="info:fedora/fedora-system:def/foxml# http://www.fedora.info/definitions/1/0/foxml1-1.xsd">
6
- <foxml:objectProperties>
7
- <foxml:property NAME="info:fedora/fedora-system:def/model#state" VALUE="Active"/>
8
- <foxml:property NAME="info:fedora/fedora-system:def/model#label" VALUE=""/>
9
- <foxml:property NAME="info:fedora/fedora-system:def/model#ownerId" VALUE="fedoraAdmin"/>
10
- <foxml:property NAME="info:fedora/fedora-system:def/model#createdDate" VALUE="2013-02-25T16:43:05.802Z"/>
11
- <foxml:property NAME="info:fedora/fedora-system:def/view#lastModifiedDate" VALUE="2013-02-25T16:43:06.379Z"/>
12
- </foxml:objectProperties>
13
- <foxml:datastream ID="AUDIT" STATE="A" CONTROL_GROUP="X" VERSIONABLE="false">
14
- <foxml:datastreamVersion ID="AUDIT.0" LABEL="Audit Trail for this object" CREATED="2013-02-25T16:43:05.802Z" MIMETYPE="text/xml" FORMAT_URI="info:fedora/fedora-system:format/xml.fedora.audit">
15
- <foxml:xmlContent>
16
- <audit:auditTrail xmlns:audit="info:fedora/fedora-system:def/audit#">
17
- <audit:record ID="AUDREC1">
18
- <audit:process type="Fedora API-M"/>
19
- <audit:action>addDatastream</audit:action>
20
- <audit:componentID>RELS-EXT</audit:componentID>
21
- <audit:responsibility>fedoraAdmin</audit:responsibility>
22
- <audit:date>2013-02-25T16:43:06.219Z</audit:date>
23
- <audit:justification></audit:justification>
24
- </audit:record>
25
- <audit:record ID="AUDREC2">
26
- <audit:process type="Fedora API-M"/>
27
- <audit:action>addDatastream</audit:action>
28
- <audit:componentID>descMetadata</audit:componentID>
29
- <audit:responsibility>fedoraAdmin</audit:responsibility>
30
- <audit:date>2013-02-25T16:43:06.315Z</audit:date>
31
- <audit:justification></audit:justification>
32
- </audit:record>
33
- <audit:record ID="AUDREC3">
34
- <audit:process type="Fedora API-M"/>
35
- <audit:action>addDatastream</audit:action>
36
- <audit:componentID>rightsMetadata</audit:componentID>
37
- <audit:responsibility>fedoraAdmin</audit:responsibility>
38
- <audit:date>2013-02-25T16:43:06.379Z</audit:date>
39
- <audit:justification></audit:justification>
40
- </audit:record>
41
- </audit:auditTrail>
42
- </foxml:xmlContent>
43
- </foxml:datastreamVersion>
44
- </foxml:datastream>
45
- <foxml:datastream ID="DC" STATE="A" CONTROL_GROUP="X" VERSIONABLE="true">
46
- <foxml:datastreamVersion ID="DC1.0" LABEL="Dublin Core Record for this object" CREATED="2013-02-25T16:43:05.802Z" MIMETYPE="text/xml" FORMAT_URI="http://www.openarchives.org/OAI/2.0/oai_dc/" SIZE="341">
47
- <foxml:contentDigest TYPE="SHA-256" DIGEST="eb075bf6da5903e54464631dc998f66f95bffde9f4137132796457d31de5cd44"/>
48
- <foxml:xmlContent>
49
- <oai_dc:dc xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
50
- <dc:identifier>changeme:242</dc:identifier>
51
- </oai_dc:dc>
52
- </foxml:xmlContent>
53
- </foxml:datastreamVersion>
54
- </foxml:datastream>
55
- <foxml:datastream ID="RELS-EXT" STATE="A" CONTROL_GROUP="X" VERSIONABLE="true">
56
- <foxml:datastreamVersion ID="RELS-EXT.0" LABEL="Fedora Object-to-Object Relationship Metadata" CREATED="2013-02-25T16:43:06.219Z" MIMETYPE="application/rdf+xml" SIZE="284">
57
- <foxml:contentDigest TYPE="SHA-256" DIGEST="013d2229de7bd91c61256563eff1b475cd1e8f7e45a2f15de5a36f2d20ec2852"/>
58
- <foxml:xmlContent>
59
- <rdf:RDF xmlns:ns0="info:fedora/fedora-system:def/model#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
60
- <rdf:Description rdf:about="info:fedora/changeme:242">
61
- <ns0:hasModel rdf:resource="info:fedora/afmodel:TestModel"></ns0:hasModel>
62
- </rdf:Description>
63
- </rdf:RDF>
64
- </foxml:xmlContent>
65
- </foxml:datastreamVersion>
66
- </foxml:datastream>
67
- <foxml:datastream ID="descMetadata" STATE="A" CONTROL_GROUP="X" VERSIONABLE="true">
68
- <foxml:datastreamVersion ID="descMetadata.0" LABEL="" CREATED="2013-02-25T16:43:06.315Z" MIMETYPE="text/xml" SIZE="215">
69
- <foxml:contentDigest TYPE="SHA-256" DIGEST="3f588eca58dea77b31c9ed0b90e4560288a419856c4bb744fab9c7fe8749ad19"/>
70
- <foxml:xmlContent>
71
- <dc xmlns:dcterms="http://purl.org/dc/terms/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
72
- <dcterms:title>Fcrepo Test Object</dcterms:title>
73
- <dcterms:identifier>test00001</dcterms:identifier>
74
- </dc>
75
- </foxml:xmlContent>
76
- </foxml:datastreamVersion>
77
- </foxml:datastream>
78
- <foxml:datastream ID="rightsMetadata" STATE="A" CONTROL_GROUP="X" VERSIONABLE="true">
79
- <foxml:datastreamVersion ID="rightsMetadata.0" LABEL="" CREATED="2013-02-25T16:43:06.379Z" MIMETYPE="text/xml" SIZE="596">
80
- <foxml:contentDigest TYPE="SHA-256" DIGEST="472f8634b31bd425dadd9206531ab02a70c08c22e4250bb2b0d3dd0314cfb240"/>
81
- <foxml:xmlContent>
82
- <rightsMetadata xmlns="http://hydra-collab.stanford.edu/schemas/rightsMetadata/v1" version="0.1">
83
- <copyright>
84
- <human type="title"></human>
85
- <human type="description"></human>
86
- <machine type="uri"></machine>
87
- </copyright>
88
- <access type="discover">
89
- <human></human>
90
- <machine></machine>
91
- </access>
92
- <access type="read">
93
- <human></human>
94
- <machine>
95
- <group>public</group>
96
- </machine>
97
- </access>
98
- <access type="edit">
99
- <human></human>
100
- <machine></machine>
101
- </access>
102
- <embargo>
103
- <human></human>
104
- <machine></machine>
105
- </embargo>
106
- </rightsMetadata>
107
- </foxml:xmlContent>
108
- </foxml:datastreamVersion>
109
- </foxml:datastream>
110
- </foxml:digitalObject>