class MiddlemanSimpleThumbnailer::Image

Attributes

img_path[RW]
middleman_config[RW]
resize_to[RW]

Public Class Methods

new(img_path, resize_to, app, options_hash) click to toggle source
# File lib/middleman-simple-thumbnailer/image.rb, line 9
def initialize(img_path, resize_to, app, options_hash)
  @img_path = img_path
  @resize_to = resize_to
  @middleman_config = app.config
  @app = app
  @options = options_hash
end

Public Instance Methods

base64_data() click to toggle source
# File lib/middleman-simple-thumbnailer/image.rb, line 25
def base64_data
  prepare_thumbnail
  Base64.strict_encode64(File.read(cached_resized_img_abs_path))
end
cached_resized_img_abs_path() click to toggle source
# File lib/middleman-simple-thumbnailer/image.rb, line 60
def cached_resized_img_abs_path
  File.join(cache_dir, middleman_abs_path).gsub(image_name, resized_image_name).split('.').tap { |a|
    a.insert(-2, image_checksum)
  }.join('.')
end
middleman_abs_path() click to toggle source
# File lib/middleman-simple-thumbnailer/image.rb, line 56
def middleman_abs_path
  img_path.start_with?('/') ? img_path : File.join(images_dir, img_path)
end
middleman_resized_abs_path() click to toggle source
# File lib/middleman-simple-thumbnailer/image.rb, line 52
def middleman_resized_abs_path
  middleman_abs_path.gsub(image_name, resized_image_name)
end
mime_type() click to toggle source
# File lib/middleman-simple-thumbnailer/image.rb, line 17
def mime_type
  image.mime_type
end
prepare_thumbnail() click to toggle source
# File lib/middleman-simple-thumbnailer/image.rb, line 30
def prepare_thumbnail
  unless cached_thumbnail_available?
    resize!
    save_cached_thumbnail
  end
end
render() click to toggle source
# File lib/middleman-simple-thumbnailer/image.rb, line 37
def render
  prepare_thumbnail
  File.read(cached_resized_img_abs_path)
end
resized_img_abs_path() click to toggle source
# File lib/middleman-simple-thumbnailer/image.rb, line 48
def resized_img_abs_path
  File.join(build_dir, middleman_abs_path).gsub(image_name, resized_image_name)
end
resized_img_path() click to toggle source
# File lib/middleman-simple-thumbnailer/image.rb, line 21
def resized_img_path
  img_path.gsub(image_name, resized_image_name)
end
save!() click to toggle source
# File lib/middleman-simple-thumbnailer/image.rb, line 43
def save!
  prepare_thumbnail
  FileUtils.copy_file(cached_resized_img_abs_path, resized_img_abs_path)
end

Private Instance Methods

abs_path() click to toggle source
# File lib/middleman-simple-thumbnailer/image.rb, line 96
def abs_path
  File.join(source_dir, middleman_abs_path)
end
build_dir() click to toggle source
# File lib/middleman-simple-thumbnailer/image.rb, line 118
def build_dir
  middleman_config[:build_dir]
end
cache_dir() click to toggle source
# File lib/middleman-simple-thumbnailer/image.rb, line 122
def cache_dir
  File.absolute_path(@options.cache_dir, @app.root)
end
cached_thumbnail_available?() click to toggle source
# File lib/middleman-simple-thumbnailer/image.rb, line 100
def cached_thumbnail_available?
  File.exist?(cached_resized_img_abs_path)
end
image() click to toggle source
# File lib/middleman-simple-thumbnailer/image.rb, line 75
def image
  @image ||= MiniMagick::Image.open(abs_path)
end
image_checksum() click to toggle source
# File lib/middleman-simple-thumbnailer/image.rb, line 79
def image_checksum
  @image_checksum ||= Digest::SHA2.file(abs_path).hexdigest[0..16]
end
image_name() click to toggle source
# File lib/middleman-simple-thumbnailer/image.rb, line 83
def image_name
  File.basename(abs_path)
end
images_dir() click to toggle source
# File lib/middleman-simple-thumbnailer/image.rb, line 114
def images_dir
  middleman_config[:images_dir]
end
original_mtime() click to toggle source
# File lib/middleman-simple-thumbnailer/image.rb, line 87
def original_mtime
 File.mtime abs_path
end
resize!() click to toggle source
# File lib/middleman-simple-thumbnailer/image.rb, line 68
def resize!
  unless @already_resized
    image.resize(resize_to)
    @already_resized = true
  end
end
resized_image_name() click to toggle source
# File lib/middleman-simple-thumbnailer/image.rb, line 91
def resized_image_name
  image_name.split('.').tap { |a| a.insert(-2, resize_to) }.join('.') # add resize_to sufix
      .gsub(/[%@!<>^]/, '>' => 'gt', '<' => 'lt', '^' => 'c')         # sanitize file name
end
save_cached_thumbnail() click to toggle source
# File lib/middleman-simple-thumbnailer/image.rb, line 104
def save_cached_thumbnail
  FileUtils.mkdir_p(File.dirname(cached_resized_img_abs_path))
  image.write(cached_resized_img_abs_path)
  File.utime(original_mtime, original_mtime, cached_resized_img_abs_path)
end
source_dir() click to toggle source
# File lib/middleman-simple-thumbnailer/image.rb, line 110
def source_dir
  File.absolute_path(middleman_config[:source], @app.root)
end