lib/paperclip-compression/base.rb
module PaperclipCompression
ExitStatusError = defined?(Cocaine) ? Cocaine::ExitStatusError : Terrapin::ExitStatusError
CommandNotFoundError = defined?(Cocaine) ? Cocaine::CommandNotFoundError : Terrapin::CommandNotFoundError
class Base
def initialize(file, first_processor)
@file = file
current_extension = File.extname(file.path)
@basename = File.basename(file.path, current_extension)
@dst = Paperclip::TempfileFactory.new.generate(@basename)
@dst_path = File.expand_path(@dst.path)
@src_path = File.expand_path(@file.path)
@first_processor = first_processor
end
def self.make(file, first_processor, options = {})
new(file, first_processor, options).make
end
def process_file
# Close output file so compressors which require exclusive file rights
# work.
@dst.close
# Execute the child-compressor classes implementation of how to compress
# the output
compress
# Re-open the output file so downstream paperclip-middleware may
# read/write/etc. without having to re-open the file.
@dst.open
# Return the destination file for downstream paperclip processors.
@dst
end
protected
def process_file?
@cli_opts
end
def unprocessed_tempfile
copy_to_tempfile
first_processor? ? @dst : @file
end
def command_path(command)
folder = if OS.osx?
File.join('osx', catalina? ? '64bit' : '32bit')
elsif OS.linux?
File.join('linux', OS.bits.eql?(64) ? 'x64' : 'x86')
elsif OS.windows?
OS.bits.eql?(64) ? 'win64' : 'win32'
end
File.join(PaperclipCompression.root, 'bin', folder, command)
end
private
def compress
fail MustImplementInSubClassesException,
'compress is overridden on a per compressor basis.'
end
def first_processor?
@first_processor
end
def copy_to_tempfile
FileUtils.cp(@src_path, @dst_path)
end
def catalina?
major = OS.host_os.match(/darwin(\d+)/)[1].to_i
major >= 19
end
end
# Informs developers when a method is intended to be defined in # sub-classes.
class MustImplementInSubClassesException < Exception; end
end