class Sass::Value::Number

def initialize(value, unit = nil)

Options Hash: (**unit)
  • :denominator_units (Array<::String>) --
  • :numerator_units (Array<::String>) --

Parameters:
  • unit (::String, Hash) --
  • value (Numeric) --
def initialize(value, unit = nil)
  case unit
  when nil
    numerator_units = []
    denominator_units = []
  when ::String
    numerator_units = [unit]
    denominator_units = []
  when ::Hash
    numerator_units = unit.fetch(:numerator_units, [])
    unless numerator_units.is_a?(Array)
      raise Sass::ScriptError, "invalid numerator_units #{numerator_units.inspect}"
    end
    denominator_units = unit.fetch(:denominator_units, [])
    unless denominator_units.is_a?(Array)
      raise Sass::ScriptError, "invalid denominator_units #{denominator_units.inspect}"
    end
  else
    raise Sass::ScriptError, "invalid unit #{unit.inspect}"
  end
  unless denominator_units.empty? && numerator_units.empty?
    value = value.dup
    numerator_units = numerator_units.dup
    new_denominator_units = []
    denominator_units.each do |denominator_unit|
      index = numerator_units.find_index do |numerator_unit|
        factor = Unit.conversion_factor(denominator_unit, numerator_unit)
        if factor.nil?
          false
        else
          value *= factor
          true
        end
      end
      if index.nil?
        new_denominator_units.push(denominator_unit)
      else
        numerator_units.delete_at(index)
      end
    end
    denominator_units = new_denominator_units
  end
  @value = value.freeze
  @numerator_units = numerator_units.each(&:freeze).freeze
  @denominator_units = denominator_units.each(&:freeze).freeze
end