Sha256: 1368d09fa1d8834223a35b3572c4271614791adace623f4e25fe1b639426a57b

Contents?: true

Size: 1.27 KB

Versions: 13

Compression:

Stored size: 1.27 KB

Contents

require 'image_optim/path'

class ImageOptim
  # Handles processing of original to result using upto two temp files
  class Handler
    # Holds latest successful result
    attr_reader :result

    # original must respond to temp_path
    def initialize(original)
      unless original.respond_to?(:temp_path)
        fail ArgumentError, 'original should respond to temp_path'
      end

      @original = original
      @result = nil
    end

    # with no associated block, works as new. Otherwise creates instance and
    # passes it to block, runs cleanup and returns result of handler
    def self.for(original)
      handler = new(original)
      if block_given?
        begin
          yield handler
          handler.result
        ensure
          handler.cleanup
        end
      else
        handler
      end
    end

    # Yields two paths, one to latest successful result or original, second to
    # temp path
    def process
      @src ||= @original
      @dst ||= @original.temp_path

      return unless yield @src, @dst
      @result = @dst
      if @src == @original
        @src, @dst = @dst, nil
      else
        @src, @dst = @dst, @src
      end
    end

    # Remove extra temp files
    def cleanup
      return unless @dst
      @dst.unlink
      @dst = nil
    end
  end
end

Version data entries

13 entries across 13 versions & 2 rubygems

Version Path
image_optim-0.26.2 lib/image_optim/handler.rb
discourse_image_optim-0.26.2 lib/image_optim/handler.rb
discourse_image_optim-0.26.1 lib/image_optim/handler.rb
image_optim-0.26.1 lib/image_optim/handler.rb
image_optim-0.26.0 lib/image_optim/handler.rb
image_optim-0.25.0 lib/image_optim/handler.rb
discourse_image_optim-0.24.5 lib/image_optim/handler.rb
image_optim-0.24.3 lib/image_optim/handler.rb
discourse_image_optim-0.24.4 lib/image_optim/handler.rb
image_optim-0.24.2 lib/image_optim/handler.rb
image_optim-0.24.1 lib/image_optim/handler.rb
image_optim-0.24.0 lib/image_optim/handler.rb
image_optim-0.23.0 lib/image_optim/handler.rb