From 354f693afce2ef0ab44f649186d28b1c5df4cf66 Mon Sep 17 00:00:00 2001 From: Joseph Wynn Date: Tue, 27 Sep 2016 19:59:24 +0100 Subject: [PATCH] Another refactor to try and avoid `include` --- lib/jekyll/responsive_image.rb | 2 +- lib/jekyll/responsive_image/block.rb | 15 ++---- lib/jekyll/responsive_image/common.rb | 46 ------------------- lib/jekyll/responsive_image/defaults.rb | 2 +- .../responsive_image/extra_image_generator.rb | 7 +-- .../responsive_image/image_processor.rb | 2 +- lib/jekyll/responsive_image/render_cache.rb | 2 +- lib/jekyll/responsive_image/renderer.rb | 44 ++++++++++++++++++ lib/jekyll/responsive_image/resize_handler.rb | 2 +- lib/jekyll/responsive_image/tag.rb | 6 +-- lib/jekyll/responsive_image/utils.rb | 7 ++- lib/jekyll/responsive_image/version.rb | 2 +- 12 files changed, 65 insertions(+), 72 deletions(-) delete mode 100644 lib/jekyll/responsive_image/common.rb create mode 100644 lib/jekyll/responsive_image/renderer.rb diff --git a/lib/jekyll/responsive_image.rb b/lib/jekyll/responsive_image.rb index 70c3de9..0224bcf 100644 --- a/lib/jekyll/responsive_image.rb +++ b/lib/jekyll/responsive_image.rb @@ -10,7 +10,7 @@ require 'jekyll/responsive_image/utils' require 'jekyll/responsive_image/render_cache' require 'jekyll/responsive_image/image_processor' require 'jekyll/responsive_image/resize_handler' -require 'jekyll/responsive_image/common' +require 'jekyll/responsive_image/renderer' require 'jekyll/responsive_image/tag' require 'jekyll/responsive_image/block' require 'jekyll/responsive_image/extra_image_generator' diff --git a/lib/jekyll/responsive_image/block.rb b/lib/jekyll/responsive_image/block.rb index 935635f..c5d07ad 100644 --- a/lib/jekyll/responsive_image/block.rb +++ b/lib/jekyll/responsive_image/block.rb @@ -1,20 +1,11 @@ - - - - - - - - - module Jekyll - class ResponsiveImage + module ResponsiveImage class Block < Liquid::Block - include Jekyll::ResponsiveImage::Common + include Jekyll::ResponsiveImage::Utils def render(context) attributes = YAML.load(super) - render_responsive_image(context, attributes) + Renderer.new(context.registers[:site], attributes).render_responsive_image end end end diff --git a/lib/jekyll/responsive_image/common.rb b/lib/jekyll/responsive_image/common.rb deleted file mode 100644 index 60bc103..0000000 --- a/lib/jekyll/responsive_image/common.rb +++ /dev/null @@ -1,46 +0,0 @@ -module Jekyll - class ResponsiveImage - module Common - include Jekyll::ResponsiveImage::Utils - - def make_config(site) - ResponsiveImage.defaults.dup - .merge(site.config['responsive_image']) - .merge(:site_source => site.source, :site_dest => site.dest) - end - - def keep_resized_image!(site, image) - keep_dir = File.dirname(image['path']) - site.config['keep_files'] << keep_dir unless site.config['keep_files'].include?(keep_dir) - end - - def render_responsive_image(context, attributes) - cache_key = attributes.to_s - result = attributes['cache'] ? RenderCache.get(cache_key) : nil - - if result.nil? - site = context.registers[:site] - config = make_config(site) - - absolute_image_path = site.in_source_dir(attributes['path'].to_s) - image = ImageProcessor.process(absolute_image_path, attributes['path'], config) - attributes['original'] = image[:original] - attributes['resized'] = image[:resized] - - attributes['resized'].each { |resized| keep_resized_image!(site, resized) } - - image_template = site.in_source_dir(attributes['template'] || config['template']) - partial = File.read(image_template) - template = Liquid::Template.parse(partial) - - result = template.render!(attributes.merge(site.site_payload)) - - - RenderCache.set(cache_key, result) - end - - result - end - end - end -end diff --git a/lib/jekyll/responsive_image/defaults.rb b/lib/jekyll/responsive_image/defaults.rb index c8ddc5f..6665cda 100644 --- a/lib/jekyll/responsive_image/defaults.rb +++ b/lib/jekyll/responsive_image/defaults.rb @@ -1,5 +1,5 @@ module Jekyll - class ResponsiveImage + module ResponsiveImage @defaults = { 'default_quality' => 85, 'base_path' => 'assets', diff --git a/lib/jekyll/responsive_image/extra_image_generator.rb b/lib/jekyll/responsive_image/extra_image_generator.rb index 70932fe..9a15703 100644 --- a/lib/jekyll/responsive_image/extra_image_generator.rb +++ b/lib/jekyll/responsive_image/extra_image_generator.rb @@ -1,10 +1,11 @@ module Jekyll - class ResponsiveImage + module ResponsiveImage class ExtraImageGenerator < Jekyll::Generator - include Jekyll::ResponsiveImage::Common + include Jekyll::ResponsiveImage::Utils def generate(site) - config = make_config(site) + renderer = Renderer.new(site, {}) + config = renderer.make_config config['extra_images'].each do |pathspec| Dir.glob(site.in_source_dir(pathspec)) do |image_path| diff --git a/lib/jekyll/responsive_image/image_processor.rb b/lib/jekyll/responsive_image/image_processor.rb index 86a2b3a..dcaaada 100644 --- a/lib/jekyll/responsive_image/image_processor.rb +++ b/lib/jekyll/responsive_image/image_processor.rb @@ -1,5 +1,5 @@ module Jekyll - class ResponsiveImage + module ResponsiveImage class ImageProcessor include ResponsiveImage::Utils diff --git a/lib/jekyll/responsive_image/render_cache.rb b/lib/jekyll/responsive_image/render_cache.rb index 6de1768..467a7f2 100644 --- a/lib/jekyll/responsive_image/render_cache.rb +++ b/lib/jekyll/responsive_image/render_cache.rb @@ -1,5 +1,5 @@ module Jekyll - class ResponsiveImage + module ResponsiveImage class RenderCache attr_accessor :store diff --git a/lib/jekyll/responsive_image/renderer.rb b/lib/jekyll/responsive_image/renderer.rb new file mode 100644 index 0000000..a03201c --- /dev/null +++ b/lib/jekyll/responsive_image/renderer.rb @@ -0,0 +1,44 @@ +module Jekyll + module ResponsiveImage + class Renderer + include Jekyll::ResponsiveImage::Utils + + def initialize(site, attributes) + @site = site + @attributes = attributes + end + + def make_config + ResponsiveImage.defaults.dup + .merge(@site.config['responsive_image']) + .merge(:site_source => @site.source, :site_dest => @site.dest) + end + + def render_responsive_image + cache_key = @attributes.to_s + result = @attributes['cache'] ? RenderCache.get(cache_key) : nil + + if result.nil? + config = make_config + + absolute_image_path = @site.in_source_dir(@attributes['path'].to_s) + image = ImageProcessor.process(absolute_image_path, @attributes['path'], config) + @attributes['original'] = image[:original] + @attributes['resized'] = image[:resized] + + @attributes['resized'].each { |resized| keep_resized_image!(@site, resized) } + + image_template = @site.in_source_dir(@attributes['template'] || config['template']) + partial = File.read(image_template) + template = Liquid::Template.parse(partial) + + result = template.render!(@attributes.merge(@site.site_payload)) + + RenderCache.set(cache_key, result) + end + + result + end + end + end +end diff --git a/lib/jekyll/responsive_image/resize_handler.rb b/lib/jekyll/responsive_image/resize_handler.rb index 04b5e8d..3358b72 100644 --- a/lib/jekyll/responsive_image/resize_handler.rb +++ b/lib/jekyll/responsive_image/resize_handler.rb @@ -1,5 +1,5 @@ module Jekyll - class ResponsiveImage + module ResponsiveImage class ResizeHandler include ResponsiveImage::Utils diff --git a/lib/jekyll/responsive_image/tag.rb b/lib/jekyll/responsive_image/tag.rb index 7994c2b..6ba8147 100644 --- a/lib/jekyll/responsive_image/tag.rb +++ b/lib/jekyll/responsive_image/tag.rb @@ -1,8 +1,6 @@ module Jekyll - class ResponsiveImage + module ResponsiveImage class Tag < Liquid::Tag - include Jekyll::ResponsiveImage::Common - def initialize(tag_name, markup, tokens) super @@ -15,7 +13,7 @@ module Jekyll end def render(context) - render_responsive_image(context, @attributes) + Renderer.new(context.registers[:site], @attributes).render_responsive_image end end end diff --git a/lib/jekyll/responsive_image/utils.rb b/lib/jekyll/responsive_image/utils.rb index fbe612e..9aeac88 100644 --- a/lib/jekyll/responsive_image/utils.rb +++ b/lib/jekyll/responsive_image/utils.rb @@ -1,8 +1,13 @@ require 'pathname' module Jekyll - class ResponsiveImage + module ResponsiveImage module Utils + def keep_resized_image!(site, image) + keep_dir = File.dirname(image['path']) + site.config['keep_files'] << keep_dir unless site.config['keep_files'].include?(keep_dir) + end + def symbolize_keys(hash) result = {} hash.each_key do |key| diff --git a/lib/jekyll/responsive_image/version.rb b/lib/jekyll/responsive_image/version.rb index 2a793e9..a094b92 100644 --- a/lib/jekyll/responsive_image/version.rb +++ b/lib/jekyll/responsive_image/version.rb @@ -1,5 +1,5 @@ module Jekyll - class ResponsiveImage + module ResponsiveImage VERSION = '1.0.0.pre3'.freeze end end