class Photish::Render::Image

Attributes

config[R]
version_hash[R]

Public Class Methods

new(config, version_hash) click to toggle source
# File lib/photish/render/image.rb, line 6
def initialize(config, version_hash)
  @config = config
  @version_hash = version_hash
end

Public Instance Methods

render(images) click to toggle source
# File lib/photish/render/image.rb, line 11
def render(images)
  log.debug "Rendering #{images.count} images across #{threads} threads"

  setup_minimagick
  cache_load_from_disk
  threads = spawn_thread_instances(to_queue(images))
  threads.map(&:join)
  cache_flush_to_disk
end

Private Instance Methods

cache() click to toggle source
# File lib/photish/render/image.rb, line 99
def cache
  @cache ||= Cache::Manifest.new(output_dir,
                                 workers,
                                 worker_index,
                                 version_hash)
end
convert(image) click to toggle source
# File lib/photish/render/image.rb, line 73
def convert(image)
  create_parent_directories(image)
  convert_with_imagemagick(image)
  cache_record(image.url_path, image.path)
end
convert_with_imagemagick(image) click to toggle source
# File lib/photish/render/image.rb, line 79
def convert_with_imagemagick(image)
  MiniMagick::Tool::Convert.new do |convert|
    convert << image.path
    convert.merge!(image.quality_params)
    convert << output_path(image)
  end
rescue MiniMagick::Error => e
  log.warn "Error occured while converting"
  log.warn e
  raise unless soft_failure
end
create_parent_directories(image) click to toggle source
# File lib/photish/render/image.rb, line 95
def create_parent_directories(image)
  FileUtils.mkdir_p(File.join(output_dir, image.base_url_parts))
end
debug?() click to toggle source
# File lib/photish/render/image.rb, line 110
def debug?
  config.logging.level == 'debug'
end
minimagick_config() click to toggle source
# File lib/photish/render/image.rb, line 106
def minimagick_config
  config.dependencies.minimagick
end
output_path(image) click to toggle source
# File lib/photish/render/image.rb, line 91
def output_path(image)
  File.join(output_dir, image.url_parts)
end
process_images(image_queue) click to toggle source
# File lib/photish/render/image.rb, line 48
def process_images(image_queue)
  while !image_queue.empty?
    process_next_image(image_queue)
  end
end
process_next_image(image_queue) click to toggle source
# File lib/photish/render/image.rb, line 54
def process_next_image(image_queue)
  image = image_queue.pop
  convert(image) if regenerate?(image)
rescue Errno::ENOENT
  log.warn "Image not found #{image.path}"
  raise unless soft_failure
end
regenerate?(image) click to toggle source
# File lib/photish/render/image.rb, line 62
def regenerate?(image)
  cache_changed?(image.url_path, image.path) ||
    !File.exist?(output_path(image))
end
setup_minimagick() click to toggle source
# File lib/photish/render/image.rb, line 114
def setup_minimagick
  MiniMagick.configure do |config|
    config.cli = minimagick_config.cli.to_sym
    config.cli_path = minimagick_config.cli_path if minimagick_config.cli_path
    config.debug = debug?
    config.logger = MiniMagick::Logger.new(Log::IO.new(log, :debug))
    config.timeout = minimagick_config.timeout
    config.validate_on_create = minimagick_config.validate_on_create
    config.validate_on_write = minimagick_config.validate_on_write
    config.whiny = minimagick_config.whiny
  end
end
spawn_thread_instances(image_queue) click to toggle source
# File lib/photish/render/image.rb, line 40
def spawn_thread_instances(image_queue)
  (0...threads).map do
    Thread.new do
      process_images(image_queue)
    end
  end
end
to_queue(images) click to toggle source
# File lib/photish/render/image.rb, line 67
def to_queue(images)
  image_queue = Queue.new
  Array(images).shuffle.each { |image| image_queue << image }
  image_queue
end