Sha256: 9376c13a6a2f3ea17954887b8d769ef4d7800d7f4db8ffbec36ec6acfa1757e7

Contents?: true

Size: 1.83 KB

Versions: 5

Compression:

Stored size: 1.83 KB

Contents

module Asciimath2UnitsML
  class Conv
    def validate_yaml(hash, path)
      return hash if path == "../unitsdb/quantities.yaml"
      return hash if path == "../unitsdb/dimensions.yaml"

      hash.each_with_object({}) do |(k, v), m|
        path == "../unitsdb/units.yaml" and validate_unit(v)
        m = validate_symbols(m, v)
        v[:unit_symbols]&.each { |s| validate_unit_symbol_cardinality(s, k) }
      end
      hash
    end

    def validate_unit(unit)
      if unit[:quantity_reference]
        unit[:quantity_reference].is_a?(Array) or
          raise StandardError
            .new "No quantity_reference array provided for unit: #{unit}"
      end
      if unit[:unit_name]
        unit[:unit_name].is_a?(Array) or
          raise StandardError
            .new "No unit_name array provided for unit: #{unit}"
      end
    end

    def validate_symbols(acc, val)
      symbol = symbol_key(val)
      !symbol.nil? or
        raise StandardError.new "No symbol provided for unit: #{val}"
      Array(symbol)&.each do |s|
        acc[s] && s != "1" and
          raise StandardError.new "symbol #{s} is not unique in #{val}: "\
          "already used for #{acc[s]}"
        acc[s] = val
      end
      acc
    end

    def validate_unit_symbol_cardinality(sym, key)
      return true if sym.nil?

      !sym[:id].nil? && !sym[:ascii].nil? && !sym[:html].nil? &&
        !sym[:mathml].nil? && !sym[:latex].nil? &&
        !sym[:unicode].nil? and return true
      raise StandardError.new "malformed unit_symbol for #{key}: #{sym}"
    end

    def symbol_key(val)
      symbol = val[:unit_symbols]&.each_with_object([]) do |s, m|
        m << (s["id"] || s[:id])
      end || val.dig(:symbol, :ascii) || val[:symbol] # || val[:short]
      !symbol.nil? && val[:unit_symbols] && !symbol.is_a?(Array) and
        symbol = [symbol]
      symbol
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
asciimath2unitsml-0.4.4 lib/asciimath2unitsml/validate.rb
asciimath2unitsml-0.4.3 lib/asciimath2unitsml/validate.rb
asciimath2unitsml-0.4.2 lib/asciimath2unitsml/validate.rb
asciimath2unitsml-0.4.1 lib/asciimath2unitsml/validate.rb
asciimath2unitsml-0.4.0 lib/asciimath2unitsml/validate.rb