Sha256: 284f46f391c09af99b96f50b47b9efac7c0d54dc658b8049c95e1d8cd1cb3dd7

Contents?: true

Size: 1.68 KB

Versions: 17

Compression:

Stored size: 1.68 KB

Contents

module DragonflyLibvips
  class Dimensions < Struct.new(:geometry, :orig_w, :orig_h)
    def self.call(*args)
      new(*args).call
    end

    def call
      return OpenStruct.new(width: orig_w, height: orig_h, scale: 1) if do_not_resize_if_image_smaller_than_requested? || do_not_resize_if_image_larger_than_requested?
      OpenStruct.new(width: width, height: height, scale: scale)
    end

    private

    def width
      if landscape?
        dimensions_specified_by_width? ? dimensions.width : dimensions.height / aspect_ratio
      else
        dimensions_specified_by_height? ? dimensions.height / aspect_ratio : dimensions.width
      end
    end

    def height
      if landscape?
        dimensions_specified_by_width? ? dimensions.width * aspect_ratio : dimensions.height
      else
        dimensions_specified_by_height? ? dimensions.height : dimensions.width * aspect_ratio
      end
    end

    def scale
      width.to_f / orig_w.to_f
    end

    def dimensions
      w, h = geometry.scan(/\A(\d*)x(\d*)/).flatten.map(&:to_f)
      OpenStruct.new(width: w, height: h)
    end

    def aspect_ratio
      orig_h.to_f / orig_w
    end

    def dimensions_specified_by_width?
      dimensions.width > 0
    end

    def dimensions_specified_by_height?
      dimensions.height > 0
    end

    def landscape?
      aspect_ratio <= 1.0
    end

    def portrait?
      !landscape?
    end

    def do_not_resize_if_image_smaller_than_requested?
      return false unless geometry.include? '>'
      orig_w < width && orig_h < height
    end

    def do_not_resize_if_image_larger_than_requested?
      return false unless geometry.include? '<'
      orig_w > width && orig_h > height
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
dragonfly_libvips-2.5.0 lib/dragonfly_libvips/dimensions.rb
dragonfly_libvips-2.4.2 lib/dragonfly_libvips/dimensions.rb
dragonfly_libvips-2.4.1 lib/dragonfly_libvips/dimensions.rb
dragonfly_libvips-2.4.0 lib/dragonfly_libvips/dimensions.rb
dragonfly_libvips-2.3.3 lib/dragonfly_libvips/dimensions.rb
dragonfly_libvips-2.3.2 lib/dragonfly_libvips/dimensions.rb
dragonfly_libvips-2.3.1 lib/dragonfly_libvips/dimensions.rb
dragonfly_libvips-2.3.0 lib/dragonfly_libvips/dimensions.rb
dragonfly_libvips-2.2.0 lib/dragonfly_libvips/dimensions.rb
dragonfly_libvips-2.1.3 lib/dragonfly_libvips/dimensions.rb
dragonfly_libvips-2.1.2 lib/dragonfly_libvips/dimensions.rb
dragonfly_libvips-2.1.1 lib/dragonfly_libvips/dimensions.rb
dragonfly_libvips-2.1.0 lib/dragonfly_libvips/dimensions.rb
dragonfly_libvips-2.0.1 lib/dragonfly_libvips/dimensions.rb
dragonfly_libvips-2.0.0 lib/dragonfly_libvips/dimensions.rb
dragonfly_libvips-1.0.4 lib/dragonfly_libvips/dimensions.rb
dragonfly_libvips-1.0.2 lib/dragonfly_libvips/dimensions.rb