sufia 1.2.0 → 1.3.0

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 (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: