class Pulo::Dimension

Public Class Methods

new(spec) click to toggle source
# File lib/pulo/quantity/dimension.rb, line 6
def initialize(spec)
  @spec=spec #hash keyed on dimension name as a symbol eg :L
  clean
end

Public Instance Methods

*(val) click to toggle source
# File lib/pulo/quantity/dimension.rb, line 25
def *(val)
  Dimension.new Hash[@spec.map{|itm| [itm[0],itm[1]*val]}]
end
+(other_spec) click to toggle source

def is_base?

@spec.count==1 && @spec.first[1]==1

end

# File lib/pulo/quantity/dimension.rb, line 18
def +(other_spec)
  Dimension.new @spec.merge(other_spec.spec) {|_key,val1,val2| val1+val2}
end
-(other_spec) click to toggle source
# File lib/pulo/quantity/dimension.rb, line 21
def -(other_spec)
  new_hash = Hash[other_spec.spec.map{|k,itm| [k,-itm] } ]
  Dimension.new @spec.merge(new_hash) {|_key,val1,val2| val1+val2}
end
/(val) click to toggle source
# File lib/pulo/quantity/dimension.rb, line 28
def /(val)
  Dimension.new Hash[@spec.map{|itm| [itm[0],itm[1]/val]}]
end
==(other_spec) click to toggle source
# File lib/pulo/quantity/dimension.rb, line 32
def ==(other_spec)
  val=(@spec.merge(other_spec.spec) {|_key,val1,val2| val1-val2}).inject(0) {|sum,n| sum+n[1].abs}
  val==0
end
eql?(other_spec) click to toggle source
# File lib/pulo/quantity/dimension.rb, line 36
def eql?(other_spec)
  self==(other_spec)
end
hash() click to toggle source
# File lib/pulo/quantity/dimension.rb, line 39
def hash
  @spec.to_s.hash
end
spec() click to toggle source
# File lib/pulo/quantity/dimension.rb, line 10
def spec
  @spec
end
to_s(supress_pretty=false) click to toggle source
# File lib/pulo/quantity/dimension.rb, line 42
def to_s(supress_pretty=false)
  sort_spec=@spec.sort_by { |item| item[1]*-1}

  if supress_pretty
    sort_spec.reduce('') do |ret,item|
      ret+item[0].to_s + item[1].to_s
    end
  else
    sort_spec.reduce('') do |ret,item|
      ret+=item[0].to_s + (item[1]==1 ? '' : Pulo.super_digit(item[1])) + '.'
    end[0..-2]
  end

end

Private Instance Methods

clean() click to toggle source
# File lib/pulo/quantity/dimension.rb, line 59
def clean
  @spec=Hash[@spec.delete_if {|_key,value| value==0}.sort]
end