class Middleman::Images::Manipulator

Attributes

app[RW]
ignore_original[RW]
images[RW]
required_originals[RW]

Public Class Methods

new(app, ignore_original) click to toggle source
# File lib/middleman-images/manipulator.rb, line 4
def initialize(app, ignore_original)
  @app = app
  @images = []
  @required_originals = []
  @ignore_original = ignore_original
  @inspected_at = {}
  @destination_paths = []
end

Public Instance Methods

add(image) click to toggle source
# File lib/middleman-images/manipulator.rb, line 13
def add(image)
  images << image unless @destination_paths.include?(image.destination_path)
  @destination_paths << image.destination_path
end
manipulate_resource_list(resources) click to toggle source
# File lib/middleman-images/manipulator.rb, line 22
def manipulate_resource_list(resources)
  app.logger.info "== Images: Registering images to process. This may take a while…"

  resources.each do |resource|
    next unless inspect?(resource)

    app.logger.debug "== Images: Inspecting #{resource.destination_path} for images to process."

    begin
      # We inspect templates by triggering the render method on them. This way our
      # image_tag and image_path helpers will get called and register the images.
      resource.render({}, {})
    rescue => e
      app.logger.debug e
      app.logger.debug "== Images: There was an error inspecting #{resource.destination_path}. Images for this resource will not be processed."
    end
  end

  app.logger.info "== Images: All images have been registered."

  ignore_orginal_resources(resources) if ignore_original
  resources + images
end
preserve_original(resource) click to toggle source
# File lib/middleman-images/manipulator.rb, line 18
def preserve_original(resource)
  required_originals << resource.source_file
end

Private Instance Methods

ignore_orginal_resources(resources) click to toggle source
# File lib/middleman-images/manipulator.rb, line 62
def ignore_orginal_resources(resources)
  originals = images.map(&:original_source_file)
  unused_originals = originals - required_originals

  resources.each do |resource|
    if unused_originals.include? resource.source_file
      resource.ignore!
    elsif required_originals.include? resource.source_file
      resource.instance_variable_set(:@ignored, false)
    end
  end
end
inspect?(resource) click to toggle source
# File lib/middleman-images/manipulator.rb, line 50
def inspect?(resource)
  return false unless resource.template?

  inspected_at = @inspected_at[resource.destination_path]
  return true if inspected_at.nil?

  source_modification_time = File.mtime(resource.source_file)
  inspected_at < source_modification_time.tap do |inspect|
    @inspected_at[resource.destination_path] = source_modification_time if inspect
  end
end