module SexySlug::MoneyAmount

Public Class Methods

call(string) click to toggle source
# File lib/sexy_slug/money_amount.rb, line 2
def self.call(string)
  result = string
  separator = Regexp.escape(SexySlug.t('number.separator'))

  SexySlug.t('currency').keys.each do |currency_symbol|
    sym = Regexp.escape(currency_symbol)
    next unless string.match?(/#{sym}/)

    result = result.gsub(/
      (?<=\s|^)
      #{sym}\ *\d*(?:#{separator}\d+)? | \d*(?:#{separator}\d+)?\ *#{sym}
      (?=\s|$)
    /x) do |match|
      translations = SexySlug.t("currency.#{currency_symbol}")

      full, part = match.split(/#{separator}/).map { |el| el.to_s[/\d+/] }
      part = nil if part.to_i == 0

      [
        full,
        full && translations['full'][full.to_i == 1 ? 'one' : 'other'],
        part,
        part && translations['part'][part.to_i == 1 ? 'one' : 'other'],
      ].compact.join(' ')
    end
  end
  result
end