sufia 3.0.0 → 3.1.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 (99) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/Gemfile +1 -1
  4. data/History.md +77 -0
  5. data/README.md +26 -11
  6. data/SUFIA_VERSION +1 -1
  7. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +4 -3
  8. data/app/helpers/sufia_helper.rb +7 -5
  9. data/app/jobs/ingest_local_file_job.rb +34 -0
  10. data/app/views/catalog/_facet_selected.html.erb +1 -1
  11. data/app/views/generic_files/_local_file_import.html.erb +3 -0
  12. data/app/views/generic_files/new.html.erb +10 -0
  13. data/app/views/generic_files/upload/_alerts.html.erb +2 -2
  14. data/app/views/generic_files/upload/_local_file_import_chooser.html.erb +27 -0
  15. data/app/views/generic_files/upload/_script_templates.html.erb +1 -1
  16. data/lib/generators/sufia/sufia_generator.rb +1 -0
  17. data/lib/generators/sufia/templates/config/resque_config.rb +3 -20
  18. data/lib/sufia/files_controller/local_ingest_behavior.rb +54 -0
  19. data/lib/sufia/files_controller/upload_complete_behavior.rb +7 -0
  20. data/lib/sufia/files_controller_behavior.rb +31 -11
  21. data/lib/sufia/version.rb +1 -1
  22. data/spec/active_fedora/unsaved_digital_object_spec.rb +1 -1
  23. data/spec/controllers/authorities_controller_spec.rb +1 -1
  24. data/spec/controllers/batch_controller_spec.rb +4 -4
  25. data/spec/controllers/batch_edits_controller_spec.rb +1 -1
  26. data/spec/controllers/catalog_controller_spec.rb +1 -1
  27. data/spec/controllers/dashboard_controller_spec.rb +2 -2
  28. data/spec/controllers/downloads_controller_spec.rb +2 -3
  29. data/spec/controllers/generic_files_controller_spec.rb +113 -31
  30. data/spec/controllers/mailbox_controller_spec.rb +1 -1
  31. data/spec/controllers/single_use_link_controller_spec.rb +4 -5
  32. data/spec/controllers/users_controller_spec.rb +3 -3
  33. data/spec/features/browse_dashboard_files.rb +1 -1
  34. data/spec/features/browse_files.rb +1 -1
  35. data/spec/features/contact_form.rb +1 -1
  36. data/spec/features/display_dashboard.rb +1 -1
  37. data/spec/features/ingest_upload_files.rb +1 -1
  38. data/spec/features/users_spec.rb +1 -1
  39. data/spec/helpers/generic_file_helper_spec.rb +1 -1
  40. data/spec/helpers/render_constraints_helper_behavior_spec.rb +42 -0
  41. data/spec/helpers/sufia_helper_spec.rb +40 -1
  42. data/spec/jobs/import_url_job_spec.rb +45 -0
  43. data/spec/jobs/ingest_local_file_job_spec.rb +35 -0
  44. data/spec/lib/sufia/id_service_spec.rb +1 -1
  45. data/spec/lib/sufia/upload_complete_behavior_spec.rb +26 -0
  46. data/spec/models/audit_job_spec.rb +2 -2
  47. data/spec/models/batch_spec.rb +1 -1
  48. data/spec/models/batch_update_job_spec.rb +2 -4
  49. data/spec/models/characterize_job_spec.rb +17 -14
  50. data/spec/models/checksum_audit_log_spec.rb +2 -2
  51. data/spec/models/event_jobs_spec.rb +2 -2
  52. data/spec/models/file_content_datastream_spec.rb +5 -5
  53. data/spec/models/fits_datastream_spec.rb +2 -2
  54. data/spec/models/generic_file/actions_spec.rb +25 -0
  55. data/spec/models/generic_file/web_form_spec.rb +1 -1
  56. data/spec/models/generic_file_spec.rb +16 -33
  57. data/spec/models/local_authority_spec.rb +1 -1
  58. data/spec/models/properties_datastream_spec.rb +1 -1
  59. data/spec/models/single_use_link_spec.rb +1 -1
  60. data/spec/models/solr_document_spec.rb +1 -1
  61. data/spec/models/transcode_audio_job_spec.rb +22 -18
  62. data/spec/models/transcode_video_job_spec.rb +4 -3
  63. data/spec/models/trophy_spec.rb +1 -1
  64. data/spec/models/unzip_job_spec.rb +2 -2
  65. data/spec/models/user_spec.rb +1 -1
  66. data/spec/rake/sufia_fixtures_spec.rb +1 -1
  67. data/spec/routing/route_spec.rb +1 -1
  68. data/spec/spec_helper.rb +2 -2
  69. data/spec/views/batch_edits/check_all_spec.rb +1 -1
  70. data/sufia-models/app/models/datastreams/file_content_datastream.rb +1 -15
  71. data/sufia-models/app/models/geo_names_resource.rb +0 -2
  72. data/sufia-models/lib/sufia/models.rb +1 -1
  73. data/sufia-models/lib/sufia/models/engine.rb +12 -1
  74. data/sufia-models/lib/sufia/models/file_content.rb +0 -3
  75. data/sufia-models/lib/sufia/models/generic_file.rb +6 -10
  76. data/sufia-models/lib/sufia/models/generic_file/actions.rb +1 -1
  77. data/sufia-models/lib/sufia/models/generic_file/characterization.rb +1 -1
  78. data/sufia-models/lib/sufia/models/generic_file/derivatives.rb +31 -0
  79. data/sufia-models/lib/sufia/models/generic_file/mime_types.rb +27 -0
  80. data/sufia-models/lib/sufia/models/generic_file/thumbnail.rb +6 -60
  81. data/sufia-models/lib/sufia/models/jobs/active_fedora_pid_based_job.rb +19 -0
  82. data/sufia-models/lib/sufia/models/jobs/audit_job.rb +12 -8
  83. data/sufia-models/lib/sufia/models/jobs/characterize_job.rb +3 -10
  84. data/sufia-models/lib/sufia/models/jobs/import_url_job.rb +2 -9
  85. data/sufia-models/lib/sufia/models/jobs/resolrize_job.rb +8 -1
  86. data/sufia-models/lib/sufia/models/jobs/transcode_audio_job.rb +4 -28
  87. data/sufia-models/lib/sufia/models/jobs/transcode_video_job.rb +4 -28
  88. data/sufia-models/lib/sufia/models/jobs/unzip_job.rb +5 -19
  89. data/sufia-models/lib/sufia/models/model_methods.rb +2 -16
  90. data/sufia-models/lib/sufia/models/user_local_directory_behavior.rb +29 -0
  91. data/sufia-models/lib/sufia/models/version.rb +1 -1
  92. data/sufia-models/sufia-models.gemspec +1 -1
  93. data/sufia.gemspec +2 -1
  94. data/tasks/sufia-dev.rake +1 -1
  95. metadata +26 -10
  96. data/app/assets/stylesheets/jquery-ui-1.8.1.custom.css +0 -486
  97. data/app/assets/stylesheets/jquery-ui-1.8.23.custom.css +0 -340
  98. data/sufia-models/lib/sufia/models/file_content/extract_metadata.rb +0 -60
  99. data/sufia-models/lib/sufia/models/jobs/ffmpeg_transcode_job.rb +0 -61
@@ -0,0 +1,19 @@
1
+ class ActiveFedoraPidBasedJob
2
+ def queue_name
3
+ :pid_based
4
+ end
5
+
6
+ attr_accessor :pid
7
+ def initialize(pid)
8
+ self.pid = pid
9
+ end
10
+ def object
11
+ @object ||= ActiveFedora::Base.find(pid, cast:true)
12
+ end
13
+ alias_method :generic_file, :object
14
+ alias_method :generic_file_id, :pid
15
+
16
+ def run
17
+ raise RuntimeError, "Define #run in a subclass"
18
+ end
19
+ end
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- class AuditJob
15
+ class AuditJob < ActiveFedoraPidBasedJob
16
16
  def queue_name
17
17
  :audit
18
18
  end
@@ -20,16 +20,15 @@ class AuditJob
20
20
  PASS = 'Passing Audit Run'
21
21
  FAIL = 'Failing Audit Run'
22
22
 
23
- attr_accessor :generic_file_id, :datastream_id, :version_id
23
+ attr_accessor :pid, :datastream_id, :version_id
24
24
 
25
- def initialize(generic_file_id, datastream_id, version_id)
26
- self.generic_file_id = generic_file_id
25
+ def initialize(pid, datastream_id, version_id)
26
+ super(pid)
27
27
  self.datastream_id = datastream_id
28
28
  self.version_id = version_id
29
29
  end
30
30
 
31
31
  def run
32
- generic_file = GenericFile.find(generic_file_id)
33
32
  #logger.info "GF is #{generic_file.pid}"
34
33
  if generic_file
35
34
  datastream = generic_file.datastreams[datastream_id]
@@ -37,7 +36,7 @@ class AuditJob
37
36
  if datastream
38
37
  #logger.info "Datastream for audit = #{datastream.inspect}"
39
38
  version = datastream.versions.select { |v| v.versionID == version_id}.first
40
- log = GenericFile.run_audit(version)
39
+ log = run_audit(version)
41
40
 
42
41
  # look up the user for sending the message to
43
42
  login = generic_file.depositor
@@ -56,10 +55,15 @@ class AuditJob
56
55
  end
57
56
  end
58
57
  else
59
- logger.warn "No datastream for audit!!!!! pid: #{generic_file_id} dsid: #{datastream_id}"
58
+ logger.warn "No datastream for audit!!!!! pid: #{pid} dsid: #{datastream_id}"
60
59
  end
61
60
  else
62
- logger.warn "No generic file for data stream audit!!!!! pid: #{generic_file_id} dsid: #{datastream_id}"
61
+ logger.warn "No generic file for data stream audit!!!!! pid: #{pid} dsid: #{datastream_id}"
63
62
  end
64
63
  end
64
+
65
+ private
66
+ def run_audit(version)
67
+ object.class.run_audit(version)
68
+ end
65
69
  end
@@ -12,20 +12,13 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- class CharacterizeJob
15
+ class CharacterizeJob < ActiveFedoraPidBasedJob
16
16
 
17
17
  def queue_name
18
18
  :characterize
19
19
  end
20
20
 
21
- attr_accessor :generic_file_id, :generic_file
22
-
23
- def initialize(generic_file_id)
24
- self.generic_file_id = generic_file_id
25
- end
26
-
27
21
  def run
28
- self.generic_file = GenericFile.find(generic_file_id)
29
22
  generic_file.characterize
30
23
  after_characterize
31
24
  end
@@ -35,9 +28,9 @@ class CharacterizeJob
35
28
  generic_file.create_thumbnail
36
29
  end
37
30
  if generic_file.video?
38
- Sufia.queue.push(TranscodeVideoJob.new(generic_file_id, 'content'))
31
+ Sufia.queue.push(TranscodeVideoJob.new(generic_file_id))
39
32
  elsif generic_file.audio?
40
- Sufia.queue.push(TranscodeAudioJob.new(generic_file_id, 'content'))
33
+ Sufia.queue.push(TranscodeAudioJob.new(generic_file_id))
41
34
  end
42
35
  end
43
36
  end
@@ -2,20 +2,13 @@ require 'net/https'
2
2
  require 'uri'
3
3
  require 'tempfile'
4
4
 
5
- class ImportUrlJob
5
+ class ImportUrlJob < ActiveFedoraPidBasedJob
6
6
 
7
7
  def queue_name
8
8
  :import_url
9
9
  end
10
10
 
11
- attr_accessor :pid
12
-
13
- def initialize(pid)
14
- self.pid = pid
15
- end
16
-
17
11
  def run
18
- generic_file = GenericFile.find(self.pid)
19
12
  f = Tempfile.new(self.pid)
20
13
  f.binmode
21
14
 
@@ -26,7 +19,7 @@ class ImportUrlJob
26
19
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
27
20
 
28
21
  http.start do
29
- http.request_get(uri) do |resp|
22
+ http.request_get(uri.request_uri) do |resp|
30
23
  resp.read_body do |segment|
31
24
  f.write(segment)
32
25
  end
@@ -18,6 +18,13 @@ class ResolrizeJob
18
18
  end
19
19
 
20
20
  def run
21
- ActiveFedora::Base.reindex_everything
21
+ require 'active_fedora/version'
22
+ active_fedora_version = Gem::Version.new(ActiveFedora::VERSION)
23
+ minimum_feature_version = Gem::Version.new('6.4.4')
24
+ if active_fedora_version >= minimum_feature_version
25
+ ActiveFedora::Base.reindex_everything("pid~#{Sufia.config.id_namespace}:*")
26
+ else
27
+ ActiveFedora::Base.reindex_everything
28
+ end
22
29
  end
23
30
  end
@@ -2,38 +2,14 @@
2
2
  # 7 Feb 2013
3
3
  # An asyncronous job for transcoding audio files using FFMpeg
4
4
 
5
- class TranscodeAudioJob < FfmpegTranscodeJob
5
+ class TranscodeAudioJob < ActiveFedoraPidBasedJob
6
6
  def queue_name
7
7
  :audio
8
8
  end
9
9
 
10
- def process
11
- encode_mp3()
12
- encode_ogg()
10
+ def run
11
+ generic_file.create_derivatives
12
+ generic_file.save
13
13
  end
14
14
 
15
- private
16
- def encode_ogg
17
- opts = ""
18
- if generic_file.mime_type == 'audio/ogg'
19
- # Don't re-encode, just copy
20
- generic_file.add_file_datastream(generic_file.content.read, :dsid=>'ogg', :mimeType=>'audio/ogg')
21
- #generic_file.content.rewind
22
- else
23
- encode_datastream('ogg', 'audio/ogg', opts)
24
- end
25
- end
26
-
27
- def encode_mp3
28
- opts = ""
29
- if generic_file.mime_type == 'audio/mpeg'
30
- # Don't re-encode, just copy
31
- generic_file.add_file_datastream(generic_file.content.read, :dsid=>'mp3', :mimeType=>'audio/mpeg')
32
- else
33
- encode_datastream('mp3', 'audio/mpeg', opts)
34
- end
35
- end
36
-
37
-
38
15
  end
39
-
@@ -2,38 +2,14 @@
2
2
  # 13 Dec 2012
3
3
  # An asyncronous job for transcoding video files using FFMpeg
4
4
 
5
- class TranscodeVideoJob < FfmpegTranscodeJob
5
+ class TranscodeVideoJob < ActiveFedoraPidBasedJob
6
6
  def queue_name
7
7
  :video
8
8
  end
9
9
 
10
- def process
11
- encode_mp4()
12
- encode_webm()
13
- end
14
-
15
- private
16
-
17
- def encode_webm
18
- # -g 30 enforces keyframe generation every second (30fps)
19
- # -b:v is the video bitrate
20
- # -acodec is the audio codec
21
- opts = "#{size_attributes} -g 30 -b:v 345k -acodec libvorbis #{audio_attributes}"
22
- encode_datastream('webm', 'video/webm', opts)
23
- end
24
-
25
- def encode_mp4
26
- opts = "#{size_attributes} -b:v 345k -vcodec libx264 -acodec libfaac #{audio_attributes} "
27
- encode_datastream('mp4', 'video/mp4', opts)
28
- end
29
-
30
-
31
- def size_attributes
32
- "-s 320x240"
33
- end
34
-
35
- def audio_attributes
36
- "-ac 2 -ab 96k -ar 44100"
10
+ def run
11
+ generic_file.create_derivatives
12
+ generic_file.save
37
13
  end
38
14
  end
39
15
 
@@ -12,19 +12,13 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- class UnzipJob
15
+ class UnzipJob < ActiveFedoraPidBasedJob
16
16
  def queue_name
17
17
  :unzip
18
18
  end
19
19
 
20
- attr_accessor :pid
21
-
22
- def initialize(pid)
23
- self.pid = pid
24
- end
25
-
26
20
  def run
27
- Zip::Archive.open_buffer(zip_file.content.content) do |archive|
21
+ Zip::Archive.open_buffer(object.content.content) do |archive|
28
22
  archive.each do |f|
29
23
  if f.directory?
30
24
  create_directory(f)
@@ -41,14 +35,9 @@ class UnzipJob
41
35
  # @param file [Zip::File]
42
36
  def create_file(file)
43
37
  @generic_file = GenericFile.new
44
- @generic_file.batch_id = zip_file.batch.pid
45
- file_name = file.name
46
- mime_types = MIME::Types.of(file_name)
47
- mime_type = mime_types.empty? ? "application/octet-stream" : mime_types.first.content_type
48
- options = {:label=>file_name, :dsid=>'content', :mimeType=>mime_type}
49
- @generic_file.add_file_datastream(file.read, options)
50
- @generic_file.set_title_and_label( file_name, :only_if_blank=>true )
51
- @generic_file.apply_depositor_metadata(zip_file.edit_users.first)
38
+ @generic_file.batch_id = object.batch.pid
39
+ @generic_file.add_file(file.read, 'content', file.name)
40
+ @generic_file.apply_depositor_metadata(object.edit_users.first)
52
41
  @generic_file.date_uploaded = Time.now.ctime
53
42
  @generic_file.date_modified = Time.now.ctime
54
43
  @generic_file.save
@@ -60,7 +49,4 @@ class UnzipJob
60
49
  def create_directory(file)
61
50
  end
62
51
 
63
- def zip_file
64
- @zip_file ||= GenericFile.find(pid)
65
- end
66
52
  end
@@ -1,18 +1,3 @@
1
- # Copyright © 2012 The Pennsylvania State University
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- require 'hydra/model_methods'
16
1
  module Sufia
17
2
  module ModelMethods
18
3
  extend ActiveSupport::Concern
@@ -26,9 +11,10 @@ module Sufia
26
11
  # Adds metadata about the depositor to the asset
27
12
  # Most important behavior: if the asset has a rightsMetadata datastream, this method will add +depositor_id+ to its individual edit permissions.
28
13
 
29
- def apply_depositor_metadata(depositor_id)
14
+ def apply_depositor_metadata(depositor)
30
15
  rights_ds = self.datastreams["rightsMetadata"]
31
16
  prop_ds = self.datastreams["properties"]
17
+ depositor_id = depositor.respond_to?(:user_key) ? depositor.user_key : depositor
32
18
 
33
19
  rights_ds.update_indexed_attributes([:edit_access, :person]=>depositor_id) unless rights_ds.nil?
34
20
  prop_ds.depositor = depositor_id unless prop_ds.nil?
@@ -0,0 +1,29 @@
1
+ # To enable local file ingest,
2
+ # - Make User model define .directory method that returns a String corresponding to the User's personal import directory on the server. This can be a simple ActiveRecord attribute on the User model, or it can be something more elaborate.
3
+ # - Include this module in your User model, or define a .files() method that behaves the same
4
+ # - Set Sufia.config.enable_local_ingest to true
5
+ #
6
+ module Sufia::UserLocalDirectoryBehavior
7
+
8
+ # You can use this validator in your User model.
9
+ # Ensures that a string defining the path to the user's directory has been provided
10
+ # and corresponds to a real directory on the server.
11
+ # @example
12
+ # validate :directory_must_exist
13
+ def directory_must_exist
14
+ unless directory.blank? || File.directory?(directory)
15
+ errors.add(:directory, "must be an existing directory")
16
+ end
17
+ end
18
+
19
+ # List the contents of the user's directory on the server
20
+ # Indicates whether each item is a directory or not.
21
+ def files
22
+ return [] unless directory.present? && File.directory?(directory)
23
+ Dir[File.join(directory, '*')].inject([]) do |accum, val|
24
+ accum << { name: File.basename(val), directory: File.directory?(val)}
25
+ accum
26
+ end
27
+ end
28
+
29
+ end
@@ -1,5 +1,5 @@
1
1
  module Sufia
2
2
  module Models
3
- VERSION = "3.0.0"
3
+ VERSION = "3.1.0"
4
4
  end
5
5
  end
@@ -38,9 +38,9 @@ Gem::Specification.new do |spec|
38
38
  spec.add_dependency 'noid', '~> 0.6.6'
39
39
  spec.add_dependency 'curationexperts-mailboxer', '0.10.3'
40
40
  spec.add_dependency 'acts_as_follower', '0.1.1'
41
- spec.add_dependency 'rmagick'
42
41
  spec.add_dependency 'paperclip', '~> 3.4.0'
43
42
  spec.add_dependency 'zipruby', '0.3.6'
43
+ spec.add_dependency 'hydra-derivatives', '~> 0.0.5'
44
44
  # https://github.com/zdennis/activerecord-import/pull/79
45
45
  #spec.add_dependency 'activerecord-import', '0.3.0' # 0.3.1 caused a bug in testing: "SQLite3::SQLException: near ",": syntax error: INSERT INTO..."
46
46
  end
@@ -14,7 +14,8 @@ Gem::Specification.new do |gem|
14
14
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
15
15
  gem.name = "sufia"
16
16
  gem.require_paths = ["lib"]
17
- gem.version = version
17
+ gem.version = version
18
+ gem.license = 'APACHE2'
18
19
 
19
20
  gem.add_dependency 'sufia-models', version
20
21
  gem.add_dependency 'blacklight', '~> 4.0'
@@ -27,7 +27,7 @@ gem_home = File.expand_path('../../', __FILE__)
27
27
  desc "Run specs"
28
28
  RSpec::Core::RakeTask.new(:rspec) do |t|
29
29
  t.pattern = '../**/*_spec.rb'
30
- t.rspec_opts = "--colour"
30
+ t.rspec_opts = "--colour -I ../"
31
31
  end
32
32
 
33
33
  desc "Load fixtures"
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.0.0
4
+ version: 3.1.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-07-22 00:00:00.000000000 Z
11
+ date: 2013-08-09 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.0.0
19
+ version: 3.1.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.0.0
26
+ version: 3.1.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: blacklight
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -252,8 +252,6 @@ files:
252
252
  - app/assets/stylesheets/fileupload/style.css
253
253
  - app/assets/stylesheets/fileupload/thumbnail-scaling.css
254
254
  - app/assets/stylesheets/generic_files.css
255
- - app/assets/stylesheets/jquery-ui-1.8.1.custom.css
256
- - app/assets/stylesheets/jquery-ui-1.8.23.custom.css
257
255
  - app/assets/stylesheets/jquery-ui.css
258
256
  - app/assets/stylesheets/reset_body.css
259
257
  - app/assets/stylesheets/sufia.css.scss
@@ -285,6 +283,7 @@ files:
285
283
  - app/jobs/content_restored_version_event_job.rb
286
284
  - app/jobs/content_update_event_job.rb
287
285
  - app/jobs/event_job.rb
286
+ - app/jobs/ingest_local_file_job.rb
288
287
  - app/jobs/user_edit_profile_event_job.rb
289
288
  - app/jobs/user_follow_event_job.rb
290
289
  - app/jobs/user_unfollow_event_job.rb
@@ -403,6 +402,7 @@ files:
403
402
  - app/views/generic_files/_field_display.html.erb
404
403
  - app/views/generic_files/_field_form.html.erb
405
404
  - app/views/generic_files/_groups_description.html.erb
405
+ - app/views/generic_files/_local_file_import.html.erb
406
406
  - app/views/generic_files/_media_display.html.erb
407
407
  - app/views/generic_files/_multiple_upload.html.erb
408
408
  - app/views/generic_files/_permission.html.erb
@@ -428,6 +428,7 @@ files:
428
428
  - app/views/generic_files/upload/_dropbox_chooser.html.erb
429
429
  - app/views/generic_files/upload/_form.html.erb
430
430
  - app/views/generic_files/upload/_form_fields.html.erb
431
+ - app/views/generic_files/upload/_local_file_import_chooser.html.erb
431
432
  - app/views/generic_files/upload/_script_templates.html.erb
432
433
  - app/views/generic_files/upload/_tos_checkbox.html.erb
433
434
  - app/views/kaminari/blacklight/_first_page.html.erb
@@ -499,6 +500,8 @@ files:
499
500
  - lib/sufia/controller.rb
500
501
  - lib/sufia/dashboard_controller_behavior.rb
501
502
  - lib/sufia/downloads_controller_behavior.rb
503
+ - lib/sufia/files_controller/local_ingest_behavior.rb
504
+ - lib/sufia/files_controller/upload_complete_behavior.rb
502
505
  - lib/sufia/files_controller_behavior.rb
503
506
  - lib/sufia/role_mapper.rb
504
507
  - lib/sufia/single_use_error.rb
@@ -579,8 +582,12 @@ files:
579
582
  - spec/fixtures/xls_fits.xml
580
583
  - spec/fixtures/xml_fits.xml
581
584
  - spec/helpers/generic_file_helper_spec.rb
585
+ - spec/helpers/render_constraints_helper_behavior_spec.rb
582
586
  - spec/helpers/sufia_helper_spec.rb
587
+ - spec/jobs/import_url_job_spec.rb
588
+ - spec/jobs/ingest_local_file_job_spec.rb
583
589
  - spec/lib/sufia/id_service_spec.rb
590
+ - spec/lib/sufia/upload_complete_behavior_spec.rb
584
591
  - spec/models/audit_job_spec.rb
585
592
  - spec/models/batch_spec.rb
586
593
  - spec/models/batch_update_job_spec.rb
@@ -589,6 +596,7 @@ files:
589
596
  - spec/models/event_jobs_spec.rb
590
597
  - spec/models/file_content_datastream_spec.rb
591
598
  - spec/models/fits_datastream_spec.rb
599
+ - spec/models/generic_file/actions_spec.rb
592
600
  - spec/models/generic_file/web_form_spec.rb
593
601
  - spec/models/generic_file_spec.rb
594
602
  - spec/models/local_authority_spec.rb
@@ -640,22 +648,23 @@ files:
640
648
  - sufia-models/lib/sufia/models/active_support/core_ext/marshal.rb
641
649
  - sufia-models/lib/sufia/models/engine.rb
642
650
  - sufia-models/lib/sufia/models/file_content.rb
643
- - sufia-models/lib/sufia/models/file_content/extract_metadata.rb
644
651
  - sufia-models/lib/sufia/models/file_content/versions.rb
645
652
  - sufia-models/lib/sufia/models/generic_file.rb
646
653
  - sufia-models/lib/sufia/models/generic_file/accessible_attributes.rb
647
654
  - sufia-models/lib/sufia/models/generic_file/actions.rb
648
655
  - sufia-models/lib/sufia/models/generic_file/audit.rb
649
656
  - sufia-models/lib/sufia/models/generic_file/characterization.rb
657
+ - sufia-models/lib/sufia/models/generic_file/derivatives.rb
650
658
  - sufia-models/lib/sufia/models/generic_file/export.rb
659
+ - sufia-models/lib/sufia/models/generic_file/mime_types.rb
651
660
  - sufia-models/lib/sufia/models/generic_file/permissions.rb
652
661
  - sufia-models/lib/sufia/models/generic_file/thumbnail.rb
653
662
  - sufia-models/lib/sufia/models/generic_file/web_form.rb
654
663
  - sufia-models/lib/sufia/models/id_service.rb
664
+ - sufia-models/lib/sufia/models/jobs/active_fedora_pid_based_job.rb
655
665
  - sufia-models/lib/sufia/models/jobs/audit_job.rb
656
666
  - sufia-models/lib/sufia/models/jobs/batch_update_job.rb
657
667
  - sufia-models/lib/sufia/models/jobs/characterize_job.rb
658
- - sufia-models/lib/sufia/models/jobs/ffmpeg_transcode_job.rb
659
668
  - sufia-models/lib/sufia/models/jobs/import_url_job.rb
660
669
  - sufia-models/lib/sufia/models/jobs/resolrize_job.rb
661
670
  - sufia-models/lib/sufia/models/jobs/transcode_audio_job.rb
@@ -666,6 +675,7 @@ files:
666
675
  - sufia-models/lib/sufia/models/resque.rb
667
676
  - sufia-models/lib/sufia/models/solr_document_behavior.rb
668
677
  - sufia-models/lib/sufia/models/user.rb
678
+ - sufia-models/lib/sufia/models/user_local_directory_behavior.rb
669
679
  - sufia-models/lib/sufia/models/utils.rb
670
680
  - sufia-models/lib/sufia/models/version.rb
671
681
  - sufia-models/lib/tasks/resque.rake
@@ -707,7 +717,8 @@ files:
707
717
  - vendor/assets/javascripts/video.js
708
718
  - vendor/plugins/.gitkeep
709
719
  homepage: ''
710
- licenses: []
720
+ licenses:
721
+ - APACHE2
711
722
  metadata: {}
712
723
  post_install_message:
713
724
  rdoc_options: []
@@ -725,7 +736,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
725
736
  version: '0'
726
737
  requirements: []
727
738
  rubyforge_project:
728
- rubygems_version: 2.0.3
739
+ rubygems_version: 2.0.5
729
740
  signing_key:
730
741
  specification_version: 4
731
742
  summary: Sufia was extracted from ScholarSphere developed by Penn State University
@@ -800,8 +811,12 @@ test_files:
800
811
  - spec/fixtures/xls_fits.xml
801
812
  - spec/fixtures/xml_fits.xml
802
813
  - spec/helpers/generic_file_helper_spec.rb
814
+ - spec/helpers/render_constraints_helper_behavior_spec.rb
803
815
  - spec/helpers/sufia_helper_spec.rb
816
+ - spec/jobs/import_url_job_spec.rb
817
+ - spec/jobs/ingest_local_file_job_spec.rb
804
818
  - spec/lib/sufia/id_service_spec.rb
819
+ - spec/lib/sufia/upload_complete_behavior_spec.rb
805
820
  - spec/models/audit_job_spec.rb
806
821
  - spec/models/batch_spec.rb
807
822
  - spec/models/batch_update_job_spec.rb
@@ -810,6 +825,7 @@ test_files:
810
825
  - spec/models/event_jobs_spec.rb
811
826
  - spec/models/file_content_datastream_spec.rb
812
827
  - spec/models/fits_datastream_spec.rb
828
+ - spec/models/generic_file/actions_spec.rb
813
829
  - spec/models/generic_file/web_form_spec.rb
814
830
  - spec/models/generic_file_spec.rb
815
831
  - spec/models/local_authority_spec.rb