hydra-derivatives 3.3.2 → 3.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +69 -0
  3. data/.rubocop.yml +53 -34
  4. data/.rubocop_todo.yml +42 -9
  5. data/.solr_wrapper +2 -0
  6. data/CODE_OF_CONDUCT.md +36 -0
  7. data/CONTRIBUTING.md +23 -21
  8. data/Gemfile +5 -3
  9. data/README.md +74 -5
  10. data/Rakefile +13 -1
  11. data/SUPPORT.md +5 -0
  12. data/VERSION +1 -1
  13. data/config/fcrepo_wrapper_test.yml +6 -0
  14. data/config/solr_wrapper_test.yml +2 -0
  15. data/hydra-derivatives.gemspec +16 -16
  16. data/lib/hydra/derivatives.rb +2 -2
  17. data/lib/hydra/derivatives/audio_encoder.rb +1 -1
  18. data/lib/hydra/derivatives/config.rb +1 -1
  19. data/lib/hydra/derivatives/io_decorator.rb +13 -6
  20. data/lib/hydra/derivatives/logger.rb +5 -1
  21. data/lib/hydra/derivatives/processors/active_encode.rb +1 -1
  22. data/lib/hydra/derivatives/processors/document.rb +4 -1
  23. data/lib/hydra/derivatives/processors/full_text.rb +20 -6
  24. data/lib/hydra/derivatives/processors/jpeg2k_image.rb +7 -16
  25. data/lib/hydra/derivatives/processors/processor.rb +0 -7
  26. data/lib/hydra/derivatives/processors/shell_based_processor.rb +5 -3
  27. data/lib/hydra/derivatives/runners/full_text_extract.rb +1 -1
  28. data/lib/hydra/derivatives/services/capability_service.rb +1 -1
  29. data/lib/hydra/derivatives/services/persist_basic_contained_output_file_service.rb +5 -1
  30. data/lib/hydra/derivatives/services/persist_output_file_service.rb +5 -3
  31. data/solr/config/schema.xml +0 -2
  32. data/solr/config/xslt/example.xsl +1 -1
  33. data/solr/config/xslt/luke.xsl +1 -1
  34. metadata +187 -138
  35. data/.travis.yml +0 -26
  36. data/spec/fixtures/FlashPix.ppt +0 -0
  37. data/spec/fixtures/adobe1998.tif +0 -0
  38. data/spec/fixtures/countdown.avi +0 -0
  39. data/spec/fixtures/jpeg2k_config.yml +0 -20
  40. data/spec/fixtures/piano_note.wav +0 -0
  41. data/spec/fixtures/sample.rtf +0 -68
  42. data/spec/fixtures/test.dng +0 -0
  43. data/spec/fixtures/test.doc +0 -0
  44. data/spec/fixtures/test.docx +0 -0
  45. data/spec/fixtures/test.pdf +0 -0
  46. data/spec/fixtures/test.pptx +0 -0
  47. data/spec/fixtures/test.tif +0 -0
  48. data/spec/fixtures/test.xls +0 -0
  49. data/spec/fixtures/test.xlsx +0 -0
  50. data/spec/fixtures/world.png +0 -0
  51. data/spec/processors/active_encode_spec.rb +0 -132
  52. data/spec/processors/document_spec.rb +0 -41
  53. data/spec/processors/full_text_spec.rb +0 -70
  54. data/spec/processors/image_spec.rb +0 -122
  55. data/spec/processors/jpeg2k_spec.rb +0 -82
  56. data/spec/processors/processor_spec.rb +0 -35
  57. data/spec/processors/shell_based_processor_spec.rb +0 -19
  58. data/spec/processors/video_spec.rb +0 -40
  59. data/spec/runners/active_encode_derivatives_spec.rb +0 -38
  60. data/spec/services/audio_derivatives_spec.rb +0 -78
  61. data/spec/services/persist_basic_contained_output_file_service_spec.rb +0 -40
  62. data/spec/services/persist_external_file_output_file_service_spec.rb +0 -26
  63. data/spec/services/remote_source_file_spec.rb +0 -33
  64. data/spec/services/retrieve_source_file_service_spec.rb +0 -60
  65. data/spec/services/tempfile_service_spec.rb +0 -30
  66. data/spec/spec_helper.rb +0 -33
  67. data/spec/units/audio_encoder_spec.rb +0 -23
  68. data/spec/units/config_spec.rb +0 -50
  69. data/spec/units/derivatives_spec.rb +0 -62
  70. data/spec/units/io_decorator_spec.rb +0 -33
  71. data/spec/units/logger_spec.rb +0 -22
  72. data/spec/units/transcoding_spec.rb +0 -346
data/Rakefile CHANGED
@@ -20,7 +20,7 @@ namespace :derivatives do
20
20
  end
21
21
 
22
22
  RSpec::Core::RakeTask.new(:rspec) do |task|
23
- task.rspec_opts = "--tag ~requires_imagemagick --tag ~requires_ffmpeg --tag ~requires_libreoffice --tag ~requires_kdu_compress" if ENV['TRAVIS']
23
+ task.rspec_opts = "--tag ~requires_kdu_compress" if ENV['CI']
24
24
  end
25
25
 
26
26
  desc 'Start up Solr & Fedora and run tests'
@@ -29,6 +29,18 @@ namespace :derivatives do
29
29
  Rake::Task['derivatives:rspec'].invoke
30
30
  end
31
31
  end
32
+
33
+ desc 'Start up test server'
34
+ task :test_server do
35
+ ENV["RAILS_ENV"] = "test"
36
+ with_test_server do
37
+ puts "Solr: http://localhost:#{ENV["SOLR_TEST_PORT"]}/solr"
38
+ puts "Fedora: http://localhost:#{ENV["FCREPO_TEST_PORT"]}/rest"
39
+ while(1) do
40
+ sleep(1)
41
+ end
42
+ end
43
+ end
32
44
  end
33
45
 
34
46
  desc 'Run continuous integration build'
@@ -0,0 +1,5 @@
1
+ If you would like to report an issue, first search [the list of issues](https://github.com/samvera/hydra-derivatives/issues/) to see if someone else has already reported it, and then feel free to [create a new issue](https://github.com/samvera/hydra-derivatives/issues/new).
2
+
3
+ If you have questions or need help, please email [the Samvera community tech list](https://groups.google.com/forum/#!forum/samvera-tech) or stop by the #dev channel in [the Samvera community Slack team](https://wiki.duraspace.org/pages/viewpage.action?pageId=87460391#Getintouch!-Slack).
4
+
5
+ You can learn more about the various Samvera communication channels on the [Get in touch!](https://wiki.duraspace.org/pages/viewpage.action?pageId=87460391) wiki page.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.3.2
1
+ 3.6.0
@@ -0,0 +1,6 @@
1
+ port: 8986
2
+ verbose: true
3
+ managed: true
4
+ enable_jms: false
5
+ fcrepo_home_dir: tmp/fcrepo4-test-data
6
+ version: 4.7.4
@@ -0,0 +1,2 @@
1
+ ---
2
+ port: 8985
@@ -1,34 +1,34 @@
1
- # coding: utf-8
2
1
  version = File.read(File.expand_path("../VERSION", __FILE__)).strip
3
2
 
4
-
5
3
  Gem::Specification.new do |spec|
6
4
  spec.name = "hydra-derivatives"
7
5
  spec.version = version
8
6
  spec.authors = ["Justin Coyne"]
9
- spec.email = ["justin@curationexperts.com"]
10
- spec.description = %q{Derivative generation plugin for hydra}
11
- spec.summary = %q{Derivative generation plugin for hydra}
7
+ spec.email = ["jenlindner@gmail.com", "jcoyne85@stanford.edu"]
8
+ spec.description = "Derivative generation plugin for hydra"
9
+ spec.summary = "Derivative generation plugin for hydra"
12
10
  spec.license = "APACHE2"
13
11
  spec.homepage = "https://github.com/projecthydra/hydra-derivatives"
14
12
 
15
- spec.files = `git ls-files`.split($/)
13
+ spec.files = `git ls-files`.split($OUTPUT_RECORD_SEPARATOR).select { |f| File.dirname(f) !~ %r{\A"?spec|test|features\/?} }
16
14
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
15
  spec.require_paths = ["lib"]
19
16
 
20
- spec.add_development_dependency 'bundler', '~> 1.3'
17
+ spec.add_development_dependency 'bundler', '~> 2.1'
18
+ spec.add_development_dependency 'fcrepo_wrapper', '~> 0.2'
19
+ spec.add_development_dependency 'pry-byebug'
20
+ spec.add_development_dependency 'rails', '> 5.1', '< 7.0'
21
21
  spec.add_development_dependency 'rake', '~> 10.1'
22
22
  spec.add_development_dependency 'rspec', '~> 3.1'
23
- spec.add_development_dependency "solr_wrapper", "~> 0.4"
24
- spec.add_development_dependency 'fcrepo_wrapper', '~> 0.2'
23
+ spec.add_development_dependency "solr_wrapper", "~> 2.0"
25
24
 
26
- spec.add_dependency 'active-fedora', '>= 11.3.1', '< 12'
27
- spec.add_dependency 'mini_magick', '>= 3.2', '< 5'
28
- spec.add_dependency 'activesupport', '>= 4.0', '< 6'
29
- spec.add_dependency 'mime-types', '> 2.0', '< 4.0'
25
+ spec.add_dependency 'active-fedora', '>= 11.5.6',
26
+ '!= 12.0.0', '!= 12.0.1', '!= 12.0.2', '!= 12.0.3', '!= 12.1.0', '!= 12.1.1', '!= 12.2.0', '!= 12.2.1',
27
+ '!= 13.0.0', '!= 13.1.0', '!= 13.1.1', '!= 13.1.2', '!= 13.1.3', '!= 13.2.0', '!= 13.2.1'
30
28
  spec.add_dependency 'active_encode', '~>0.1'
31
- spec.add_dependency 'addressable', '~>2.5'
29
+ spec.add_dependency 'activesupport', '>= 4.0', '< 7'
30
+ spec.add_dependency 'addressable', '~> 2.5'
32
31
  spec.add_dependency 'deprecation'
32
+ spec.add_dependency 'mime-types', '> 2.0', '< 4.0'
33
+ spec.add_dependency 'mini_magick', '>= 3.2', '< 5'
33
34
  end
34
-
@@ -50,8 +50,8 @@ module Hydra
50
50
  @config = Config.new
51
51
  end
52
52
 
53
- CONFIG_METHODS = [:ffmpeg_path, :libreoffice_path, :temp_file_base, :fits_path, :kdu_compress_path,
54
- :kdu_compress_recipes, :enable_ffmpeg, :source_file_service, :output_file_service, :active_encode_poll_time].freeze
53
+ CONFIG_METHODS = %i[ffmpeg_path libreoffice_path temp_file_base fits_path kdu_compress_path
54
+ kdu_compress_recipes enable_ffmpeg source_file_service output_file_service active_encode_poll_time].freeze
55
55
  CONFIG_METHODS.each do |method|
56
56
  module_eval <<-RUBY
57
57
  def self.#{method}
@@ -4,7 +4,7 @@ module Hydra::Derivatives
4
4
  class AudioEncoder
5
5
  def initialize
6
6
  @ffmpeg_output = Open3.capture3('ffmpeg -codecs').to_s
7
- rescue
7
+ rescue StandardError
8
8
  Logger.warn('Unable to find ffmpeg')
9
9
  @ffmpeg_output = ""
10
10
  end
@@ -57,7 +57,7 @@ module Hydra
57
57
  ORGgen_plt=yes
58
58
  ORGtparts=R
59
59
  "Stiles={1024,1024}" ).gsub(/\s+/, " ").strip,
60
- default_grey: %(-rate 2.4,1.48331273,.91673033,.56657224,.35016049,.21641118,.13374944,.08266171
60
+ default_gray: %(-rate 2.4,1.48331273,.91673033,.56657224,.35016049,.21641118,.13374944,.08266171
61
61
  -jp2_space sLUM
62
62
  -double_buffering 10
63
63
  -num_threads 4
@@ -1,6 +1,7 @@
1
- # Nieve implementation of IO wrapper class that adds mime_type and original_name attributes.
2
- # This is done so the attributes do not have to be passed as additional arguments,
3
- # and are attached properly to the object they describe.
1
+ # Naive implementation of IO wrapper class that adds mime_type and original_filename
2
+ # attributes. This is done to match the interface of ActionDispatch::HTTP::UploadedFile
3
+ # so the attributes do not have to be passed as additional arguments, and are attached
4
+ # properly to the object they describe.
4
5
  #
5
6
  #
6
7
  # Use SimpleDelegator to wrap the given class or instance
@@ -9,12 +10,18 @@ require 'delegate'
9
10
  module Hydra
10
11
  module Derivatives
11
12
  class IoDecorator < SimpleDelegator
12
- attr_accessor :mime_type, :original_name
13
+ extend Deprecation
13
14
 
14
- def initialize(file, mime_type = nil, original_name = nil)
15
+ attr_accessor :mime_type, :original_filename
16
+ alias original_name original_filename
17
+ deprecation_deprecate original_name: 'original_name has been deprecated. Use original_filename instead. This will be removed in hydra-derivatives 4.0'
18
+ alias original_name= original_filename=
19
+ deprecation_deprecate :"original_name=" => 'original_name= has been deprecated. Use original_filename= instead. This will be removed in hydra-derivatives 4.0'
20
+
21
+ def initialize(file, mime_type = nil, original_filename = nil)
15
22
  super(file)
16
23
  self.mime_type = mime_type
17
- self.original_name = original_name
24
+ self.original_filename = original_filename
18
25
  end
19
26
  end
20
27
  end
@@ -3,7 +3,7 @@ module Hydra::Derivatives
3
3
  class << self
4
4
  def method_missing(method_name, *arguments, &block)
5
5
  logger.send(method_name, *arguments, &block)
6
- rescue
6
+ rescue StandardError
7
7
  super
8
8
  end
9
9
 
@@ -11,6 +11,10 @@ module Hydra::Derivatives
11
11
  logger.respond_to? method_name
12
12
  end
13
13
 
14
+ def respond_to_missing?(method_name, include_private = false)
15
+ logger.send(:respond_to_missing?, method_name, include_private)
16
+ end
17
+
14
18
  private
15
19
 
16
20
  def logger
@@ -45,7 +45,7 @@ module Hydra::Derivatives::Processors
45
45
  # After a timeout error, try to cancel the encoding.
46
46
  def cleanup_after_timeout
47
47
  encode_job.cancel!
48
- rescue => e
48
+ rescue StandardError => e
49
49
  cancel_error = e
50
50
  ensure
51
51
  msg = "Unable to process ActiveEncode derivative: The command took longer than #{timeout} seconds to execute. Encoding will be cancelled."
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ # An abstract class for asyncronous jobs that convert office documents using soffice
1
4
  module Hydra::Derivatives::Processors
2
5
  class Document < Processor
3
6
  include ShellBasedProcessor
@@ -23,7 +26,7 @@ module Hydra::Derivatives::Processors
23
26
  if directives.fetch(:format) == "jpg"
24
27
  Hydra::Derivatives::Processors::Image.new(converted_file, directives).process
25
28
  else
26
- output_file_service.call(File.read(converted_file), directives)
29
+ output_file_service.call(File.open(converted_file, 'rb'), directives)
27
30
  end
28
31
  end
29
32
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Hydra::Derivatives::Processors
2
4
  # Extract the full text from the content using Solr's extract handler
3
5
  class FullText < Processor
@@ -22,19 +24,27 @@ module Hydra::Derivatives::Processors
22
24
  # TODO: this pulls the whole file into memory. We should stream it from Fedora instead
23
25
  # @return [String] the result of calling the extract service
24
26
  def fetch
25
- req = Net::HTTP.new(uri.host, uri.port)
26
- resp = req.post(uri.to_s, file_content, request_headers)
27
+ resp = http_request
27
28
  raise "Solr Extract service was unsuccessful. '#{uri}' returned code #{resp.code} for #{source_path}\n#{resp.body}" unless resp.code == '200'
29
+
28
30
  file_content.rewind if file_content.respond_to?(:rewind)
31
+ resp.body.force_encoding(resp.type_params['charset']) if resp.type_params['charset']
32
+ resp.body
33
+ end
29
34
 
30
- if resp.type_params['charset']
31
- resp.body.force_encoding(resp.type_params['charset'])
35
+ # Send the request to the extract service
36
+ # @return [Net::HttpResponse] the result of calling the extract service
37
+ def http_request
38
+ Net::HTTP.start(uri.host, uri.port, use_ssl: check_for_ssl) do |http|
39
+ req = Net::HTTP::Post.new(uri.request_uri, request_headers)
40
+ req.basic_auth uri.user, uri.password unless uri.password.nil?
41
+ req.body = file_content
42
+ http.request req
32
43
  end
33
- resp.body
34
44
  end
35
45
 
36
46
  def file_content
37
- @content ||= File.open(source_path).read
47
+ @file_content ||= File.open(source_path).read
38
48
  end
39
49
 
40
50
  # @return [Hash] the request headers to send to the Solr extract service
@@ -56,6 +66,10 @@ module Hydra::Derivatives::Processors
56
66
  @uri ||= connection_url + 'update/extract?extractOnly=true&wt=json&extractFormat=text'
57
67
  end
58
68
 
69
+ def check_for_ssl
70
+ uri.scheme == 'https'
71
+ end
72
+
59
73
  # @returns [URI] path to the solr collection
60
74
  def connection_url
61
75
  ActiveFedora::SolrService.instance.conn.uri
@@ -17,16 +17,13 @@ module Hydra::Derivatives::Processors
17
17
  def kdu_compress_recipe(args, quality, long_dim)
18
18
  if args[:recipe].is_a? Symbol
19
19
  recipe = [args[:recipe].to_s, quality].join('_').to_sym
20
- if Hydra::Derivatives.kdu_compress_recipes.key? recipe
21
- return Hydra::Derivatives.kdu_compress_recipes[recipe]
22
- else
23
- ActiveFedora::Base.logger.warn "No JP2 recipe for :#{args[:recipe]} ('#{recipe}') found in configuration. Using best guess."
24
- return calculate_recipe(args, quality, long_dim)
25
- end
20
+ return Hydra::Derivatives.kdu_compress_recipes[recipe] if Hydra::Derivatives.kdu_compress_recipes.key? recipe
21
+ ActiveFedora::Base.logger.warn "No JP2 recipe for :#{args[:recipe]} ('#{recipe}') found in configuration. Using best guess."
22
+ calculate_recipe(args, quality, long_dim)
26
23
  elsif args[:recipe].is_a? String
27
- return args[:recipe]
24
+ args[:recipe]
28
25
  else
29
- return calculate_recipe(args, quality, long_dim)
26
+ calculate_recipe(args, quality, long_dim)
30
27
  end
31
28
  end
32
29
 
@@ -102,15 +99,9 @@ module Hydra::Derivatives::Processors
102
99
  File.unlink(file_path) unless file_path.nil?
103
100
  end
104
101
 
105
- def encode_file(recipe, opts = {})
102
+ def encode_file(recipe, file_path:)
106
103
  output_file = self.class.tmp_file('.jp2')
107
- if opts[:file_path]
108
- self.class.encode(opts[:file_path], recipe, output_file)
109
- else
110
- Hydra::Derivatives::TempfileService.create(source_file) do |f|
111
- self.class.encode(f.path, recipe, output_file)
112
- end
113
- end
104
+ self.class.encode(file_path, recipe, output_file)
114
105
  output_file_service.call(File.open(output_file, 'rb'), directives)
115
106
  File.unlink(output_file)
116
107
  end
@@ -19,13 +19,6 @@ module Hydra::Derivatives::Processors
19
19
  raise "Processor is an abstract class. Implement `process' on #{self.class.name}"
20
20
  end
21
21
 
22
- # This governs the output key sent to the persist file service
23
- # while this is adequate for storing in Fedora, it's not a great name for saving
24
- # to the file system.
25
- def output_file_id(name)
26
- [out_prefix, name].join('_')
27
- end
28
-
29
22
  def output_filename_for(_name)
30
23
  File.basename(source_path)
31
24
  end
@@ -62,9 +62,8 @@ module Hydra::Derivatives::Processors
62
62
  err_str = ''
63
63
  stdin, stdout, stderr, wait_thr = popen3(command)
64
64
  context[:pid] = wait_thr[:pid]
65
+ files = [stderr, stdout]
65
66
  stdin.close
66
- stdout.close
67
- files = [stderr]
68
67
 
69
68
  until all_eof?(files)
70
69
  ready = IO.select(files, nil, nil, 60)
@@ -82,11 +81,14 @@ module Hydra::Derivatives::Processors
82
81
  err_str << data
83
82
  end
84
83
  rescue EOFError
85
- Rails.logger "Caught an eof error in ShellBasedProcessor"
84
+ Hydra::Derivatives::Logger.debug "Caught an eof error in ShellBasedProcessor"
86
85
  # No big deal.
87
86
  end
88
87
  end
89
88
  end
89
+
90
+ stdout.close
91
+ stderr.close
90
92
  exit_status = wait_thr.value
91
93
 
92
94
  raise "Unable to execute command \"#{command}\". Exit code: #{exit_status}\nError message: #{err_str}" unless exit_status.success?
@@ -3,7 +3,7 @@ module Hydra::Derivatives
3
3
  # Adds format: 'txt' as the default to each of the directives
4
4
  def self.transform_directives(options)
5
5
  options.each do |directive|
6
- directive.reverse_merge!(format: 'txt')
6
+ directive.reverse_merge!(format: 'txt', binary: false)
7
7
  end
8
8
  options
9
9
  end
@@ -5,7 +5,7 @@ module Hydra::Derivatives
5
5
  attr_accessor :ffmpeg_output
6
6
  def capture_output
7
7
  @ffmpeg_output = Open3.capture3('ffmpeg -codecs').to_s
8
- rescue
8
+ rescue StandardError
9
9
  Logger.warn('Unable to find ffmpeg')
10
10
  @ffmpeg_output = ""
11
11
  end
@@ -31,8 +31,12 @@ module Hydra::Derivatives
31
31
  end
32
32
  private_class_method :retrieve_remote_file
33
33
 
34
+ # @param [IO,String] content the data to be persisted
35
+ # @param [Hash] directives directions which can be used to determine where to persist to.
36
+ # @return [Hydra::Derivatives::IoDecorator]
34
37
  def self.io(content, directives)
35
- Hydra::Derivatives::IoDecorator.new(content, new_mime_type(directives.fetch(:format), charset(content)))
38
+ charset = charset(content) if directives[:format] == 'txt' || !directives.fetch(:binary, true)
39
+ Hydra::Derivatives::IoDecorator.new(content, new_mime_type(directives.fetch(:format), charset))
36
40
  end
37
41
  private_class_method :io
38
42
 
@@ -9,19 +9,21 @@ module Hydra::Derivatives
9
9
  raise NotImplementedError, "PersistOutputFileService is an abstract class. Implement `call' on #{self.class.name}"
10
10
  end
11
11
 
12
+ # @param file [Hydra::Derivatives::IoDecorator]
12
13
  def self.determine_original_name(file)
13
- if file.respond_to? :original_name
14
- file.original_name
14
+ if file.respond_to? :original_filename
15
+ file.original_filename
15
16
  else
16
17
  "derivative"
17
18
  end
18
19
  end
19
20
 
21
+ # @param file [Hydra::Derivatives::IoDecorator]
20
22
  def self.determine_mime_type(file)
21
23
  if file.respond_to? :mime_type
22
24
  file.mime_type
23
25
  else
24
- "appliction/octet-stream"
26
+ "application/octet-stream"
25
27
  end
26
28
  end
27
29
  end
@@ -168,7 +168,6 @@
168
168
  <fieldType class="solr.TextField" name="textSuggest" positionIncrementGap="100">
169
169
  <analyzer>
170
170
  <tokenizer class="solr.KeywordTokenizerFactory"/>
171
- <filter class="solr.StandardFilterFactory"/>
172
171
  <filter class="solr.LowerCaseFilterFactory"/>
173
172
  <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
174
173
  </analyzer>
@@ -338,7 +337,6 @@
338
337
  <!-- <defaultSearchField>text</defaultSearchField> -->
339
338
 
340
339
  <!-- SolrQueryParser configuration: defaultOperator="AND|OR" -->
341
- <solrQueryParser defaultOperator="OR"/>
342
340
 
343
341
  <!-- copyField commands copy one field to another at the time a document
344
342
  is added to the index. It's used either to index the same field differently,
@@ -124,7 +124,7 @@
124
124
  td { vertical-align: top; }
125
125
  ul { margin: 0px; margin-left: 1em; padding: 0px; }
126
126
  .note { font-size:80%; }
127
- .doc { margin-top: 1em; border-top: solid grey 1px; }
127
+ .doc { margin-top: 1em; border-top: solid gray 1px; }
128
128
  .exp { display: none; font-family: monospace; white-space: pre; }
129
129
  </style>
130
130
  </xsl:template>
@@ -326,7 +326,7 @@
326
326
  <style type="text/css">
327
327
  <![CDATA[
328
328
  td.name {font-style: italic; font-size:80%; }
329
- .doc { margin: 0.5em; border: solid grey 1px; }
329
+ .doc { margin: 0.5em; border: solid gray 1px; }
330
330
  .exp { display: none; font-family: monospace; white-space: pre; }
331
331
  div.histogram { background: none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;}
332
332
  table.histogram { width: auto; vertical-align: bottom; }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hydra-derivatives
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.2
4
+ version: 3.6.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: 2017-08-17 00:00:00.000000000 Z
11
+ date: 2020-11-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,110 +16,222 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.3'
19
+ version: '2.1'
20
20
  type: :development
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: '1.3'
26
+ version: '2.1'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
28
+ name: fcrepo_wrapper
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.1'
33
+ version: '0.2'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.1'
40
+ version: '0.2'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rspec
42
+ name: pry-byebug
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">"
60
+ - !ruby/object:Gem::Version
61
+ version: '5.1'
62
+ - - "<"
63
+ - !ruby/object:Gem::Version
64
+ version: '7.0'
65
+ type: :development
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">"
70
+ - !ruby/object:Gem::Version
71
+ version: '5.1'
72
+ - - "<"
73
+ - !ruby/object:Gem::Version
74
+ version: '7.0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: rake
43
77
  requirement: !ruby/object:Gem::Requirement
44
78
  requirements:
45
79
  - - "~>"
46
80
  - !ruby/object:Gem::Version
47
- version: '3.1'
81
+ version: '10.1'
48
82
  type: :development
49
83
  prerelease: false
50
84
  version_requirements: !ruby/object:Gem::Requirement
51
85
  requirements:
52
86
  - - "~>"
53
87
  - !ruby/object:Gem::Version
54
- version: '3.1'
88
+ version: '10.1'
55
89
  - !ruby/object:Gem::Dependency
56
- name: solr_wrapper
90
+ name: rspec
57
91
  requirement: !ruby/object:Gem::Requirement
58
92
  requirements:
59
93
  - - "~>"
60
94
  - !ruby/object:Gem::Version
61
- version: '0.4'
95
+ version: '3.1'
62
96
  type: :development
63
97
  prerelease: false
64
98
  version_requirements: !ruby/object:Gem::Requirement
65
99
  requirements:
66
100
  - - "~>"
67
101
  - !ruby/object:Gem::Version
68
- version: '0.4'
102
+ version: '3.1'
69
103
  - !ruby/object:Gem::Dependency
70
- name: fcrepo_wrapper
104
+ name: solr_wrapper
71
105
  requirement: !ruby/object:Gem::Requirement
72
106
  requirements:
73
107
  - - "~>"
74
108
  - !ruby/object:Gem::Version
75
- version: '0.2'
109
+ version: '2.0'
76
110
  type: :development
77
111
  prerelease: false
78
112
  version_requirements: !ruby/object:Gem::Requirement
79
113
  requirements:
80
114
  - - "~>"
81
115
  - !ruby/object:Gem::Version
82
- version: '0.2'
116
+ version: '2.0'
83
117
  - !ruby/object:Gem::Dependency
84
118
  name: active-fedora
85
119
  requirement: !ruby/object:Gem::Requirement
86
120
  requirements:
87
121
  - - ">="
88
122
  - !ruby/object:Gem::Version
89
- version: 11.3.1
90
- - - "<"
123
+ version: 11.5.6
124
+ - - "!="
125
+ - !ruby/object:Gem::Version
126
+ version: 12.0.0
127
+ - - "!="
128
+ - !ruby/object:Gem::Version
129
+ version: 12.0.1
130
+ - - "!="
131
+ - !ruby/object:Gem::Version
132
+ version: 12.0.2
133
+ - - "!="
134
+ - !ruby/object:Gem::Version
135
+ version: 12.0.3
136
+ - - "!="
137
+ - !ruby/object:Gem::Version
138
+ version: 12.1.0
139
+ - - "!="
140
+ - !ruby/object:Gem::Version
141
+ version: 12.1.1
142
+ - - "!="
91
143
  - !ruby/object:Gem::Version
92
- version: '12'
144
+ version: 12.2.0
145
+ - - "!="
146
+ - !ruby/object:Gem::Version
147
+ version: 12.2.1
148
+ - - "!="
149
+ - !ruby/object:Gem::Version
150
+ version: 13.0.0
151
+ - - "!="
152
+ - !ruby/object:Gem::Version
153
+ version: 13.1.0
154
+ - - "!="
155
+ - !ruby/object:Gem::Version
156
+ version: 13.1.1
157
+ - - "!="
158
+ - !ruby/object:Gem::Version
159
+ version: 13.1.2
160
+ - - "!="
161
+ - !ruby/object:Gem::Version
162
+ version: 13.1.3
163
+ - - "!="
164
+ - !ruby/object:Gem::Version
165
+ version: 13.2.0
166
+ - - "!="
167
+ - !ruby/object:Gem::Version
168
+ version: 13.2.1
93
169
  type: :runtime
94
170
  prerelease: false
95
171
  version_requirements: !ruby/object:Gem::Requirement
96
172
  requirements:
97
173
  - - ">="
98
174
  - !ruby/object:Gem::Version
99
- version: 11.3.1
100
- - - "<"
175
+ version: 11.5.6
176
+ - - "!="
177
+ - !ruby/object:Gem::Version
178
+ version: 12.0.0
179
+ - - "!="
180
+ - !ruby/object:Gem::Version
181
+ version: 12.0.1
182
+ - - "!="
183
+ - !ruby/object:Gem::Version
184
+ version: 12.0.2
185
+ - - "!="
186
+ - !ruby/object:Gem::Version
187
+ version: 12.0.3
188
+ - - "!="
189
+ - !ruby/object:Gem::Version
190
+ version: 12.1.0
191
+ - - "!="
192
+ - !ruby/object:Gem::Version
193
+ version: 12.1.1
194
+ - - "!="
195
+ - !ruby/object:Gem::Version
196
+ version: 12.2.0
197
+ - - "!="
198
+ - !ruby/object:Gem::Version
199
+ version: 12.2.1
200
+ - - "!="
201
+ - !ruby/object:Gem::Version
202
+ version: 13.0.0
203
+ - - "!="
101
204
  - !ruby/object:Gem::Version
102
- version: '12'
205
+ version: 13.1.0
206
+ - - "!="
207
+ - !ruby/object:Gem::Version
208
+ version: 13.1.1
209
+ - - "!="
210
+ - !ruby/object:Gem::Version
211
+ version: 13.1.2
212
+ - - "!="
213
+ - !ruby/object:Gem::Version
214
+ version: 13.1.3
215
+ - - "!="
216
+ - !ruby/object:Gem::Version
217
+ version: 13.2.0
218
+ - - "!="
219
+ - !ruby/object:Gem::Version
220
+ version: 13.2.1
103
221
  - !ruby/object:Gem::Dependency
104
- name: mini_magick
222
+ name: active_encode
105
223
  requirement: !ruby/object:Gem::Requirement
106
224
  requirements:
107
- - - ">="
108
- - !ruby/object:Gem::Version
109
- version: '3.2'
110
- - - "<"
225
+ - - "~>"
111
226
  - !ruby/object:Gem::Version
112
- version: '5'
227
+ version: '0.1'
113
228
  type: :runtime
114
229
  prerelease: false
115
230
  version_requirements: !ruby/object:Gem::Requirement
116
231
  requirements:
117
- - - ">="
118
- - !ruby/object:Gem::Version
119
- version: '3.2'
120
- - - "<"
232
+ - - "~>"
121
233
  - !ruby/object:Gem::Version
122
- version: '5'
234
+ version: '0.1'
123
235
  - !ruby/object:Gem::Dependency
124
236
  name: activesupport
125
237
  requirement: !ruby/object:Gem::Requirement
@@ -129,7 +241,7 @@ dependencies:
129
241
  version: '4.0'
130
242
  - - "<"
131
243
  - !ruby/object:Gem::Version
132
- version: '6'
244
+ version: '7'
133
245
  type: :runtime
134
246
  prerelease: false
135
247
  version_requirements: !ruby/object:Gem::Requirement
@@ -139,90 +251,102 @@ dependencies:
139
251
  version: '4.0'
140
252
  - - "<"
141
253
  - !ruby/object:Gem::Version
142
- version: '6'
254
+ version: '7'
143
255
  - !ruby/object:Gem::Dependency
144
- name: mime-types
256
+ name: addressable
145
257
  requirement: !ruby/object:Gem::Requirement
146
258
  requirements:
147
- - - ">"
148
- - !ruby/object:Gem::Version
149
- version: '2.0'
150
- - - "<"
259
+ - - "~>"
151
260
  - !ruby/object:Gem::Version
152
- version: '4.0'
261
+ version: '2.5'
153
262
  type: :runtime
154
263
  prerelease: false
155
264
  version_requirements: !ruby/object:Gem::Requirement
156
265
  requirements:
157
- - - ">"
158
- - !ruby/object:Gem::Version
159
- version: '2.0'
160
- - - "<"
266
+ - - "~>"
161
267
  - !ruby/object:Gem::Version
162
- version: '4.0'
268
+ version: '2.5'
163
269
  - !ruby/object:Gem::Dependency
164
- name: active_encode
270
+ name: deprecation
165
271
  requirement: !ruby/object:Gem::Requirement
166
272
  requirements:
167
- - - "~>"
273
+ - - ">="
168
274
  - !ruby/object:Gem::Version
169
- version: '0.1'
275
+ version: '0'
170
276
  type: :runtime
171
277
  prerelease: false
172
278
  version_requirements: !ruby/object:Gem::Requirement
173
279
  requirements:
174
- - - "~>"
280
+ - - ">="
175
281
  - !ruby/object:Gem::Version
176
- version: '0.1'
282
+ version: '0'
177
283
  - !ruby/object:Gem::Dependency
178
- name: addressable
284
+ name: mime-types
179
285
  requirement: !ruby/object:Gem::Requirement
180
286
  requirements:
181
- - - "~>"
287
+ - - ">"
182
288
  - !ruby/object:Gem::Version
183
- version: '2.5'
289
+ version: '2.0'
290
+ - - "<"
291
+ - !ruby/object:Gem::Version
292
+ version: '4.0'
184
293
  type: :runtime
185
294
  prerelease: false
186
295
  version_requirements: !ruby/object:Gem::Requirement
187
296
  requirements:
188
- - - "~>"
297
+ - - ">"
189
298
  - !ruby/object:Gem::Version
190
- version: '2.5'
299
+ version: '2.0'
300
+ - - "<"
301
+ - !ruby/object:Gem::Version
302
+ version: '4.0'
191
303
  - !ruby/object:Gem::Dependency
192
- name: deprecation
304
+ name: mini_magick
193
305
  requirement: !ruby/object:Gem::Requirement
194
306
  requirements:
195
307
  - - ">="
196
308
  - !ruby/object:Gem::Version
197
- version: '0'
309
+ version: '3.2'
310
+ - - "<"
311
+ - !ruby/object:Gem::Version
312
+ version: '5'
198
313
  type: :runtime
199
314
  prerelease: false
200
315
  version_requirements: !ruby/object:Gem::Requirement
201
316
  requirements:
202
317
  - - ">="
203
318
  - !ruby/object:Gem::Version
204
- version: '0'
319
+ version: '3.2'
320
+ - - "<"
321
+ - !ruby/object:Gem::Version
322
+ version: '5'
205
323
  description: Derivative generation plugin for hydra
206
324
  email:
207
- - justin@curationexperts.com
325
+ - jenlindner@gmail.com
326
+ - jcoyne85@stanford.edu
208
327
  executables: []
209
328
  extensions: []
210
329
  extra_rdoc_files: []
211
330
  files:
331
+ - ".circleci/config.yml"
212
332
  - ".gitignore"
213
333
  - ".rspec"
214
334
  - ".rubocop.yml"
215
335
  - ".rubocop_todo.yml"
216
- - ".travis.yml"
336
+ - ".solr_wrapper"
337
+ - CODE_OF_CONDUCT.md
217
338
  - CONTRIBUTING.md
218
339
  - Gemfile
219
340
  - History.md
220
341
  - LICENSE.txt
221
342
  - README.md
222
343
  - Rakefile
344
+ - SUPPORT.md
223
345
  - TODO
224
346
  - VERSION
347
+ - config/fcrepo_wrapper_test.yml
225
348
  - config/jetty.yml
349
+ - config/solr_wrapper_test.yml
226
350
  - doc/amazon_elastic_transcoder.md
227
351
  - hydra-derivatives.gemspec
228
352
  - lib/color_profiles/license.txt
@@ -279,43 +403,6 @@ files:
279
403
  - solr/config/xslt/example_atom.xsl
280
404
  - solr/config/xslt/example_rss.xsl
281
405
  - solr/config/xslt/luke.xsl
282
- - spec/fixtures/FlashPix.ppt
283
- - spec/fixtures/adobe1998.tif
284
- - spec/fixtures/countdown.avi
285
- - spec/fixtures/jpeg2k_config.yml
286
- - spec/fixtures/piano_note.wav
287
- - spec/fixtures/sample.rtf
288
- - spec/fixtures/test.dng
289
- - spec/fixtures/test.doc
290
- - spec/fixtures/test.docx
291
- - spec/fixtures/test.pdf
292
- - spec/fixtures/test.pptx
293
- - spec/fixtures/test.tif
294
- - spec/fixtures/test.xls
295
- - spec/fixtures/test.xlsx
296
- - spec/fixtures/world.png
297
- - spec/processors/active_encode_spec.rb
298
- - spec/processors/document_spec.rb
299
- - spec/processors/full_text_spec.rb
300
- - spec/processors/image_spec.rb
301
- - spec/processors/jpeg2k_spec.rb
302
- - spec/processors/processor_spec.rb
303
- - spec/processors/shell_based_processor_spec.rb
304
- - spec/processors/video_spec.rb
305
- - spec/runners/active_encode_derivatives_spec.rb
306
- - spec/services/audio_derivatives_spec.rb
307
- - spec/services/persist_basic_contained_output_file_service_spec.rb
308
- - spec/services/persist_external_file_output_file_service_spec.rb
309
- - spec/services/remote_source_file_spec.rb
310
- - spec/services/retrieve_source_file_service_spec.rb
311
- - spec/services/tempfile_service_spec.rb
312
- - spec/spec_helper.rb
313
- - spec/units/audio_encoder_spec.rb
314
- - spec/units/config_spec.rb
315
- - spec/units/derivatives_spec.rb
316
- - spec/units/io_decorator_spec.rb
317
- - spec/units/logger_spec.rb
318
- - spec/units/transcoding_spec.rb
319
406
  homepage: https://github.com/projecthydra/hydra-derivatives
320
407
  licenses:
321
408
  - APACHE2
@@ -335,46 +422,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
335
422
  - !ruby/object:Gem::Version
336
423
  version: '0'
337
424
  requirements: []
338
- rubyforge_project:
339
- rubygems_version: 2.5.1
425
+ rubygems_version: 3.1.2
340
426
  signing_key:
341
427
  specification_version: 4
342
428
  summary: Derivative generation plugin for hydra
343
- test_files:
344
- - spec/fixtures/FlashPix.ppt
345
- - spec/fixtures/adobe1998.tif
346
- - spec/fixtures/countdown.avi
347
- - spec/fixtures/jpeg2k_config.yml
348
- - spec/fixtures/piano_note.wav
349
- - spec/fixtures/sample.rtf
350
- - spec/fixtures/test.dng
351
- - spec/fixtures/test.doc
352
- - spec/fixtures/test.docx
353
- - spec/fixtures/test.pdf
354
- - spec/fixtures/test.pptx
355
- - spec/fixtures/test.tif
356
- - spec/fixtures/test.xls
357
- - spec/fixtures/test.xlsx
358
- - spec/fixtures/world.png
359
- - spec/processors/active_encode_spec.rb
360
- - spec/processors/document_spec.rb
361
- - spec/processors/full_text_spec.rb
362
- - spec/processors/image_spec.rb
363
- - spec/processors/jpeg2k_spec.rb
364
- - spec/processors/processor_spec.rb
365
- - spec/processors/shell_based_processor_spec.rb
366
- - spec/processors/video_spec.rb
367
- - spec/runners/active_encode_derivatives_spec.rb
368
- - spec/services/audio_derivatives_spec.rb
369
- - spec/services/persist_basic_contained_output_file_service_spec.rb
370
- - spec/services/persist_external_file_output_file_service_spec.rb
371
- - spec/services/remote_source_file_spec.rb
372
- - spec/services/retrieve_source_file_service_spec.rb
373
- - spec/services/tempfile_service_spec.rb
374
- - spec/spec_helper.rb
375
- - spec/units/audio_encoder_spec.rb
376
- - spec/units/config_spec.rb
377
- - spec/units/derivatives_spec.rb
378
- - spec/units/io_decorator_spec.rb
379
- - spec/units/logger_spec.rb
380
- - spec/units/transcoding_spec.rb
429
+ test_files: []