module BrazilianCardinality::Currency

Public Class Methods

currency_cardinal(value) click to toggle source
# File lib/brazilian_cardinality/currency.rb, line 4
def currency_cardinal(value)
  return 'grátis' if value.zero?

  abs_value = value.abs
  cents = abs_value.to_s.split('.')[1].to_s[0, 2].ljust(2, '0').to_i
  integer = abs_value.to_i
  expression = raw_cardinal_expression(integer, cents)

  expression << " de #{currency_name}" if integer.zero?
  expression << negative_wording(value, cents)
  expression
end

Private Class Methods

cardinal_cents(cents) click to toggle source
# File lib/brazilian_cardinality/currency.rb, line 36
def cardinal_cents(cents)
  return if cents.zero?
  expression = Number.number_cardinal(cents)
  currency_word = cents == 1 ? 'centavo' : 'centavos'
  "#{expression} #{currency_word}"
end
cardinal_currency_integer_part(value) click to toggle source
# File lib/brazilian_cardinality/currency.rb, line 43
def cardinal_currency_integer_part(value)
  return if value.zero?
  expression = Number.number_cardinal(value)
  preposition = 'de ' if expression =~ /(ão|ões)$/
  "#{expression} #{preposition}#{currency_word(value)}"
end
currency_name(plural = false) click to toggle source
# File lib/brazilian_cardinality/currency.rb, line 19
def currency_name(plural = false)
  ::BrazilianCardinality::CURRENCY_NAME[plural ? 1 : 0]
end
currency_word(value) click to toggle source
# File lib/brazilian_cardinality/currency.rb, line 50
def currency_word(value)
  currency_name(value > 1)
end
negative_wording(value, cents) click to toggle source
# File lib/brazilian_cardinality/currency.rb, line 23
def negative_wording(value, cents)
  negative_word = ' negativo' if value.negative?
  value = value.abs
  negative_word << 's' if negative_word && (value > 1 || cents > 1)
  negative_word.to_s
end
raw_cardinal_expression(integer, cents) click to toggle source
# File lib/brazilian_cardinality/currency.rb, line 30
def raw_cardinal_expression(integer, cents)
  integer_expression = cardinal_currency_integer_part(integer)
  cents_expression = cardinal_cents(cents)
  [integer_expression, cents_expression].compact.join(' e ')
end