Sha256: 22716f4c1892139525b281117c03de2712dc470b91ade64eeb7336c721efc6d0

Contents?: true

Size: 1.76 KB

Versions: 7

Compression:

Stored size: 1.76 KB

Contents

module Remedy
  class Size
    def initialize *new_dimensions
      new_dimensions.flatten!
      if new_dimensions.first.is_a? Range then
        new_dimensions.map! do |range|
          range.to_a.length
        end
      end
      @dimensions = new_dimensions
    end
    attr_accessor :dimensions

    def - other_size
      if other_size.respond_to? :length then
        self.class.new subtract(other_size)
      else
        self.class.new deduct(other_size)
      end
    end

    def / value
      dimensions.map do |dimension|
        dimension / value
      end
    end

    def << value
      self.dimensions << value
    end


    def fits_into? size_to_fit_into
      other_size = Size(size_to_fit_into)
      length.times.each do |index|
        return false if self[index] > other_size[index]
      end
      true
    end

    def rows
      dimensions.first
    end

    def cols
      dimensions[1]
    end

    def [] index
      dimensions[index]
    end

    def length
      dimensions.length
    end

    def to_a
      dimensions.dup
    end

    def to_ary
      dimensions
    end

    def to_s
      "(#{dimensions.join('x')})"
    end

    def inspect
      "#<#{self.class}:#{to_s}>"
    end

    protected

    def deduct amount
      dimensions.map do |dimension|
        dimension - amount
      end
    end

    def subtract other_size
      sizesame? other_size

      length.times.inject Size.new do |difference, index|
        difference << self[index] - other_size[index]
      end
    end

    def sizesame? other_size
      raise "Different numbers of dimensions!" unless length == other_size.length
    end
  end
end

def Size *sizeable
  sizeable.flatten!
  if sizeable.first.is_a? Remedy::Size then
    sizeable
  else
    Remedy::Size.new sizeable
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
remedy-0.2.0 lib/remedy/size.rb
remedy-0.1.2 lib/remedy/size.rb
remedy-0.1.1 lib/remedy/size.rb
remedy-0.1.0 lib/remedy/size.rb
remedy-0.0.5 lib/remedy/size.rb
remedy-0.0.4 lib/remedy/size.rb
remedy-0.0.4.pre lib/remedy/size.rb