sufia 3.4.0 → 3.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +6 -1
  3. data/Gemfile +7 -8
  4. data/README.md +13 -0
  5. data/SUFIA_VERSION +1 -1
  6. data/app/controllers/mailbox_controller.rb +8 -8
  7. data/app/jobs/ingest_local_file_job.rb +17 -13
  8. data/app/views/catalog/_home_text.html.erb +0 -3
  9. data/app/views/dashboard/_index_partials/_thumbnail_display.html.erb +5 -29
  10. data/app/views/mailbox/index.html.erb +9 -21
  11. data/app/views/users/_notify_link.html.erb +2 -17
  12. data/config/routes.rb +5 -3
  13. data/lib/sufia/files_controller_behavior.rb +45 -50
  14. data/lib/sufia/version.rb +1 -1
  15. data/lib/sufia/virus_found_error.rb +4 -0
  16. data/spec/controllers/generic_files_controller_spec.rb +14 -79
  17. data/spec/controllers/mailbox_controller_spec.rb +9 -13
  18. data/spec/features/users_spec.rb +0 -3
  19. data/spec/fixtures/sample_mpeg4.mp4 +0 -0
  20. data/spec/jobs/import_url_job_spec.rb +8 -8
  21. data/spec/jobs/ingest_local_file_job_spec.rb +13 -10
  22. data/spec/models/fits_datastream_spec.rb +72 -21
  23. data/spec/models/generic_file/actions_spec.rb +2 -17
  24. data/spec/models/generic_file/web_form_spec.rb +4 -3
  25. data/spec/models/generic_file_spec.rb +27 -0
  26. data/spec/routing/route_spec.rb +15 -20
  27. data/spec/spec_helper.rb +15 -2
  28. data/sufia-models/app/models/datastreams/fits_datastream.rb +10 -1
  29. data/sufia-models/lib/generators/sufia/models/install_generator.rb +1 -1
  30. data/sufia-models/lib/sufia/models/generic_file.rb +3 -0
  31. data/sufia-models/lib/sufia/models/generic_file/actions.rb +8 -11
  32. data/sufia-models/lib/sufia/models/generic_file/characterization.rb +19 -4
  33. data/sufia-models/lib/sufia/models/generic_file/virus_check.rb +33 -0
  34. data/sufia-models/lib/sufia/models/generic_file/web_form.rb +2 -3
  35. data/sufia-models/lib/sufia/models/jobs/import_url_job.rb +29 -31
  36. data/sufia-models/lib/sufia/models/version.rb +1 -1
  37. data/sufia.gemspec +1 -1
  38. data/tasks/sufia-dev.rake +2 -1
  39. metadata +10 -10
  40. data/app/assets/images/rails.png +0 -0
  41. data/app/assets/images/site_images/temp/guitar.jpg +0 -0
  42. data/app/assets/images/splashscreen.png +0 -0
  43. data/app/assets/images/video-still.png +0 -0
@@ -13,9 +13,10 @@ describe GenericFile do
13
13
  end
14
14
  describe "terms_for_display" do
15
15
  it "should return a list" do
16
- subject.terms_for_display.should == [:part_of, :resource_type, :title, :creator, :contributor, :description,
17
- :tag, :rights, :publisher, :date_created, :date_uploaded, :date_modified, :subject, :language, :identifier,
18
- :based_near, :related_url]
16
+ expect(subject.terms_for_display).to eq([:resource_type, :title,
17
+ :creator, :contributor, :description, :tag, :rights, :publisher,
18
+ :date_created, :date_uploaded, :date_modified, :subject, :language,
19
+ :identifier, :based_near, :related_url])
19
20
  end
20
21
  end
21
22
 
@@ -4,6 +4,7 @@ describe GenericFile do
4
4
  before do
5
5
  subject.apply_depositor_metadata('jcoyne')
6
6
  @file = subject #TODO remove this line someday (use subject instead)
7
+
7
8
  end
8
9
 
9
10
  describe '#to_s' do
@@ -1035,4 +1036,30 @@ describe GenericFile do
1035
1036
  end
1036
1037
  end
1037
1038
  end
1039
+ describe "file content validation" do
1040
+ before do
1041
+ GenericFile.any_instance.stub(:create_derivatives)
1042
+ end
1043
+ context "when file contains a virus" do
1044
+ let(:f) { File.new(fixture_path + '/small_file.txt') }
1045
+ after(:each) do
1046
+ subject.destroy if subject.persisted?
1047
+ end
1048
+ it "populates the errors hash during validation" do
1049
+ allow(Sufia::GenericFile::Actions).to receive(:virus_check).and_raise(Sufia::VirusFoundError, "A virus was found in #{f.path}: EL CRAPO VIRUS")
1050
+ subject.add_file(f, 'content', 'small_file.txt')
1051
+ subject.save
1052
+ subject.should_not be_persisted
1053
+ subject.errors.messages.should == { content: ["A virus was found in #{f.path}: EL CRAPO VIRUS"] }
1054
+ end
1055
+ it "does not save a new version of a GenericFile" do
1056
+ subject.add_file(f, 'content', 'small_file.txt')
1057
+ subject.save
1058
+ allow(Sufia::GenericFile::Actions).to receive(:virus_check).and_raise(Sufia::VirusFoundError)
1059
+ subject.add_file(File.new(fixture_path + '/sufia_generic_stub.txt') , 'content', 'sufia_generic_stub.txt')
1060
+ subject.save
1061
+ subject.reload.content.content.should == "small\n"
1062
+ end
1063
+ end
1064
+ end
1038
1065
  end
@@ -139,6 +139,21 @@ describe 'Routes' do
139
139
  end
140
140
  end
141
141
 
142
+ describe "Notifications" do
143
+ it "should have index" do
144
+ expect( get: '/notifications').to route_to(controller: 'mailbox', action: 'index')
145
+ expect(notifications_path).to eq '/notifications'
146
+ end
147
+ it "should allow deleting" do
148
+ expect( delete: '/notifications/123').to route_to(controller: 'mailbox', action: 'destroy', id: '123')
149
+ expect(notification_path(123)).to eq '/notifications/123'
150
+ end
151
+ it "should allow deleting all of them" do
152
+ expect( delete: '/notifications/delete_all').to route_to(controller: 'mailbox', action: 'delete_all')
153
+ expect(delete_all_notifications_path).to eq '/notifications/delete_all'
154
+ end
155
+ end
156
+
142
157
  describe "Contact Form" do
143
158
  it "should route to new" do
144
159
  { get: '/contact' }.should route_to(controller: 'contact_form', action: 'new')
@@ -149,26 +164,6 @@ describe 'Routes' do
149
164
  end
150
165
  end
151
166
 
152
- describe "Queues" do
153
- # TODO: figure out how to test mounted routes in Rails 3.2
154
- # before do
155
- # @routes = Resque::Server.routes
156
- # warden_mock = mock('warden')
157
- # warden_mock.stub(:user).returns(FactoryGirl.find_or_create(:archivist))
158
- # ActionDispatch::Request.any_instance.stub(:env).returns({'warden': warden_mock})
159
- # end
160
-
161
- it "should route to queues if group is set properly" #do
162
- # User.any_instance.stub(:groups).returns(['umg/up.dlt.scholarsphere-admin'])
163
- # { get: '/admin/queues' }.should route_to('resque/server#index')
164
- # end
165
-
166
- it "should *not* route to queues if group is not set properly" #do
167
- # User.any_instance.stub(:groups).returns(['something'])
168
- # { get: '/admin/queues' }.should_not route_to('resque/server#index')
169
- # end
170
- end
171
-
172
167
  describe "Static Pages" do
173
168
  it "should route to about" do
174
169
  { get: '/about' }.should route_to(controller: 'static', action: 'about')
@@ -36,6 +36,20 @@ if $in_travis
36
36
  end
37
37
  end
38
38
 
39
+ if defined?(ClamAV)
40
+ ClamAV.instance.loaddb
41
+ else
42
+ class ClamAV
43
+ include Singleton
44
+ def scanfile(f)
45
+ 0
46
+ end
47
+ def loaddb
48
+ nil
49
+ end
50
+ end
51
+ end
52
+
39
53
  Resque.inline = Rails.env.test?
40
54
 
41
55
  FactoryGirl.definition_file_paths = [File.expand_path("../factories", __FILE__)]
@@ -65,10 +79,9 @@ RSpec.configure do |config|
65
79
  config.include EngineRoutes, :type => :controller
66
80
  end
67
81
 
68
-
69
82
  module FactoryGirl
70
83
  def self.find_or_create(handle, by=:email)
71
84
  tmpl = FactoryGirl.build(handle)
72
85
  tmpl.class.send("find_by_#{by}".to_sym, tmpl.send(by)) || FactoryGirl.create(handle)
73
86
  end
74
- end
87
+ end
@@ -70,7 +70,11 @@ class FitsDatastream < ActiveFedora::OmDatastream
70
70
  t.offset(:path=>"offset")
71
71
  }
72
72
  t.video {
73
- # Not yet implemented in FITS
73
+ t.width(:path=>"imageWidth")
74
+ t.height(:path=>"imageHeight")
75
+ t.duration(:path=>"duration")
76
+ t.sample_rate(:path=>"sampleRate")
77
+ t.frame_rate(:path=>"frameRate")
74
78
  }
75
79
  }
76
80
  t.format_label(:proxy=>[:identification, :identity, :format_label])
@@ -98,7 +102,9 @@ class FitsDatastream < ActiveFedora::OmDatastream
98
102
  t.byte_order(:proxy=>[:metadata, :image, :byte_order])
99
103
  t.compression(:proxy=>[:metadata, :image, :compression])
100
104
  t.width(:proxy=>[:metadata, :image, :width])
105
+ t.video_width( :proxy=>[:metadata, :video, :width])
101
106
  t.height(:proxy=>[:metadata, :image, :height])
107
+ t.video_height(:proxy=>[:metadata, :video, :height])
102
108
  t.color_space(:proxy=>[:metadata, :image, :color_space])
103
109
  t.profile_name(:proxy=>[:metadata, :image, :profile_name])
104
110
  t.profile_version(:proxy=>[:metadata, :image, :profile_version])
@@ -115,11 +121,14 @@ class FitsDatastream < ActiveFedora::OmDatastream
115
121
  t.markup_basis(:proxy=>[:metadata, :text, :markup_basis])
116
122
  t.markup_language(:proxy=>[:metadata, :text, :markup_language])
117
123
  t.duration(:proxy=>[:metadata, :audio, :duration])
124
+ t.video_duration(:proxy=>[:metadata, :video, :duration])
118
125
  t.bit_depth(:proxy=>[:metadata, :audio, :bit_depth])
119
126
  t.sample_rate(:proxy=>[:metadata, :audio, :sample_rate])
127
+ t.video_sample_rate(:proxy=>[:metadata, :video, :sample_rate])
120
128
  t.channels(:proxy=>[:metadata, :audio, :channels])
121
129
  t.data_format(:proxy=>[:metadata, :audio, :data_format])
122
130
  t.offset(:proxy=>[:metadata, :audio, :offset])
131
+ t.frame_rate(:proxy=>[:metadata, :video, :frame_rate])
123
132
  end
124
133
 
125
134
  def self.xml_template
@@ -55,7 +55,7 @@ This generator makes the following changes to your application:
55
55
  def inject_sufia_user_behavior
56
56
  file_path = "app/models/#{model_name.underscore}.rb"
57
57
  if File.exists?(file_path)
58
- inject_into_class file_path, model_name.classify do
58
+ inject_into_file file_path, after: /include Hydra\:\:User.*$/ do
59
59
  "# Connects this user object to Sufia behaviors. " +
60
60
  "\n include Sufia::User\n"
61
61
  end
@@ -1,3 +1,4 @@
1
+ require 'sufia/virus_found_error'
1
2
  module Sufia
2
3
  module GenericFile
3
4
  extend ActiveSupport::Concern
@@ -9,6 +10,7 @@ module Sufia
9
10
  autoload :Trophies, 'sufia/models/generic_file/trophies'
10
11
  autoload :Metadata, 'sufia/models/generic_file/metadata'
11
12
  autoload :Versions, 'sufia/models/generic_file/versions'
13
+ autoload :VirusCheck, 'sufia/models/generic_file/virus_check'
12
14
  include Sufia::ModelMethods
13
15
  include Sufia::Noid
14
16
  include Sufia::GenericFile::MimeTypes
@@ -22,6 +24,7 @@ module Sufia
22
24
  include Sufia::GenericFile::Trophies
23
25
  include Sufia::GenericFile::Metadata
24
26
  include Sufia::GenericFile::Versions
27
+ include Sufia::GenericFile::VirusCheck
25
28
 
26
29
  included do
27
30
  belongs_to :batch, :property => :is_part_of
@@ -2,7 +2,6 @@ module Sufia::GenericFile
2
2
  # Actions are decoupled from controller logic so that they may be called from a controller or a background job.
3
3
  module Actions
4
4
  def self.create_metadata(generic_file, user, batch_id)
5
-
6
5
  generic_file.apply_depositor_metadata(user)
7
6
  generic_file.date_uploaded = Date.today
8
7
  generic_file.date_modified = Date.today
@@ -16,7 +15,7 @@ module Sufia::GenericFile
16
15
  yield(generic_file) if block_given?
17
16
  generic_file.save!
18
17
  end
19
-
18
+
20
19
  def self.create_content(generic_file, file, file_name, dsid, user)
21
20
  generic_file.add_file(file, dsid, file_name)
22
21
 
@@ -40,15 +39,13 @@ module Sufia::GenericFile
40
39
  end
41
40
 
42
41
  def self.virus_check(file)
43
- if defined? ClamAV
44
- stat = ClamAV.instance.scanfile(file.path)
45
- logger.warn "Virus checking did not pass for #{file.inspect} status = #{stat}" unless stat == 0
46
- stat
47
- else
48
- logger.warn "Virus checking disabled for #{file.inspect}"
49
- 0
42
+ path = file.is_a?(String) ? file : file.path
43
+ unless defined?(ClamAV)
44
+ logger.warn "Virus checking disabled, #{path} not checked"
45
+ return
50
46
  end
51
- end
52
-
47
+ scan_result = ClamAV.instance.scanfile(path)
48
+ raise Sufia::VirusFoundError.new("A virus was found in #{path}: #{scan_result}") unless scan_result == 0
49
+ end
53
50
  end
54
51
  end
@@ -13,21 +13,36 @@ module Sufia
13
13
  :file_language, :word_count, :character_count,
14
14
  :paragraph_count, :line_count, :table_count,
15
15
  :graphics_count, :byte_order, :compression,
16
- :width, :height, :color_space, :profile_name,
16
+ :color_space, :profile_name,
17
17
  :profile_version, :orientation, :color_map,
18
18
  :image_producer, :capture_device,
19
19
  :scanning_software, :exif_version,
20
20
  :gps_timestamp, :latitude, :longitude,
21
21
  :character_set, :markup_basis,
22
- :markup_language, :duration, :bit_depth,
23
- :sample_rate, :channels, :data_format, :offset, datastream: :characterization, multiple: true
22
+ :markup_language, :bit_depth,
23
+ :channels, :data_format, :offset, :frame_rate, datastream: :characterization, multiple: true
24
24
 
25
25
  end
26
26
 
27
+ def width
28
+ characterization.width.blank? ? characterization.video_width : characterization.width
29
+ end
30
+
31
+ def height
32
+ characterization.height.blank? ? characterization.video_height : characterization.height
33
+ end
34
+
35
+ def duration
36
+ characterization.duration.blank? ? characterization.video_duration : characterization.duration
37
+ end
38
+
39
+ def sample_rate
40
+ characterization.sample_rate.blank? ? characterization.video_sample_rate : characterization.sample_rate
41
+ end
42
+
27
43
  def characterize_if_changed
28
44
  content_changed = self.content.changed?
29
45
  yield
30
- #logger.debug "DOING CHARACTERIZE ON #{self.pid}"
31
46
  Sufia.queue.push(CharacterizeJob.new(self.pid)) if content_changed
32
47
  end
33
48
 
@@ -0,0 +1,33 @@
1
+ module Sufia
2
+ module GenericFile
3
+ module VirusCheck
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ validate :detect_viruses
8
+ end
9
+
10
+ # Default behavior is to raise a validation error and halt the save if a virus is found
11
+ def detect_viruses
12
+ return unless content.changed?
13
+ path = if content.content.respond_to?(:path)
14
+ content.content.path
15
+ else
16
+ Tempfile.open('') do |t|
17
+ t.binmode
18
+ t.write(content.content)
19
+ t.close
20
+ t.path
21
+ end
22
+ end
23
+ Sufia::GenericFile::Actions.virus_check(path)
24
+ true
25
+ rescue Sufia::VirusFoundError => virus
26
+ logger.warn(virus.message)
27
+ errors.add(:content, virus.message)
28
+ false
29
+ end
30
+
31
+ end
32
+ end
33
+ end
@@ -22,14 +22,13 @@ module Sufia
22
22
  end
23
23
 
24
24
  def terms_for_editing
25
- terms_for_display -
26
- [:part_of, :date_modified, :date_uploaded, :format] #, :resource_type]
25
+ terms_for_display - [:date_modified, :date_uploaded, :format]
27
26
  end
28
27
 
29
28
  def terms_for_display
30
29
  # 'type' is the RDF.type assertion, which is not present by default, but may be
31
30
  # provided in some RDF schemas
32
- self.descMetadata.class.fields
31
+ self.descMetadata.class.fields - [:part_of]
33
32
  end
34
33
 
35
34
  def to_jq_upload
@@ -9,40 +9,38 @@ class ImportUrlJob < ActiveFedoraPidBasedJob
9
9
  end
10
10
 
11
11
  def run
12
- f = Tempfile.new(self.pid)
13
- f.binmode
14
-
15
- # download file from url
16
- uri = URI(generic_file.import_url)
17
- http = Net::HTTP.new(uri.host, uri.port)
18
- http.use_ssl = uri.scheme == "https" # enable SSL/TLS
19
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE
20
-
21
- http.start do
22
- http.request_get(uri.request_uri) do |resp|
23
- resp.read_body do |segment|
24
- f.write(segment)
12
+ user = User.find_by_user_key(generic_file.depositor)
13
+
14
+ Tempfile.open(self.pid) do |f|
15
+ f.binmode
16
+
17
+ # download file from url
18
+ uri = URI(generic_file.import_url)
19
+ http = Net::HTTP.new(uri.host, uri.port)
20
+ http.use_ssl = uri.scheme == "https" # enable SSL/TLS
21
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
22
+
23
+ http.start do
24
+ http.request_get(uri.request_uri) do |resp|
25
+ resp.read_body do |segment|
26
+ f.write(segment)
27
+ end
25
28
  end
26
29
  end
27
- end
28
- job_user = User.batchuser()
29
- user = User.find_by_user_key(generic_file.depositor)
30
- # check for virus
31
- if Sufia::GenericFile::Actions.virus_check(f) != 0
32
- message = "The file (#{File.basename(uri.path)}) was unable to be imported because it contained a virus."
33
- job_user.send_message(user, message, 'File Import Error')
34
- return
30
+
31
+ f.rewind
32
+ # attach downloaded file to generic file stubbed out
33
+ Sufia::GenericFile::Actions.create_content(generic_file, f, File.basename(uri.path), 'content', user)
34
+ Sufia.queue.push(ContentDepositEventJob.new(generic_file.pid, generic_file.depositor))
35
+ # add message to user for downloaded file
36
+ message = "The file (#{File.basename(uri.path)}) was successfully imported."
37
+ job_user.send_message(user, message, 'File Import')
35
38
  end
39
+ rescue => error
40
+ job_user.send_message(user, error.message, 'File Import Error')
41
+ end
36
42
 
37
- f.rewind
38
- # attach downloaded file to generic file stubbed out
39
- Sufia::GenericFile::Actions.create_content(generic_file, f, File.basename(uri.path), 'content', user)
40
- # add message to user for downloaded file
41
- message = "The file (#{File.basename(uri.path)}) was successfully imported."
42
- job_user.send_message(user, message, 'File Import')
43
-
44
- ensure
45
- f.close
46
- f.unlink
43
+ def job_user
44
+ User.batchuser
47
45
  end
48
46
  end
@@ -1,5 +1,5 @@
1
1
  module Sufia
2
2
  module Models
3
- VERSION = "3.4.0"
3
+ VERSION = "3.5.0"
4
4
  end
5
5
  end
@@ -7,7 +7,7 @@ Gem::Specification.new do |gem|
7
7
  gem.email = ["justin.coyne@yourmediashelf.com"]
8
8
  gem.description = %q{Sufia is a Rails engine for creating a self-deposit institutional repository}
9
9
  gem.summary = %q{Sufia was extracted from ScholarSphere developed by Penn State University}
10
- gem.homepage = ""
10
+ gem.homepage = "http://github.com/projecthydra/sufia"
11
11
 
12
12
  gem.files = `git ls-files`.split($\)
13
13
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
@@ -26,7 +26,7 @@ end
26
26
  desc "Run specs"
27
27
  RSpec::Core::RakeTask.new(:rspec) do |t|
28
28
  t.pattern = '../**/*_spec.rb'
29
- t.rspec_opts = ["--colour -I ../", '--backtrace']
29
+ t.rspec_opts = ["--colour -I ../", '--backtrace', '--profile 20']
30
30
  end
31
31
 
32
32
  desc "Load fixtures"
@@ -48,6 +48,7 @@ task :generate do
48
48
  puts "Updating gemfile"
49
49
 
50
50
  `echo "gem 'sufia', :path=>'../../../sufia'
51
+ gem 'clamav'
51
52
  gem 'capybara'
52
53
  gem 'factory_girl_rails'
53
54
  gem 'kaminari', github: 'harai/kaminari', branch: 'route_prefix_prototype'" >> spec/internal/Gemfile`
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: 3.4.0
4
+ version: 3.5.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-11-06 00:00:00.000000000 Z
11
+ date: 2013-12-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sufia-models
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 3.4.0
19
+ version: 3.5.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 3.4.0
26
+ version: 3.5.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: blacklight_advanced_search
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -183,7 +183,6 @@ files:
183
183
  - app/assets/images/missing_original.png
184
184
  - app/assets/images/missing_thumb.png
185
185
  - app/assets/images/progressbar.gif
186
- - app/assets/images/rails.png
187
186
  - app/assets/images/site_images/bg_body.png
188
187
  - app/assets/images/site_images/bg_breadcrumbs.png
189
188
  - app/assets/images/site_images/bg_button1.png
@@ -204,8 +203,6 @@ files:
204
203
  - app/assets/images/site_images/icon_arrow_down.png
205
204
  - app/assets/images/site_images/icons_sprite.png
206
205
  - app/assets/images/site_images/logo_psuss_footer.png
207
- - app/assets/images/site_images/temp/guitar.jpg
208
- - app/assets/images/splashscreen.png
209
206
  - app/assets/images/ui-anim_basic_16x16.gif
210
207
  - app/assets/images/ui-bg_diagonals-thick_18_b81900_40x40.png
211
208
  - app/assets/images/ui-bg_diagonals-thick_20_666666_40x40.png
@@ -222,7 +219,6 @@ files:
222
219
  - app/assets/images/ui-icons_2e4f81_256x240.png
223
220
  - app/assets/images/ui-icons_ffd27a_256x240.png
224
221
  - app/assets/images/ui-icons_ffffff_256x240.png
225
- - app/assets/images/video-still.png
226
222
  - app/assets/javascripts/contact_form.js
227
223
  - app/assets/javascripts/sufia.js
228
224
  - app/assets/javascripts/sufia/batch_select_all.js
@@ -483,6 +479,7 @@ files:
483
479
  - lib/sufia/role_mapper.rb
484
480
  - lib/sufia/single_use_error.rb
485
481
  - lib/sufia/version.rb
482
+ - lib/sufia/virus_found_error.rb
486
483
  - lib/tasks/fixtures.rake
487
484
  - public/.gitkeep
488
485
  - public/favicon.ico
@@ -532,6 +529,7 @@ files:
532
529
  - spec/fixtures/pdf_fits.xml
533
530
  - spec/fixtures/piano_note.wav
534
531
  - spec/fixtures/png_fits.xml
532
+ - spec/fixtures/sample_mpeg4.mp4
535
533
  - spec/fixtures/small_file.txt
536
534
  - spec/fixtures/sufia/.gitignore
537
535
  - spec/fixtures/sufia/bg_header.jpg
@@ -665,6 +663,7 @@ files:
665
663
  - sufia-models/lib/sufia/models/generic_file/thumbnail.rb
666
664
  - sufia-models/lib/sufia/models/generic_file/trophies.rb
667
665
  - sufia-models/lib/sufia/models/generic_file/versions.rb
666
+ - sufia-models/lib/sufia/models/generic_file/virus_check.rb
668
667
  - sufia-models/lib/sufia/models/generic_file/web_form.rb
669
668
  - sufia-models/lib/sufia/models/id_service.rb
670
669
  - sufia-models/lib/sufia/models/jobs/active_fedora_pid_based_job.rb
@@ -721,7 +720,7 @@ files:
721
720
  - vendor/assets/javascripts/swfobject.js
722
721
  - vendor/assets/javascripts/video.js
723
722
  - vendor/plugins/.gitkeep
724
- homepage: ''
723
+ homepage: http://github.com/projecthydra/sufia
725
724
  licenses:
726
725
  - APACHE2
727
726
  metadata: {}
@@ -741,7 +740,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
741
740
  version: '0'
742
741
  requirements: []
743
742
  rubyforge_project:
744
- rubygems_version: 2.0.3
743
+ rubygems_version: 2.0.14
745
744
  signing_key:
746
745
  specification_version: 4
747
746
  summary: Sufia was extracted from ScholarSphere developed by Penn State University
@@ -789,6 +788,7 @@ test_files:
789
788
  - spec/fixtures/pdf_fits.xml
790
789
  - spec/fixtures/piano_note.wav
791
790
  - spec/fixtures/png_fits.xml
791
+ - spec/fixtures/sample_mpeg4.mp4
792
792
  - spec/fixtures/small_file.txt
793
793
  - spec/fixtures/sufia/.gitignore
794
794
  - spec/fixtures/sufia/bg_header.jpg