money 6.11.0 → 6.11.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -3
- data/Gemfile +2 -2
- data/README.md +27 -21
- data/lib/money/bank/variable_exchange.rb +1 -1
- data/lib/money/currency/loader.rb +1 -1
- data/lib/money/money.rb +6 -41
- data/lib/money/money/arithmetic.rb +1 -1
- data/lib/money/money/formatter.rb +49 -49
- data/lib/money/money/formatting_rules.rb +1 -1
- data/lib/money/version.rb +1 -1
- data/spec/bank/variable_exchange_spec.rb +3 -3
- data/spec/currency_spec.rb +3 -3
- data/spec/money/arithmetic_spec.rb +85 -80
- data/spec/money/formatting_spec.rb +192 -182
- data/spec/rates_store/memory_spec.rb +3 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d1d4f4df8ad562014dbb4ae22806844149097c84
|
4
|
+
data.tar.gz: cd1dfde292d4ce67beb09c59d0c793f6b2f99e83
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ef2ea4a84d5f2ac90b2dd189aac326d4149412a85c4a8bd70d3fa55237a0bcc610cb5b410b96d1d2c97a613e34ed94189216afed15718f081385ffca5d1545d
|
7
|
+
data.tar.gz: a83595b34a6947923d0f4fc7cf8ecaadd7ef3d46f41840fb65c28d616312259610e1c6ce0be584dde111b3aab903f6a294feac1745788a2e661784daceb44569
|
data/CHANGELOG.md
CHANGED
@@ -174,7 +174,7 @@
|
|
174
174
|
- Works on Ruby 1.8.7
|
175
175
|
- Update deps
|
176
176
|
- Depreciate Money.parse
|
177
|
-
- Passing :
|
177
|
+
- Passing symbol: false when formatting 'JPY' currency in :ja locale
|
178
178
|
will work as expected
|
179
179
|
- Divide now obeys the specified rounding mode
|
180
180
|
- Add Money#round method. This is helpful when working in infinite_precision mode and would like to perform rounding at specific points in your work flow.
|
@@ -357,7 +357,7 @@ Features
|
|
357
357
|
|
358
358
|
Bugfixes
|
359
359
|
--------
|
360
|
-
- Fixed issue with #format(:
|
360
|
+
- Fixed issue with #format(no_cents: true) (thanks Romain & Julien)
|
361
361
|
|
362
362
|
Money 3.5.5
|
363
363
|
===========
|
@@ -444,7 +444,7 @@ Features
|
|
444
444
|
- Deprecated `Money#format` with separate params instead of Hash. Deprecation
|
445
445
|
target set to Money 3.5.0.
|
446
446
|
([#issue/31](http://github.com/RubyMoney/money/issues/31))
|
447
|
-
- Deprecated `Money#new(0, :
|
447
|
+
- Deprecated `Money#new(0, currency: "EUR")` in favor of
|
448
448
|
`Money#new(0, "EUR")`. Deprecation target set to Money 3.5.0.
|
449
449
|
([#issue/31](http://github.com/RubyMoney/money/issues/31))
|
450
450
|
- Throw ArgumentError when trying to multiply two Money objects together.
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -119,15 +119,15 @@ below.
|
|
119
119
|
|
120
120
|
``` ruby
|
121
121
|
curr = {
|
122
|
-
:
|
123
|
-
:
|
124
|
-
:
|
125
|
-
:
|
126
|
-
:
|
127
|
-
:
|
128
|
-
:
|
129
|
-
:
|
130
|
-
:
|
122
|
+
priority: 1,
|
123
|
+
iso_code: "USD",
|
124
|
+
iso_numeric: "840",
|
125
|
+
name: "United States Dollar",
|
126
|
+
symbol: "$",
|
127
|
+
subunit: "Cent",
|
128
|
+
subunit_to_unit: 100,
|
129
|
+
decimal_mark: ".",
|
130
|
+
thousands_separator: ","
|
131
131
|
}
|
132
132
|
|
133
133
|
Money::Currency.register(curr)
|
@@ -317,12 +317,12 @@ The following example implements an `ActiveRecord` store to save exchange rates
|
|
317
317
|
# for Rails 5 replace ActiveRecord::Base with ApplicationRecord
|
318
318
|
class ExchangeRate < ActiveRecord::Base
|
319
319
|
def self.get_rate(from_iso_code, to_iso_code)
|
320
|
-
rate = find_by(:
|
320
|
+
rate = find_by(from: from_iso_code, to: to_iso_code)
|
321
321
|
rate.present? ? rate.rate : nil
|
322
322
|
end
|
323
323
|
|
324
324
|
def self.add_rate(from_iso_code, to_iso_code, rate)
|
325
|
-
exrate = find_or_initialize_by(:
|
325
|
+
exrate = find_or_initialize_by(from: from_iso_code, to: to_iso_code)
|
326
326
|
exrate.rate = rate
|
327
327
|
exrate.save!
|
328
328
|
end
|
@@ -379,6 +379,17 @@ implementations.
|
|
379
379
|
- [russian_central_bank](https://github.com/rmustafin/russian_central_bank)
|
380
380
|
- [money-uphold-bank](https://github.com/subvisual/money-uphold-bank)
|
381
381
|
|
382
|
+
## Formatting
|
383
|
+
|
384
|
+
There are several formatting rules for when `Money#format` is called. For more information, check out the [formatting module source](https://github.com/RubyMoney/money/blob/master/lib/money/money/formatter.rb), or read the latest release's [rdoc version](http://www.rubydoc.info/gems/money/Money/Formatter).
|
385
|
+
|
386
|
+
If you wish to format money according to the EU's [Rules for expressing monetary units](http://publications.europa.eu/code/en/en-370303.htm#position) in either English, Irish, Latvian or Maltese:
|
387
|
+
|
388
|
+
```ruby
|
389
|
+
m = Money.new('123', :gbp) # => #<Money fractional:123 currency:GBP>
|
390
|
+
m.format(symbol: m.currency.to_s + ' ') # => "GBP 1.23"
|
391
|
+
```
|
392
|
+
|
382
393
|
## Ruby on Rails
|
383
394
|
|
384
395
|
To integrate money in a Rails application use [money-rails](https://github.com/RubyMoney/money-rails).
|
@@ -415,6 +426,11 @@ If you wish to disable this feature:
|
|
415
426
|
Money.use_i18n = false
|
416
427
|
```
|
417
428
|
|
429
|
+
## Collection
|
430
|
+
|
431
|
+
In case you're working with collections of `Money` instances, have a look at [money-collection](https://github.com/RubyMoney/money-collection)
|
432
|
+
for improved performance and accuracy.
|
433
|
+
|
418
434
|
### Troubleshooting
|
419
435
|
|
420
436
|
If you get a runtime error such as:
|
@@ -426,16 +442,6 @@ Set the following:
|
|
426
442
|
I18n.enforce_available_locales = false
|
427
443
|
```
|
428
444
|
|
429
|
-
## Formatting
|
430
|
-
|
431
|
-
There are several formatting rules for when `Money#format` is called. For more information, check out the [formatting module source](https://github.com/RubyMoney/money/blob/master/lib/money/money/formatting.rb), or read the latest release's [rdoc version](http://www.rubydoc.info/gems/money/Money/Formatting).
|
432
|
-
|
433
|
-
If you wish to format money according to the EU's [Rules for expressing monetary units](http://publications.europa.eu/code/en/en-370303.htm#position) in either English, Irish, Latvian or Maltese:
|
434
|
-
```ruby
|
435
|
-
m = Money.new('123', :gbp) # => #<Money fractional:123 currency:GBP>
|
436
|
-
m.format( symbol: m.currency.to_s + ' ') # => "GBP 1.23"
|
437
|
-
```
|
438
|
-
|
439
445
|
## Heuristics
|
440
446
|
|
441
447
|
Prior to v6.9.0 heuristic analysis of string input was part of this gem. Since then it was extracted in to [money-heuristics gem](https://github.com/RubyMoney/money-heuristics).
|
@@ -47,7 +47,7 @@ class Money
|
|
47
47
|
# Available formats for importing/exporting rates.
|
48
48
|
RATE_FORMATS = [:json, :ruby, :yaml].freeze
|
49
49
|
SERIALIZER_SEPARATOR = '_TO_'.freeze
|
50
|
-
FORMAT_SERIALIZERS = {:
|
50
|
+
FORMAT_SERIALIZERS = {json: JSON, ruby: Marshal, yaml: YAML}.freeze
|
51
51
|
|
52
52
|
# Initializes a new +Money::Bank::VariableExchange+ object.
|
53
53
|
# It defaults to using an in-memory, thread safe store instance for
|
@@ -17,7 +17,7 @@ class Money
|
|
17
17
|
def parse_currency_file(filename)
|
18
18
|
json = File.read("#{DATA_PATH}/#{filename}")
|
19
19
|
json.force_encoding(::Encoding::UTF_8) if defined?(::Encoding)
|
20
|
-
JSON.parse(json, :
|
20
|
+
JSON.parse(json, symbolize_names: true)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
data/lib/money/money.rb
CHANGED
@@ -104,9 +104,9 @@ class Money
|
|
104
104
|
# @see +Money::Formatting#format+ for more details.
|
105
105
|
#
|
106
106
|
# @example
|
107
|
-
# Money.default_formatting_rules = { :
|
107
|
+
# Money.default_formatting_rules = { display_free: true }
|
108
108
|
# Money.new(0, "USD").format # => "free"
|
109
|
-
# Money.new(0, "USD").format(:
|
109
|
+
# Money.new(0, "USD").format(display_free: false) # => "$0.00"
|
110
110
|
#
|
111
111
|
# @!attribute [rw] use_i18n
|
112
112
|
# @return [Boolean] Use this to disable i18n even if it's used by other
|
@@ -351,19 +351,10 @@ class Money
|
|
351
351
|
# @example
|
352
352
|
# Money.ca_dollar(100).to_s #=> "1.00"
|
353
353
|
def to_s
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
unit
|
359
|
-
else
|
360
|
-
"#{unit}#{currency.decimal_mark}#{fraction}"
|
361
|
-
end
|
362
|
-
else
|
363
|
-
"#{unit}#{currency.decimal_mark}#{pad_subunit(subunit)}#{fraction}"
|
364
|
-
end
|
365
|
-
|
366
|
-
fractional < 0 ? "-#{str}" : str
|
354
|
+
format decimal_mark: currency.decimal_mark,
|
355
|
+
thousands_separator: '',
|
356
|
+
no_cents_if_whole: currency.decimal_places == 0,
|
357
|
+
symbol: false
|
367
358
|
end
|
368
359
|
|
369
360
|
# Return the amount of money as a BigDecimal.
|
@@ -575,32 +566,6 @@ class Money
|
|
575
566
|
end
|
576
567
|
end
|
577
568
|
|
578
|
-
def strings_from_fractional
|
579
|
-
unit, subunit = fractional().abs.divmod(currency.subunit_to_unit)
|
580
|
-
|
581
|
-
if self.class.infinite_precision
|
582
|
-
strings_for_infinite_precision(unit, subunit)
|
583
|
-
else
|
584
|
-
strings_for_base_precision(unit, subunit)
|
585
|
-
end
|
586
|
-
end
|
587
|
-
|
588
|
-
def strings_for_infinite_precision(unit, subunit)
|
589
|
-
subunit, fraction = subunit.divmod(BigDecimal("1"))
|
590
|
-
fraction = fraction.to_s("F")[2..-1] # want fractional part "0.xxx"
|
591
|
-
fraction = "" if fraction =~ /^0+$/
|
592
|
-
|
593
|
-
[unit.to_i.to_s, subunit.to_i.to_s, fraction]
|
594
|
-
end
|
595
|
-
|
596
|
-
def strings_for_base_precision(unit, subunit)
|
597
|
-
[unit.to_s, subunit.to_s, ""]
|
598
|
-
end
|
599
|
-
|
600
|
-
def pad_subunit(subunit)
|
601
|
-
subunit.rjust(currency.decimal_places, '0')
|
602
|
-
end
|
603
|
-
|
604
569
|
def amounts_from_splits(splits)
|
605
570
|
allocations = splits.inject(0, :+)
|
606
571
|
left_over = fractional
|
@@ -126,7 +126,7 @@ class Money
|
|
126
126
|
define_method(op) do |other|
|
127
127
|
unless other.is_a?(Money)
|
128
128
|
if other.zero?
|
129
|
-
return other.is_a?(CoercedNumeric) ? Money.empty.public_send(op, self) : self
|
129
|
+
return other.is_a?(CoercedNumeric) ? Money.empty(currency).public_send(op, self) : self
|
130
130
|
end
|
131
131
|
raise TypeError
|
132
132
|
end
|
@@ -13,8 +13,8 @@ class Money
|
|
13
13
|
# amount of money should be formatted of "free" or as the supplied string.
|
14
14
|
#
|
15
15
|
# @example
|
16
|
-
# Money.us_dollar(0).format(:
|
17
|
-
# Money.us_dollar(0).format(:
|
16
|
+
# Money.us_dollar(0).format(display_free: true) #=> "free"
|
17
|
+
# Money.us_dollar(0).format(display_free: "gratis") #=> "gratis"
|
18
18
|
# Money.us_dollar(0).format #=> "$0.00"
|
19
19
|
#
|
20
20
|
# @option rules [Boolean] :with_currency (false) Whether the currency name
|
@@ -22,29 +22,29 @@ class Money
|
|
22
22
|
#
|
23
23
|
# @example
|
24
24
|
# Money.ca_dollar(100).format #=> "$1.00"
|
25
|
-
# Money.ca_dollar(100).format(:
|
26
|
-
# Money.us_dollar(85).format(:
|
25
|
+
# Money.ca_dollar(100).format(with_currency: true) #=> "$1.00 CAD"
|
26
|
+
# Money.us_dollar(85).format(with_currency: true) #=> "$0.85 USD"
|
27
27
|
#
|
28
28
|
# @option rules [Boolean] :rounded_infinite_precision (false) Whether the
|
29
29
|
# amount of money should be rounded when using {infinite_precision}
|
30
30
|
#
|
31
31
|
# @example
|
32
32
|
# Money.us_dollar(100.1).format #=> "$1.001"
|
33
|
-
# Money.us_dollar(100.1).format(:
|
34
|
-
# Money.us_dollar(100.9).format(:
|
33
|
+
# Money.us_dollar(100.1).format(rounded_infinite_precision: true) #=> "$1"
|
34
|
+
# Money.us_dollar(100.9).format(rounded_infinite_precision: true) #=> "$1.01"
|
35
35
|
#
|
36
36
|
# @option rules [Boolean] :no_cents (false) Whether cents should be omitted.
|
37
37
|
#
|
38
38
|
# @example
|
39
|
-
# Money.ca_dollar(100).format(:
|
40
|
-
# Money.ca_dollar(599).format(:
|
39
|
+
# Money.ca_dollar(100).format(no_cents: true) #=> "$1"
|
40
|
+
# Money.ca_dollar(599).format(no_cents: true) #=> "$5"
|
41
41
|
#
|
42
42
|
# @option rules [Boolean] :no_cents_if_whole (false) Whether cents should be
|
43
43
|
# omitted if the cent value is zero
|
44
44
|
#
|
45
45
|
# @example
|
46
|
-
# Money.ca_dollar(10000).format(:
|
47
|
-
# Money.ca_dollar(10034).format(:
|
46
|
+
# Money.ca_dollar(10000).format(no_cents_if_whole: true) #=> "$100"
|
47
|
+
# Money.ca_dollar(10034).format(no_cents_if_whole: true) #=> "$100.34"
|
48
48
|
#
|
49
49
|
# @option rules [Boolean, String, nil] :symbol (true) Whether a money symbol
|
50
50
|
# should be prepended to the result string. The default is true. This method
|
@@ -56,26 +56,26 @@ class Money
|
|
56
56
|
# Money.new(100, "EUR") #=> "€1.00"
|
57
57
|
#
|
58
58
|
# # Same thing.
|
59
|
-
# Money.new(100, "USD").format(:
|
60
|
-
# Money.new(100, "GBP").format(:
|
61
|
-
# Money.new(100, "EUR").format(:
|
59
|
+
# Money.new(100, "USD").format(symbol: true) #=> "$1.00"
|
60
|
+
# Money.new(100, "GBP").format(symbol: true) #=> "£1.00"
|
61
|
+
# Money.new(100, "EUR").format(symbol: true) #=> "€1.00"
|
62
62
|
#
|
63
63
|
# # You can specify a false expression or an empty string to disable
|
64
64
|
# # prepending a money symbol.§
|
65
|
-
# Money.new(100, "USD").format(:
|
66
|
-
# Money.new(100, "GBP").format(:
|
67
|
-
# Money.new(100, "EUR").format(:
|
65
|
+
# Money.new(100, "USD").format(symbol: false) #=> "1.00"
|
66
|
+
# Money.new(100, "GBP").format(symbol: nil) #=> "1.00"
|
67
|
+
# Money.new(100, "EUR").format(symbol: "") #=> "1.00"
|
68
68
|
#
|
69
69
|
# # If the symbol for the given currency isn't known, then it will default
|
70
70
|
# # to "¤" as symbol.
|
71
|
-
# Money.new(100, "AWG").format(:
|
71
|
+
# Money.new(100, "AWG").format(symbol: true) #=> "¤1.00"
|
72
72
|
#
|
73
73
|
# # You can specify a string as value to enforce using a particular symbol.
|
74
|
-
# Money.new(100, "AWG").format(:
|
74
|
+
# Money.new(100, "AWG").format(symbol: "ƒ") #=> "ƒ1.00"
|
75
75
|
#
|
76
76
|
# # You can specify a indian currency format
|
77
|
-
# Money.new(10000000, "INR").format(:
|
78
|
-
# Money.new(10000000).format(:
|
77
|
+
# Money.new(10000000, "INR").format(south_asian_number_formatting: true) #=> "1,00,000.00"
|
78
|
+
# Money.new(10000000).format(south_asian_number_formatting: true) #=> "$1,00,000.00"
|
79
79
|
#
|
80
80
|
# @option rules [Boolean, nil] :symbol_before_without_space (true) Whether
|
81
81
|
# a space between the money symbol and the amount should be inserted when
|
@@ -87,10 +87,10 @@ class Money
|
|
87
87
|
# Money.new(100, "USD").format #=> "$1.00"
|
88
88
|
#
|
89
89
|
# # Same thing.
|
90
|
-
# Money.new(100, "USD").format(:
|
90
|
+
# Money.new(100, "USD").format(symbol_before_without_space: true) #=> "$1.00"
|
91
91
|
#
|
92
92
|
# # If set to false, will insert a space.
|
93
|
-
# Money.new(100, "USD").format(:
|
93
|
+
# Money.new(100, "USD").format(symbol_before_without_space: false) #=> "$ 1.00"
|
94
94
|
#
|
95
95
|
# @option rules [Boolean, nil] :symbol_after_without_space (false) Whether
|
96
96
|
# a space between the amount and the money symbol should be inserted when
|
@@ -99,17 +99,17 @@ class Money
|
|
99
99
|
#
|
100
100
|
# @example
|
101
101
|
# # Default is to insert a space.
|
102
|
-
# Money.new(100, "USD").format(:
|
102
|
+
# Money.new(100, "USD").format(symbol_position: :after) #=> "1.00 $"
|
103
103
|
#
|
104
104
|
# # If set to true, will not insert a space.
|
105
|
-
# Money.new(100, "USD").format(:
|
105
|
+
# Money.new(100, "USD").format(symbol_position: :after, symbol_after_without_space: true) #=> "1.00$"
|
106
106
|
#
|
107
107
|
# @option rules [Boolean, String, nil] :decimal_mark (true) Whether the
|
108
108
|
# currency should be separated by the specified character or '.'
|
109
109
|
#
|
110
110
|
# @example
|
111
111
|
# # If a string is specified, it's value is used.
|
112
|
-
# Money.new(100, "USD").format(:
|
112
|
+
# Money.new(100, "USD").format(decimal_mark: ",") #=> "$1,00"
|
113
113
|
#
|
114
114
|
# # If the decimal_mark for a given currency isn't known, then it will default
|
115
115
|
# # to "." as decimal_mark.
|
@@ -120,12 +120,12 @@ class Money
|
|
120
120
|
#
|
121
121
|
# @example
|
122
122
|
# # If false is specified, no thousands_separator is used.
|
123
|
-
# Money.new(100000, "USD").format(:
|
124
|
-
# Money.new(100000, "USD").format(:
|
125
|
-
# Money.new(100000, "USD").format(:
|
123
|
+
# Money.new(100000, "USD").format(thousands_separator: false) #=> "1000.00"
|
124
|
+
# Money.new(100000, "USD").format(thousands_separator: nil) #=> "1000.00"
|
125
|
+
# Money.new(100000, "USD").format(thousands_separator: "") #=> "1000.00"
|
126
126
|
#
|
127
127
|
# # If a string is specified, it's value is used.
|
128
|
-
# Money.new(100000, "USD").format(:
|
128
|
+
# Money.new(100000, "USD").format(thousands_separator: ".") #=> "$1.000.00"
|
129
129
|
#
|
130
130
|
# # If the thousands_separator for a given currency isn't known, then it will
|
131
131
|
# # default to "," as thousands_separator.
|
@@ -135,7 +135,7 @@ class Money
|
|
135
135
|
# HTML-formatted. Only useful in combination with +:with_currency+.
|
136
136
|
#
|
137
137
|
# @example
|
138
|
-
# Money.ca_dollar(570).format(:
|
138
|
+
# Money.ca_dollar(570).format(html: true, with_currency: true)
|
139
139
|
# #=> "$5.70 <span class=\"currency\">CAD</span>"
|
140
140
|
#
|
141
141
|
# @option rules [Boolean] :sign_before_symbol (false) Whether the sign should be
|
@@ -143,8 +143,8 @@ class Money
|
|
143
143
|
#
|
144
144
|
# @example
|
145
145
|
# # You can specify to display the sign before the symbol for negative numbers
|
146
|
-
# Money.new(-100, "GBP").format(:
|
147
|
-
# Money.new(-100, "GBP").format(:
|
146
|
+
# Money.new(-100, "GBP").format(sign_before_symbol: true) #=> "-£1.00"
|
147
|
+
# Money.new(-100, "GBP").format(sign_before_symbol: false) #=> "£-1.00"
|
148
148
|
# Money.new(-100, "GBP").format #=> "£-1.00"
|
149
149
|
#
|
150
150
|
# @option rules [Boolean] :sign_positive (false) Whether positive numbers should be
|
@@ -152,34 +152,34 @@ class Money
|
|
152
152
|
#
|
153
153
|
# @example
|
154
154
|
# # You can specify to display the sign with positive numbers
|
155
|
-
# Money.new(100, "GBP").format(:
|
156
|
-
# Money.new(100, "GBP").format(:
|
157
|
-
# Money.new(100, "GBP").format(:
|
158
|
-
# Money.new(100, "GBP").format(:
|
155
|
+
# Money.new(100, "GBP").format(sign_positive: true, sign_before_symbol: true) #=> "+£1.00"
|
156
|
+
# Money.new(100, "GBP").format(sign_positive: true, sign_before_symbol: false) #=> "£+1.00"
|
157
|
+
# Money.new(100, "GBP").format(sign_positive: false, sign_before_symbol: true) #=> "£1.00"
|
158
|
+
# Money.new(100, "GBP").format(sign_positive: false, sign_before_symbol: false) #=> "£1.00"
|
159
159
|
# Money.new(100, "GBP").format #=> "£+1.00"
|
160
160
|
#
|
161
161
|
# @option rules [Boolean] :disambiguate (false) Prevents the result from being ambiguous
|
162
162
|
# due to equal symbols for different currencies. Uses the `disambiguate_symbol`.
|
163
163
|
#
|
164
164
|
# @example
|
165
|
-
# Money.new(10000, "USD").format(:
|
166
|
-
# Money.new(10000, "CAD").format(:
|
167
|
-
# Money.new(10000, "USD").format(:
|
168
|
-
# Money.new(10000, "CAD").format(:
|
165
|
+
# Money.new(10000, "USD").format(disambiguate: false) #=> "$100.00"
|
166
|
+
# Money.new(10000, "CAD").format(disambiguate: false) #=> "$100.00"
|
167
|
+
# Money.new(10000, "USD").format(disambiguate: true) #=> "$100.00"
|
168
|
+
# Money.new(10000, "CAD").format(disambiguate: true) #=> "C$100.00"
|
169
169
|
#
|
170
170
|
# @option rules [Boolean] :html_wrap_symbol (false) Wraps the currency symbol
|
171
171
|
# in a html <span> tag.
|
172
172
|
#
|
173
173
|
# @example
|
174
|
-
# Money.new(10000, "USD").format(:
|
174
|
+
# Money.new(10000, "USD").format(disambiguate: false)
|
175
175
|
# #=> "<span class=\"currency_symbol\">$100.00</span>
|
176
176
|
#
|
177
177
|
# @option rules [Symbol] :symbol_position (:before) `:before` if the currency
|
178
178
|
# symbol goes before the amount, `:after` if it goes after.
|
179
179
|
#
|
180
180
|
# @example
|
181
|
-
# Money.new(10000, "USD").format(:
|
182
|
-
# Money.new(10000, "USD").format(:
|
181
|
+
# Money.new(10000, "USD").format(symbol_position: :before) #=> "$100.00"
|
182
|
+
# Money.new(10000, "USD").format(symbol_position: :after) #=> "100.00 $"
|
183
183
|
#
|
184
184
|
# @option rules [Boolean] :translate (true) `true` Checks for custom
|
185
185
|
# symbol definitions using I18n.
|
@@ -191,11 +191,11 @@ class Money
|
|
191
191
|
# # currency:
|
192
192
|
# # symbol:
|
193
193
|
# # CAD: "CAD$"
|
194
|
-
# Money.new(10000, "CAD").format(:
|
194
|
+
# Money.new(10000, "CAD").format(translate: true) #=> "CAD$100.00"
|
195
195
|
#
|
196
196
|
# @example
|
197
|
-
# Money.new(89000, :btc).format(:
|
198
|
-
# Money.new(110, :usd).format(:
|
197
|
+
# Money.new(89000, :btc).format(drop_trailing_zeros: true) #=> B⃦0.00089
|
198
|
+
# Money.new(110, :usd).format(drop_trailing_zeros: true) #=> $1.1
|
199
199
|
#
|
200
200
|
# Note that the default rules can be defined through {Money.default_formatting_rules} hash.
|
201
201
|
#
|
@@ -312,7 +312,7 @@ class Money
|
|
312
312
|
end
|
313
313
|
|
314
314
|
def format_decimal_part(value)
|
315
|
-
return nil if currency.decimal_places == 0
|
315
|
+
return nil if currency.decimal_places == 0 && !Money.infinite_precision
|
316
316
|
return nil if rules[:no_cents]
|
317
317
|
return nil if rules[:no_cents_if_whole] && value.to_i == 0
|
318
318
|
|
@@ -328,9 +328,9 @@ class Money
|
|
328
328
|
def i18n_format_for(method, name, character)
|
329
329
|
if Money.use_i18n
|
330
330
|
begin
|
331
|
-
I18n.t name, :
|
331
|
+
I18n.t name, scope: "number.currency.format", raise: true
|
332
332
|
rescue I18n::MissingTranslationData
|
333
|
-
I18n.t name, :
|
333
|
+
I18n.t name, scope: "number.format", default: (currency.send(method) || character)
|
334
334
|
end
|
335
335
|
else
|
336
336
|
currency.send(method) || character
|