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