Module: MoneyHelper

Defined in:
lib/money_helper.rb

Constant Summary collapse

SYMBOL_ONLY =

don’t use ISO code

%w{USD GBP EUR MYR}
OK_SYMBOLS =
%w{
  $ £  ¥  р. L ƒ  P R$ K  D   Q G  Rp    R RM   դր. C$    T ฿ T$ m     E 
}

Class Method Summary collapse

Class Method Details

.money_range_to_text(low, high, currency, delimiter = ' - ') ⇒ Object

Formats a low and high amount in the given currency into a price string

Example

$10,000 - 20,000 for (10000, 20000, "USD")
HKD $10,000 - 20,000 for (10000, 20000, "HKD")
$10,000 ... 20,000 for (10000, 20000, "USD", " ... ")
HKD $10,000 ... 20,000 for (10000, 20000, "HKD", " ... ")

Arguments

low: (Float)
high: (Float)
currency: (String)
delimiter: (String) optional


59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/money_helper.rb', line 59

def self.money_range_to_text(low, high, currency, delimiter = ' - ')
  if low.blank? && high.blank?
    nil
  elsif low.blank?
    "Under " + money_to_text(high, currency)
  elsif high.blank?
    money_to_text(low, currency) + " and up"
  elsif low == high
    money_to_text(low, currency)
  else
    [ money_to_text(low, currency), money_to_text(high, currency, true) ].compact.join(delimiter)
  end
end

.money_to_text(amount, currency, number_only = false) ⇒ Object

Formats a single amount in the given currency into a price string. Defaults to USD if currency not

given.

Example

$10,000; HKD $10,000 for (10000, "USD") and (10000, "HKD"), respectively

Arguments

amount: (Float)
currency: (String)
number_only: (Boolean) optional flag to exclude currency indicators (retains number formatting
  specific to currency)


28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/money_helper.rb', line 28

def self.money_to_text(amount, currency, number_only = false)
  return nil unless amount.present?
  currency = "USD" if currency.blank?
  valid_currency = code_valid?(currency) ? currency : "USD"
  symbol = symbol_for_code(currency)
  include_symbol = !number_only && symbol.present? && OK_SYMBOLS.include?(symbol)
  subunit_factor = Money::Currency.new(valid_currency).subunit_to_unit
  (number_only || SYMBOL_ONLY.include?(currency) ? "" : currency + " ") +
    Money.new(amount*subunit_factor.ceil, valid_currency).format({
      no_cents: true,
      symbol_position: :before,
      symbol: include_symbol
    }).delete(' ')
end