Sha256: 3b9712788dec76b00586ef08725ba269ff96b45e9d993b3b32ec64f1e88732fd

Contents?: true

Size: 1.67 KB

Versions: 27

Compression:

Stored size: 1.67 KB

Contents

# -*- encoding: utf-8 -*-
# -*- frozen_stringing_literal: true -*-
# -*- warn_indent: true -*-

module UnitMeasurements
  class Normalizer
    FRACTIONS_SYMBOLS = {
      "¼"  => "1/4",
      "½"  => "1/2",
      "¾"  => "3/4",
      "⅓"  => "1/3",
      "⅔"  => "2/3",
      "⅕"  => "1/5",
      "⅖"  => "2/5",
      "⅗"  => "3/5",
      "⅘"  => "4/5",
      "⅙"  => "1/6",
      "⅚"  => "5/6",
      "⅐"  => "1/7",
      "⅛"  => "1/8",
      "⅜"  => "3/8",
      "⅝"  => "5/8",
      "⅞"  => "7/8",
      "⅑"  => "1/9",
      "⅒" => "1/10",
      "↉"  => "0/3",
      "⁄"   => "/"
    }.freeze

    EXPONENTS_SYMBOLS = {
      "⁰" => "0",
      "¹" => "1",
      "²" => "2",
      "³" => "3",
      "⁴" => "4",
      "⁵" => "5",
      "⁶" => "6",
      "⁷" => "7",
      "⁸" => "8",
      "⁹" => "9",
      "⁺" => "+",
      "⁻" => "-",
    }

    FRACTION_REGEX = /(#{FRACTIONS_SYMBOLS.keys.join("|")})/
    EXPONENT_REGEX = /([\d]+[Ee]?[+-]?)(#{EXPONENTS_SYMBOLS.keys.join("|")})/
    RATIO_REGEX    = /([\d]+):([\d]+)/

    class << self
      def normalize(string)
        string.dup.tap do |str|
          if str =~ Regexp.new(FRACTION_REGEX)
            FRACTIONS_SYMBOLS.each do |search, replace|
              str.gsub!(search) { " #{replace}" }
            end
          end

          if str =~ Regexp.new(EXPONENT_REGEX)
            EXPONENTS_SYMBOLS.each do |search, replace|
              str.gsub!(search) { "#{replace}" }
            end
          end

          if str =~ Regexp.new(RATIO_REGEX)
            str.gsub!(RATIO_REGEX) { "#{$1.to_i}/#{$2.to_i}" }
          end

          str.strip!
        end
      end
    end
  end
end

Version data entries

27 entries across 27 versions & 1 rubygems

Version Path
unit_measurements-3.8.0 lib/unit_measurements/normalizer.rb
unit_measurements-3.7.0 lib/unit_measurements/normalizer.rb
unit_measurements-3.6.0 lib/unit_measurements/normalizer.rb
unit_measurements-3.5.0 lib/unit_measurements/normalizer.rb
unit_measurements-3.4.1 lib/unit_measurements/normalizer.rb
unit_measurements-3.3.0 lib/unit_measurements/normalizer.rb
unit_measurements-3.4.0 lib/unit_measurements/normalizer.rb
unit_measurements-3.2.0 lib/unit_measurements/normalizer.rb
unit_measurements-3.1.0 lib/unit_measurements/normalizer.rb
unit_measurements-3.0.0 lib/unit_measurements/normalizer.rb
unit_measurements-2.6.2 lib/unit_measurements/normalizer.rb
unit_measurements-2.6.1 lib/unit_measurements/normalizer.rb
unit_measurements-2.6.0 lib/unit_measurements/normalizer.rb
unit_measurements-2.5.0 lib/unit_measurements/normalizer.rb
unit_measurements-2.4.0 lib/unit_measurements/normalizer.rb
unit_measurements-2.3.0 lib/unit_measurements/normalizer.rb
unit_measurements-2.2.0 lib/unit_measurements/normalizer.rb
unit_measurements-2.1.0 lib/unit_measurements/normalizer.rb
unit_measurements-1.7.0 lib/unit_measurements/normalizer.rb
unit_measurements-1.6.0 lib/unit_measurements/normalizer.rb