Module: NumeralsJp::StringConverter

Includes:
Constant
Defined in:
lib/numerals_jp/string_converter.rb

Overview

Represents conversions from String.

Constant Summary collapse

DETECT_PATTERN =
/([#{NUMERALS}#{SMALL_FACTORS.keys.join}]+[#{LARGE_FACTORS.keys.join}]?)+/
LARGE_EXTRACT_PATTERN =
/([#{NUMERALS}#{SMALL_FACTORS.keys.join}]+)([#{LARGE_FACTORS.keys.join}])?/
SMALL_EXTRACT_PATTERN =
/(([#{NUMERALS}])?([#{SMALL_FACTORS.keys.join}])?)/

Constants included from Constant

Constant::LARGE_FACTORS, Constant::NUMERALS, Constant::SMALL_FACTORS

Class Method Summary collapse

Class Method Details

.jp_to_num(str) ⇒ String

Replaces Japanese numerals with Arabic numerals in given string.

Examples:

jp_to_num("三十六") # => "36"

Parameters:

  • str (String)

    the string to convert

Returns:

  • (String)

    the converted string



18
19
20
21
22
23
24
25
26
27
# File 'lib/numerals_jp/string_converter.rb', line 18

def jp_to_num(str)
  str.gsub(DETECT_PATTERN) do |s|
    s.scan(LARGE_EXTRACT_PATTERN).map { |m|
      m.first.scan(SMALL_EXTRACT_PATTERN).reject { |m| m.first.empty? }.map { |m|
        num, factor = m[1], m[2]
        (num || "1").tr(NUMERALS, "1-9").to_i * (SMALL_FACTORS[factor] || 1)
      }.inject(:+) * (LARGE_FACTORS[m[1]] || 1)
    }.inject(:+)
  end
end