sufia 3.4.0 → 3.5.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 (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