class SimpleUnits::Composite

Public Class Methods

from_context(context) click to toggle source
# File lib/simple_units/composite.rb, line 5
def from_context(context)
  new.tap do |composite|
    composite.append_numerators! context
  end
end
from_string(string) click to toggle source
# File lib/simple_units/composite.rb, line 11
def from_string(string)
  from_context SimpleUnits::Context.get_context string
end

Public Instance Methods

*(other) click to toggle source
# File lib/simple_units/composite.rb, line 86
def *(other)
  array = other.denominators.to_a + self.denominators.to_a + other.numerators.to_a + self.numerators.to_a
  self.class.new.tap do |composite|
    array.each do |name, hash|
      composite.modify_context_by_order!(hash[:context], hash[:order])
    end
    composite.simplify!
  end
end
==(other) click to toggle source
# File lib/simple_units/composite.rb, line 96
def ==(other)
  to_str == other.to_str
end
append_denominator!(context) click to toggle source
# File lib/simple_units/composite.rb, line 30
def append_denominator!(context)
  modify_context_by_order!(context, -1)
end
append_denominators!(*contexts) click to toggle source
# File lib/simple_units/composite.rb, line 21
def append_denominators!(*contexts)
  contexts.each { |context| append_denominator! context }
  simplify!
end
append_numerator!(context) click to toggle source
# File lib/simple_units/composite.rb, line 26
def append_numerator!(context)
  modify_context_by_order!(context, 1)
end
append_numerators!(*contexts) click to toggle source
# File lib/simple_units/composite.rb, line 16
def append_numerators!(*contexts)
  contexts.each { |context| append_numerator! context }
  simplify!
end
denominators() click to toggle source
# File lib/simple_units/composite.rb, line 50
def denominators
  @contexts_hash.reject do |name, hash|
    hash[:order] > 0
  end
end
inspector() click to toggle source
# File lib/simple_units/composite.rb, line 70
def inspector
  if @contexts_hash.keys.count == 1 
    @contexts_hash[@contexts_hash.keys.first][:context].inspector
  end
end
inverse() click to toggle source
# File lib/simple_units/composite.rb, line 57
def inverse
  self.class.new.tap do |composite|
    (numerators.to_a + denominators.to_a).each { |name, hash| composite.modify_context_by_order!(hash[:context], -hash[:order]) }
    composite.simplify!
  end
end
modify_context_by_order!(context, order) click to toggle source
# File lib/simple_units/composite.rb, line 34
def modify_context_by_order!(context, order)
  @contexts_hash ||= {}
  if @contexts_hash[context.name.to_s].nil? 
    @contexts_hash[context.name.to_s] = { :context => context, :order => order }
  else
    @contexts_hash[context.name.to_s][:order] += order
  end
end
numerators() click to toggle source
# File lib/simple_units/composite.rb, line 44
def numerators
  @contexts_hash.reject do |name, hash|
    hash[:order] < 0
  end
end
simplify!() click to toggle source
# File lib/simple_units/composite.rb, line 64
def simplify!
  @contexts_hash.reject! do |name, hash|
    hash[:order].zero?
  end
end
to_s() click to toggle source
# File lib/simple_units/composite.rb, line 84
def to_s; to_str; end
to_str() click to toggle source
# File lib/simple_units/composite.rb, line 76
def to_str
  @contexts_hash.to_a.sort { |a,b| a.first <=> b.first }.inject("") do |str, package|
    order = package.last[:order]
    name = package.first
    str + "(#{name}^#{order})"
  end.gsub("^1", "")
end