Method: Unitsml::Utility.decompose_unit

Defined in:
lib/unitsml/utility.rb

.decompose_unit(u) ⇒ Object



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/unitsml/utility.rb', line 87

def decompose_unit(u)
  if u&.unit_name == "g" || u.system_type == "SI_base"
    { unit: u, prefix: u&.prefix }
  elsif u.si_derived_bases.nil? || u.si_derived_bases.empty?
    { unit: Unit.new("unknown") }
  else
    u.si_derived_bases.each_with_object([]) do |k, object|
      prefix = if !k.prefix.nil? && !k.prefix.empty?
                 combine_prefixes(prefix_object(k.prefix), u.prefix)
               else
                 u.prefix
               end
      unit_name = Unitsdb.units.find_by_id(k.id).unit_symbols.first.id
      exponent = (k.power&.to_i || 1) * (u.power_numerator&.to_f || 1)
      object << { prefix: prefix,
             unit: Unit.new(unit_name, exponent, prefix: prefix),
           }
    end
  end
end