sufia 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -3
  3. data/History.md +16 -0
  4. data/app/assets/javascripts/sufia.js +2 -0
  5. data/app/assets/javascripts/sufia/batch_select_all.js +57 -128
  6. data/app/controllers/batch_controller.rb +4 -5
  7. data/app/controllers/concerns/sufia/users_controller_behavior.rb +2 -2
  8. data/app/controllers/contact_form_controller.rb +2 -24
  9. data/app/controllers/dashboard_controller.rb +1 -66
  10. data/app/controllers/single_use_link_controller.rb +3 -2
  11. data/app/helpers/generic_file_helper.rb +1 -4
  12. data/app/models/checksum_audit_log.rb +1 -1
  13. data/app/views/_footer.html.erb +2 -4
  14. data/app/views/batch_edits/_check_all.html.erb +3 -8
  15. data/app/views/batch_edits/_delete_selected.html.erb +1 -1
  16. data/app/views/batch_edits/edit.html.erb +2 -3
  17. data/app/views/dashboard/_facet_pagination.html.erb +2 -2
  18. data/app/views/generic_files/_asset_permissions_denial_flash.html.erb +1 -1
  19. data/app/views/generic_files/_asset_saved_flash.html.erb +1 -1
  20. data/app/views/generic_files/_asset_updated_flash.html.erb +1 -1
  21. data/app/views/generic_files/_media_display.html.erb +1 -1
  22. data/app/views/generic_files/edit.html.erb +1 -1
  23. data/app/views/generic_files/show.html.erb +1 -1
  24. data/app/views/single_use_link/generate_download.html.erb +1 -1
  25. data/app/views/single_use_link/generate_show.html.erb +1 -1
  26. data/app/views/single_use_link/show.html.erb +1 -1
  27. data/app/views/users/_trophy_edit.html.erb +1 -1
  28. data/app/views/users/show.html.erb +1 -1
  29. data/features/browse_dashboard_files.feature +1 -4
  30. data/features/display_dashboard.feature +1 -4
  31. data/features/step_definitions/scholarsphere.rb +1 -1
  32. data/lib/sufia.rb +4 -1
  33. data/lib/sufia/batch_edits_controller_behavior.rb +3 -4
  34. data/lib/sufia/contact_form_controller_behavior.rb +45 -0
  35. data/lib/sufia/dashboard_controller_behavior.rb +92 -0
  36. data/lib/sufia/downloads_controller_behavior.rb +6 -39
  37. data/lib/sufia/files_controller_behavior.rb +7 -7
  38. data/lib/sufia/generic_file.rb +3 -5
  39. data/lib/sufia/generic_file/web_form.rb +15 -0
  40. data/lib/sufia/jobs/batch_update_job.rb +1 -2
  41. data/lib/sufia/jobs/transcode_audio_job.rb +2 -3
  42. data/lib/sufia/jobs/unzip_job.rb +22 -13
  43. data/lib/sufia/model_methods.rb +6 -0
  44. data/lib/sufia/version.rb +1 -1
  45. data/spec/controllers/batch_edits_controller_spec.rb +22 -2
  46. data/spec/controllers/downloads_controller_spec.rb +9 -15
  47. data/spec/controllers/generic_files_controller_spec.rb +32 -0
  48. data/spec/controllers/single_use_link_controller_spec.rb +2 -1
  49. data/spec/controllers/users_controller_spec.rb +13 -0
  50. data/spec/models/generic_file_spec.rb +41 -0
  51. data/spec/support/Gemfile +1 -0
  52. data/sufia.gemspec +1 -1
  53. metadata +7 -6
  54. data/app/views/static/versions.html.erb +0 -52
@@ -53,14 +53,14 @@ module Sufia
53
53
 
54
54
  # routed to /files/:id/edit
55
55
  def edit
56
- initialize_fields(@generic_file)
56
+ @generic_file.initialize_fields
57
57
  @groups = current_user.groups
58
58
  end
59
59
 
60
60
  # routed to /files/:id (DELETE)
61
61
  def destroy
62
62
  pid = @generic_file.noid
63
- @generic_file.delete
63
+ @generic_file.destroy
64
64
  Sufia.queue.push(ContentDeleteEventJob.new(pid, current_user.user_key))
65
65
  redirect_to sufia.dashboard_index_path, :notice => render_to_string(:partial=>'generic_files/asset_deleted_flash', :locals => { :generic_file => @generic_file })
66
66
  end
@@ -115,7 +115,7 @@ module Sufia
115
115
 
116
116
  if params.has_key?(:revision) and params[:revision] != @generic_file.content.latest_version.versionID
117
117
  revision = @generic_file.content.get_version(params[:revision])
118
- @generic_file.add_file_datastream(revision.content, :dsid => 'content')
118
+ @generic_file.add_file_datastream(revision.content, :dsid => 'content', :mimeType => revision.mimeType)
119
119
  version_event = true
120
120
  Sufia.queue.push(ContentRestoredVersionEventJob.new(@generic_file.pid, current_user.user_key, params[:revision]))
121
121
  end
@@ -182,13 +182,13 @@ module Sufia
182
182
  end
183
183
 
184
184
  # override this method if you need to initialize more complex RDF assertions (b-nodes)
185
+ # @deprecated use @generic_file.initialize_fields instead
185
186
  def initialize_fields(file)
186
- file.terms_for_editing.each do |key|
187
- # if value is empty, we create an one element array to loop over for output
188
- file[key] = [''] if file[key].empty?
189
- end
187
+ file.initialize_fields
190
188
  end
191
189
 
190
+ ActiveSupport::Deprecation.deprecate_methods(FilesControllerBehavior, :initialize_fields)
191
+
192
192
  # The name of the datastream where we store the file data
193
193
  def datastream_id
194
194
  'content'
@@ -12,6 +12,7 @@ module Sufia
12
12
  autoload :Audit
13
13
  autoload :Actions
14
14
  autoload :Permissions
15
+ autoload :WebForm
15
16
  include Sufia::ModelMethods
16
17
  include Sufia::Noid
17
18
  include Sufia::GenericFile::Thumbnail
@@ -19,6 +20,7 @@ module Sufia
19
20
  include Sufia::GenericFile::Characterization
20
21
  include Sufia::GenericFile::Audit
21
22
  include Sufia::GenericFile::Permissions
23
+ include Sufia::GenericFile::WebForm
22
24
 
23
25
  included do
24
26
  has_metadata :name => "descMetadata", :type => GenericFileRdfDatastream
@@ -37,11 +39,7 @@ module Sufia
37
39
 
38
40
  around_save :characterize_if_changed, :retry_warming
39
41
  before_save :remove_blank_assertions
40
- end
41
-
42
- def delete
43
- self.cleanup_trophies
44
- super
42
+ before_destroy :cleanup_trophies
45
43
  end
46
44
 
47
45
  def remove_blank_assertions
@@ -0,0 +1,15 @@
1
+ module Sufia
2
+ module GenericFile
3
+ module WebForm
4
+
5
+ # override this method if you need to initialize more complex RDF assertions (b-nodes)
6
+ def initialize_fields
7
+ terms_for_editing.each do |key|
8
+ # if value is empty, we create an one element array to loop over for output
9
+ self[key] = [''] if self[key].empty?
10
+ end
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -14,7 +14,6 @@
14
14
 
15
15
  class BatchUpdateJob
16
16
  include Hydra::PermissionsQuery
17
- include GenericFileHelper
18
17
  include Rails.application.routes.url_helpers
19
18
 
20
19
  def queue_name
@@ -79,7 +78,7 @@ class BatchUpdateJob
79
78
  end
80
79
 
81
80
  def file_list ( files)
82
- return files.map {|gf| '<a href="'+Sufia::Engine.routes.url_helpers.generic_files_path+'/'+gf.noid+'">'+display_title(gf)+'</a>'}.join(', ')
81
+ return files.map {|gf| '<a href="'+Sufia::Engine.routes.url_helpers.generic_files_path+'/'+gf.noid+'">'+gf.to_s+'</a>'}.join(', ')
83
82
 
84
83
  end
85
84
 
@@ -28,10 +28,9 @@ class TranscodeAudioJob < FfmpegTranscodeJob
28
28
  opts = ""
29
29
  if generic_file.mime_type == 'audio/mpeg'
30
30
  # Don't re-encode, just copy
31
- generic_file.add_file_datastream(generic_file.content.read, :dsid=>'mp3', :mimeType=>'audio/mp3')
32
- #generic_file.content.rewind
31
+ generic_file.add_file_datastream(generic_file.content.read, :dsid=>'mp3', :mimeType=>'audio/mpeg')
33
32
  else
34
- encode_datastream('mp3', 'audio/mp3', opts)
33
+ encode_datastream('mp3', 'audio/mpeg', opts)
35
34
  end
36
35
  end
37
36
 
@@ -24,22 +24,31 @@ class UnzipJob
24
24
  end
25
25
 
26
26
  def run
27
- zip_file = GenericFile.find(pid)
28
27
  Zip::Archive.open_buffer(zip_file.content.content) do |archive|
29
28
  archive.each do |f|
30
- @generic_file = GenericFile.new
31
- @generic_file.batch_id = zip_file.batch.pid
32
- file_name = f.name
33
- mime_types = MIME::Types.of(file_name)
34
- mime_type = mime_types.empty? ? "application/octet-stream" : mime_types.first.content_type
35
- options = {:label=>file_name, :dsid=>'content', :mimeType=>mime_type}
36
- @generic_file.add_file_datastream(f.read, options)
37
- @generic_file.set_title_and_label( file_name, :only_if_blank=>true )
38
- @generic_file.apply_depositor_metadata(zip_file.edit_users.first)
39
- @generic_file.date_uploaded = Time.now.ctime
40
- @generic_file.date_modified = Time.now.ctime
41
- @generic_file.save
29
+ create_file(f)
42
30
  end
43
31
  end
44
32
  end
33
+
34
+ protected
35
+
36
+ def create_file(f)
37
+ @generic_file = GenericFile.new
38
+ @generic_file.batch_id = zip_file.batch.pid
39
+ file_name = f.name
40
+ mime_types = MIME::Types.of(file_name)
41
+ mime_type = mime_types.empty? ? "application/octet-stream" : mime_types.first.content_type
42
+ options = {:label=>file_name, :dsid=>'content', :mimeType=>mime_type}
43
+ @generic_file.add_file_datastream(f.read, options)
44
+ @generic_file.set_title_and_label( file_name, :only_if_blank=>true )
45
+ @generic_file.apply_depositor_metadata(zip_file.edit_users.first)
46
+ @generic_file.date_uploaded = Time.now.ctime
47
+ @generic_file.date_modified = Time.now.ctime
48
+ @generic_file.save
49
+ end
50
+
51
+ def zip_file
52
+ @zip_file ||= GenericFile.find(pid)
53
+ end
45
54
  end
@@ -35,5 +35,11 @@ module Sufia
35
35
 
36
36
  return true
37
37
  end
38
+
39
+ def to_s
40
+ return Array(title).join(" | ") if title.present?
41
+ label || "No Title"
42
+ end
43
+
38
44
  end
39
45
  end
data/lib/sufia/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Sufia
2
- VERSION = "1.2.0"
2
+ VERSION = "1.3.0"
3
3
  end
@@ -20,8 +20,7 @@ describe BatchEditsController do
20
20
  @two.apply_depositor_metadata('mjg36')
21
21
  @one.save!
22
22
  @two.save!
23
- put :add, :id =>@one.pid
24
- put :add, :id =>@two.pid
23
+ controller.batch = [@one.pid, @two.pid]
25
24
  controller.should_receive(:can?).with(:edit, @one.pid).and_return(true)
26
25
  controller.should_receive(:can?).with(:edit, @two.pid).and_return(true)
27
26
  end
@@ -35,4 +34,25 @@ describe BatchEditsController do
35
34
  assigns[:show_file].language.should == ["en"]
36
35
  end
37
36
  end
37
+
38
+ describe "update" do
39
+ before do
40
+ @one = GenericFile.new(:creator=>"Fred", :language=>'en')
41
+ @one.apply_depositor_metadata('mjg36')
42
+ @two = GenericFile.new(:creator=>"Wilma", :publisher=>'Rand McNally', :language=>'en')
43
+ @two.apply_depositor_metadata('mjg36')
44
+ @one.save!
45
+ @two.save!
46
+ controller.batch = [@one.pid, @two.pid]
47
+ controller.should_receive(:can?).with(:edit, @one.pid).and_return(true)
48
+ controller.should_receive(:can?).with(:edit, @two.pid).and_return(true)
49
+ end
50
+ it "should be successful" do
51
+ put :update , update_type:"delete_all"
52
+ response.should be_redirect
53
+ expect {GenericFIle.find(@one.id)}.to raise_error
54
+ expect {GenericFIle.find(@two.id)}.to raise_error
55
+ end
56
+ end
57
+
38
58
  end
@@ -16,17 +16,6 @@ require 'spec_helper'
16
16
 
17
17
  describe DownloadsController do
18
18
 
19
- describe "default_datastream?" do
20
- it "should be true when no datastram_id is passed" do
21
- controller.should be_default_datastream
22
- end
23
- it "should be false when a datastream_id is passed" do
24
- controller.params[:datastream_id] = 'descMetadata'
25
- controller.should_not be_default_datastream
26
- end
27
- end
28
-
29
-
30
19
  describe "with a file" do
31
20
  before do
32
21
  @f = GenericFile.new(:pid => 'sufia:test1')
@@ -56,29 +45,34 @@ describe DownloadsController do
56
45
  DownloadsController.default_content_dsid.should == "content"
57
46
  controller.stub(:render) # send_data calls render internally
58
47
  expected_content = ActiveFedora::Base.find("sufia:test1").content.content
59
- controller.should_receive(:send_data).with(expected_content, {:filename => 'world.png', :disposition => 'inline', :type => 'image/png' })
48
+ controller.should_receive(:send_file_headers!).with({:filename => 'world.png', :disposition => 'inline', :type => 'image/png' })
60
49
  get "show", :id => "test1"
50
+ response.body.should == expected_content
61
51
  response.should be_success
62
52
  end
63
53
  it "should return requested datastreams" do
64
54
  controller.stub(:render) # send_data calls render internally
65
55
  expected_content = ActiveFedora::Base.find("sufia:test1").descMetadata.content
66
- controller.should_receive(:send_data).with(expected_content, {:filename=>"descMetadata", :disposition=>"inline", :type=>"text/plain"})
56
+ controller.should_receive(:send_file_headers!).with({:filename => 'descMetadata', :disposition => 'inline', :type => 'text/plain' })
67
57
  get "show", :id => "test1", :datastream_id => "descMetadata"
58
+ response.body.should == expected_content
68
59
  response.should be_success
69
60
  end
70
61
  it "should support setting disposition to inline" do
71
62
  controller.stub(:render) # send_data calls render internally
72
63
  expected_content = ActiveFedora::Base.find("sufia:test1").content.content
73
- controller.should_receive(:send_data).with(expected_content, {:filename => 'world.png', :type => 'image/png', :disposition => "inline"})
64
+ controller.should_receive(:send_file_headers!).with({:filename => 'world.png', :disposition => 'inline', :type => 'image/png' })
74
65
  get "show", :id => "test1", :disposition => "inline"
66
+ response.body.should == expected_content
75
67
  response.should be_success
76
68
  end
69
+
77
70
  it "should allow you to specify filename for download" do
78
71
  controller.stub(:render) # send_data calls render internally
79
72
  expected_content = ActiveFedora::Base.find("sufia:test1").content.content
80
- controller.should_receive(:send_data).with(expected_content, {:filename => "my%20dog.png", :disposition => 'inline', :type => 'image/png'})
73
+ controller.should_receive(:send_file_headers!).with({:filename => 'my%20dog.png', :disposition => 'inline', :type => 'image/png' })
81
74
  get "show", :id => "test1", "filename" => "my%20dog.png"
75
+ response.body.should == expected_content
82
76
  end
83
77
  end
84
78
  end
@@ -260,6 +260,38 @@ describe GenericFilesController do
260
260
  @user.delete
261
261
  end
262
262
 
263
+ it "should change mime type when restoring a revision with a different mime type" do
264
+ @user = FactoryGirl.find_or_create(:user)
265
+ sign_in @user
266
+
267
+ file = fixture_file_upload('/world.png','image/png')
268
+ post :update, :id=>@generic_file.pid, :filedata=>file, :Filename=>"The world", :generic_file=>{:tag=>[''], :permissions=>{:new_user_name=>{'archivist1@example.com'=>'edit'}}}
269
+
270
+ posted_file = GenericFile.find(@generic_file.pid)
271
+ version1 = posted_file.content.latest_version
272
+ posted_file.content.version_committer(version1).should == @user.user_key
273
+
274
+ file = fixture_file_upload('/image.jp2','image/jp2')
275
+ post :update, :id=>@generic_file.pid, :filedata=>file, :Filename=>"The world", :generic_file=>{:tag=>[''], :permissions=>{:new_user_name=>{'archivist1@example.com'=>'edit'}}}
276
+
277
+ posted_file = GenericFile.find(@generic_file.pid)
278
+ version2 = posted_file.content.latest_version
279
+ posted_file.content.version_committer(version2).should == @user.user_key
280
+
281
+ posted_file.content.mimeType.should == "image/jp2"
282
+ post :update, :id=>@generic_file.pid, :revision=>'content.0'
283
+
284
+
285
+ restored_file = GenericFile.find(@generic_file.pid)
286
+ version3 = restored_file.content.latest_version
287
+ version3.versionID.should_not == version2.versionID
288
+ version3.versionID.should_not == version1.versionID
289
+ restored_file.content.version_committer(version3).should == @user.user_key
290
+ restored_file.content.mimeType.should == "image/png"
291
+ @user.delete
292
+ end
293
+
294
+
263
295
  it "should record what user added a new version" do
264
296
  @user = FactoryGirl.find_or_create(:user)
265
297
  sign_in @user
@@ -85,8 +85,9 @@ describe SingleUseLinkController do
85
85
  it "and_return http success" do
86
86
  controller.stub(:render)
87
87
  expected_content = ActiveFedora::Base.find(@file.pid).content.content
88
- controller.should_receive(:send_data).with(expected_content, {:filename => 'world.png', :disposition => 'inline', :type => 'image/png' })
88
+ controller.should_receive(:send_file_headers!).with({:filename => 'world.png', :disposition => 'inline', :type => 'image/png' })
89
89
  get :download, id:@dhash
90
+ response.body.should == expected_content
90
91
  response.should be_success
91
92
  end
92
93
  it "and_return 404 on second attempt" do
@@ -139,6 +139,19 @@ describe UsersController do
139
139
  u.facebook_handle.should == 'face'
140
140
  u.googleplus_handle.should == 'goo'
141
141
  end
142
+ it "should remove a trophy" do
143
+ f = GenericFile.create(title:"myFile")
144
+ f.apply_depositor_metadata(@user.user_key)
145
+ f.save
146
+ file_id = f.pid.split(":").last
147
+ Trophy.create(:generic_file_id => file_id, :user_id => @user.id)
148
+ @user.trophy_ids.length.should == 1
149
+ post :update, uid: @user.user_key, 'remove_trophy_'+file_id=> 'yes'
150
+ response.should redirect_to(@routes.url_helpers.profile_path(URI.escape(@user.user_key,'@.')))
151
+ flash[:notice].should include("Your profile has been updated")
152
+ @user.trophy_ids.length.should == 0
153
+ f.destroy
154
+ end
142
155
  end
143
156
  describe "#follow" do
144
157
  after(:all) do
@@ -20,6 +20,25 @@ describe GenericFile do
20
20
  @file = subject #TODO remove this line someday (use subject instead)
21
21
  end
22
22
 
23
+ describe '#to_s' do
24
+ it 'uses the provided titles' do
25
+ subject.title = ["Hello", "World"]
26
+ expect(subject.to_s).to eq("Hello | World")
27
+ end
28
+
29
+ it 'falls back on label if no titles are given' do
30
+ subject.title = []
31
+ subject.label = 'Spam'
32
+ expect(subject.to_s).to eq("Spam")
33
+ end
34
+
35
+ it 'with no label or titles it is "No Title"' do
36
+ subject.title = []
37
+ subject.label = nil
38
+ expect(subject.to_s).to eq("No Title")
39
+ end
40
+ end
41
+
23
42
  describe "terms_for_editing" do
24
43
  it "should return a list" do
25
44
  @file.terms_for_editing.should == [ :contributor, :creator, :title, :description, :publisher,
@@ -346,6 +365,28 @@ describe GenericFile do
346
365
  end
347
366
  end
348
367
  end
368
+ describe "trophies" do
369
+ before(:all) do
370
+ @u = FactoryGirl.create(:user)
371
+ @f = GenericFile.new.tap do |gf|
372
+ gf.apply_depositor_metadata(@u.user_key)
373
+ gf.stub(:characterize_if_changed).and_yield #don't run characterization
374
+ gf.save!
375
+ end
376
+ @t = Trophy.create(user_id: @u.id, generic_file_id: @f.pid)
377
+ end
378
+ after(:all) do
379
+ @u.destroy
380
+ end
381
+ it "should have a trophy" do
382
+ Trophy.where(generic_file_id: @f.pid).count.should == 1
383
+ end
384
+ it "should remove all trophies when file is deleted" do
385
+ @f.should_receive(:cleanup_trophies)
386
+ @f.destroy
387
+ Trophy.where(generic_file_id: @f.pid).count.should == 0
388
+ end
389
+ end
349
390
  describe "audit" do
350
391
  before(:each) do
351
392
  u = FactoryGirl.create(:user)
data/spec/support/Gemfile CHANGED
@@ -7,6 +7,7 @@ gem 'sqlite3'
7
7
  gem 'devise' #BL adds this later, so check to see if we can remove this
8
8
  gem 'blacklight'
9
9
  gem 'hydra-head'
10
+ gem 'hydra-batch-edit', '~>1.0.1'
10
11
 
11
12
 
12
13
  gem 'sufia', :path=>'../../'
data/sufia.gemspec CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |gem|
21
21
  gem.add_dependency "hydra-head", "~> 6.0"
22
22
 
23
23
  gem.add_dependency 'noid', '~> 0.6.6'
24
- gem.add_dependency 'hydra-batch-edit', '~> 0.3'
24
+ gem.add_dependency 'hydra-batch-edit', '~> 1.0'
25
25
 
26
26
  gem.add_dependency 'resque', '~> 1.23.0'#, :require => 'resque/server'
27
27
  gem.add_dependency 'resque-pool', '0.3.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sufia
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Coyne
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-07 00:00:00.000000000 Z
11
+ date: 2013-05-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - ~>
88
88
  - !ruby/object:Gem::Version
89
- version: '0.3'
89
+ version: '1.0'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - ~>
95
95
  - !ruby/object:Gem::Version
96
- version: '0.3'
96
+ version: '1.0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: resque
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -623,7 +623,6 @@ files:
623
623
  - app/views/static/mendeley.html.erb
624
624
  - app/views/static/subject_libraries.html.erb
625
625
  - app/views/static/terms.html.erb
626
- - app/views/static/versions.html.erb
627
626
  - app/views/static/zotero.html.erb
628
627
  - app/views/users/_activity_log.html.erb
629
628
  - app/views/users/_notify_link.html.erb
@@ -686,7 +685,9 @@ files:
686
685
  - lib/sufia/active_fedora/redis.rb
687
686
  - lib/sufia/active_record/redis.rb
688
687
  - lib/sufia/batch_edits_controller_behavior.rb
688
+ - lib/sufia/contact_form_controller_behavior.rb
689
689
  - lib/sufia/controller.rb
690
+ - lib/sufia/dashboard_controller_behavior.rb
690
691
  - lib/sufia/downloads_controller_behavior.rb
691
692
  - lib/sufia/file_content.rb
692
693
  - lib/sufia/file_content/extract_metadata.rb
@@ -699,6 +700,7 @@ files:
699
700
  - lib/sufia/generic_file/export.rb
700
701
  - lib/sufia/generic_file/permissions.rb
701
702
  - lib/sufia/generic_file/thumbnail.rb
703
+ - lib/sufia/generic_file/web_form.rb
702
704
  - lib/sufia/id_service.rb
703
705
  - lib/sufia/jobs/audit_job.rb
704
706
  - lib/sufia/jobs/batch_update_job.rb
@@ -1003,4 +1005,3 @@ test_files:
1003
1005
  - spec/views/single_user_link/generate_download.html.erb_spec.rb
1004
1006
  - spec/views/single_user_link/generate_show.html.erb_spec.rb
1005
1007
  - spec/views/single_user_link/show.html.erb_spec.rb
1006
- has_rdoc: