class Rails::WebP::Converter

Attributes

context[R]

Public Class Methods

convert_to_webp(input_path, output_path) click to toggle source
# File lib/rails/webp/converter.rb, line 11
def convert_to_webp(input_path, output_path)
  # Ex: convert wizard.png -quality 50 -define webp:lossless=true wizard.webp
  MiniMagick::Tool::Convert.new do |convert|
    convert << input_path
    options = WebP.encode_options
    convert << '-quality' << options[:quality]
    options.except(:quality).each do |name, value|
      convert << "-define" << "webp:#{name.to_s.dasherize}=#{value}"
    end
    convert << output_path
  end
end
process(input_path, data, context, app = Rails.application) click to toggle source
# File lib/rails/webp/converter.rb, line 24
def process(input_path, data, context, app = Rails.application)
  return data if excluded_dir?(input_path)
  @context = context
  prefix = app.config.assets.prefix
  digest = data_digest(data)
  webp_file = webp_file_name(data, digest)
  output_path = Pathname.new(File.join(app.root, 'public', prefix, webp_file))
  if WebP.force || !webp_file_exists?(digest, output_path)
    FileUtils.mkdir_p(output_path.dirname) unless Dir.exists?(output_path.dirname)
    # TODO: check app.assets.gzip and act accordingly
    convert_to_webp(input_path, output_path)
    logger&.info "Writing #{output_path}"
  end
  data
end

Private Class Methods

data_digest(data) click to toggle source
# File lib/rails/webp/converter.rb, line 42
def data_digest(data)
  "-#{context.environment.digest_class.new.update(data).to_s}"
end
excluded_dir?(path) click to toggle source
# File lib/rails/webp/converter.rb, line 46
def excluded_dir?(path)
  regex = WebP.exclude_dir_regex
  return false unless regex
  !!path.match(regex)
end
logger() click to toggle source
# File lib/rails/webp/converter.rb, line 62
def logger
  if context && context.environment
    context.environment.logger
  else
    logger = Logger.new($stderr)
    logger.level = Logger::FATAL
    logger
  end
end
webp_file_exists?(digest, output_path) click to toggle source
# File lib/rails/webp/converter.rb, line 58
def webp_file_exists?(digest, output_path)
  File.exists?(output_path) && digest == output_path.to_s.split('-').last.split('.').first
end
webp_file_name(data, digest) click to toggle source
# File lib/rails/webp/converter.rb, line 52
def webp_file_name(data, digest)
  file_name = context.logical_path # Original File name w/o extension
  file_ext  = File.extname(context.filename) # Original File extension
  "#{file_name}#{digest}.webp" # WebP File fullname
end