money 6.11.0 → 6.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|