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
-
.money_range_to_text(low, high, currency, delimiter = ' - ') ⇒ Object
Formats a low and high amount in the given currency into a price string.
-
.money_to_text(amount, currency, number_only = false) ⇒ Object
Formats a single amount in the given currency into a price string.
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 |