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