Sha256: 78612ef2047bc76bf3a9de35068d6cb1048a97281bffda7d9d1d156b60fa3195

Contents?: true

Size: 1.65 KB

Versions: 5

Compression:

Stored size: 1.65 KB

Contents

require 'fspath'
require 'image_optim/image_meta'

class ImageOptim
  # FSPath with additional helpful methods
  class ImagePath < FSPath
    # Holds optimized image with reference to original and its size
    class Optimized < DelegateClass(self)
      def initialize(path, original_or_size = nil)
        path = ImagePath.convert(path)
        __setobj__(path)
        if original_or_size.is_a?(Integer)
          @original = path
          @original_size = original_or_size
        elsif original_or_size
          @original = ImagePath.convert(original_or_size)
          @original_size = @original.size
        end
      end

      # Original path, use original_size to get its size as original can be
      # overwritten
      attr_reader :original

      # Stored size of original
      attr_reader :original_size
    end

    # Get temp path for this file with same extension
    def temp_path(*args, &block)
      ext = extname
      self.class.temp_file_path([basename(ext), ext], *args, &block)
    end

    # Copy file to dest preserving attributes
    def copy(dst)
      FileUtils.copy_file(self, dst, true)
    end

    # Atomic replace src with self
    def replace(src)
      src = self.class.new(src)
      src.temp_path(src.dirname) do |temp|
        src.copy(temp)
        temp.write(read)
        temp.rename(src.to_s)
        unlink
      end
    end

    # Get format using ImageSize
    def format
      image_meta = ImageMeta.for_path(self)
      image_meta && image_meta.format
    end

    # Returns path if it is already an instance of this class otherwise new
    # instance
    def self.convert(path)
      path.is_a?(self) ? path : new(path)
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
image_optim-0.17.1 lib/image_optim/image_path.rb
image_optim-0.17.0 lib/image_optim/image_path.rb
image_optim-0.16.0 lib/image_optim/image_path.rb
image_optim-0.15.0 lib/image_optim/image_path.rb
image_optim-0.14.0 lib/image_optim/image_path.rb