money 6.6.1 → 6.7.0
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/.gitignore +1 -0
- data/.rspec +1 -0
- data/.travis.yml +3 -2
- data/AUTHORS +16 -13
- data/CHANGELOG.md +12 -3
- data/Gemfile +1 -1
- data/README.md +31 -13
- data/Rakefile +1 -0
- data/config/currency_iso.json +23 -7
- data/config/currency_non_iso.json +34 -1
- data/lib/money.rb +13 -0
- data/lib/money/bank/base.rb +1 -1
- data/lib/money/currency.rb +4 -4
- data/lib/money/currency/heuristics.rb +3 -2
- data/lib/money/money.rb +2 -2
- data/lib/money/money/arithmetic.rb +44 -19
- data/lib/money/money/formatting.rb +35 -26
- data/lib/money/version.rb +1 -1
- data/money.gemspec +2 -1
- data/spec/bank/base_spec.rb +0 -2
- data/spec/bank/single_currency_spec.rb +0 -2
- data/spec/bank/variable_exchange_spec.rb +0 -1
- data/spec/currency/heuristics_spec.rb +79 -1
- data/spec/currency/loader_spec.rb +0 -1
- data/spec/currency_spec.rb +7 -9
- data/spec/money/arithmetic_spec.rb +99 -46
- data/spec/money/constructors_spec.rb +0 -2
- data/spec/money/formatting_spec.rb +42 -2
- data/spec/money_spec.rb +3 -5
- data/spec/rates_store/memory_spec.rb +2 -4
- data/spec/spec_helper.rb +2 -7
- metadata +26 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9cffd9f173701f8599fae9244a9de6b4aef0a95f
|
4
|
+
data.tar.gz: 30080c0c9743507a615598ab80c8235d7313f769
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 60307b13ad66a684ff833d58441093b58eb7730ccb108b6804a68f935a91dcc0921153e7c2ce0c8543af0851239b4c7289dcc23f71c60361e875d0e71f5f26fb
|
7
|
+
data.tar.gz: b435062afea1d2a798502354347b757dc5c4f84a835449d39d411c9ea6400e52fa99eeeded5322a92e00b0956d41d9d3003134b25f49c72b18b4fa1f195acf01
|
data/.gitignore
CHANGED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--require spec_helper
|
data/.travis.yml
CHANGED
data/AUTHORS
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Abhay Kumar
|
2
2
|
Adrian Longley
|
3
|
-
Alex Speller
|
4
3
|
Alexander Ross
|
4
|
+
Alex Speller
|
5
5
|
Andreas Loupasakis
|
6
6
|
Andrei
|
7
7
|
Andrew White
|
@@ -23,18 +23,19 @@ Choongmin Lee
|
|
23
23
|
Chris Kampmeier
|
24
24
|
Christian Billen
|
25
25
|
Clarke Brunsdon
|
26
|
-
Dave Kroondyk
|
27
26
|
Daniel Sherson
|
27
|
+
Dave Kroondyk
|
28
28
|
Doug Droper
|
29
|
+
Douglas Miller
|
29
30
|
Ed Saunders
|
30
31
|
Edwin Vlieg
|
31
32
|
Eloy
|
32
33
|
Evan Alter
|
33
34
|
Exoth
|
34
35
|
Filipe Goncalves
|
36
|
+
Francisco Trindade
|
35
37
|
François Beausoleil
|
36
38
|
François Klingler
|
37
|
-
Francisco Trindade
|
38
39
|
Gabriel Gilder
|
39
40
|
Gee-Hsien Chuang
|
40
41
|
George Millo
|
@@ -46,17 +47,18 @@ Jacob Atzen
|
|
46
47
|
James Cotterill
|
47
48
|
James Hunt
|
48
49
|
Jean-Louis Giordano
|
50
|
+
Jean-Philippe Doyle
|
49
51
|
Jell
|
50
|
-
Jeremy McNevin
|
51
52
|
Jérémy Lecour
|
53
|
+
Jeremy McNevin
|
52
54
|
Jesse Cooke
|
53
55
|
Jim Kingdon
|
54
56
|
John Duff
|
55
57
|
John Gakos
|
56
58
|
Jonathon M. Abbott
|
57
59
|
Josh Delsman
|
58
|
-
Joshua Clayton
|
59
60
|
Josh Hepworth
|
61
|
+
Joshua Clayton
|
60
62
|
Julien Boyer
|
61
63
|
Kaleem Ullah
|
62
64
|
Kenichi Kamiya
|
@@ -68,11 +70,11 @@ Marco Otte-Witte
|
|
68
70
|
Mateus Gomes
|
69
71
|
Mateusz Wolsza
|
70
72
|
Matias Korhonen
|
71
|
-
Matt Jankowski
|
72
73
|
Matthew McEachen
|
74
|
+
Matt Jankowski
|
73
75
|
Max Melentiev
|
74
|
-
Michael J. Cohen
|
75
76
|
Michael Irwin
|
77
|
+
Michael J. Cohen
|
76
78
|
Michael Reinsch
|
77
79
|
Michael Rodrigues
|
78
80
|
Mikael Wikman
|
@@ -85,11 +87,12 @@ Olek Janiszewski
|
|
85
87
|
Orien Madgwick
|
86
88
|
Paul McMahon
|
87
89
|
Paulo Diniz
|
88
|
-
Pavel Gabriel
|
89
90
|
Pavan Sudarshan
|
91
|
+
Pavel Gabriel
|
90
92
|
pconnor
|
91
93
|
Pedro Nascimento
|
92
94
|
Pelle Braendgaard
|
95
|
+
Peter Rhoades
|
93
96
|
Phil Cohen
|
94
97
|
pivotal-cloudplanner
|
95
98
|
Prathan Thananart
|
@@ -97,15 +100,12 @@ Robert Starsi
|
|
97
100
|
Romain Gérard
|
98
101
|
Ryan Bigg
|
99
102
|
sankaranarayanan
|
100
|
-
Semyon Perepelitsa
|
101
103
|
Scott Pierce
|
104
|
+
Semyon Perepelitsa
|
102
105
|
Shane Emmons
|
103
106
|
Simone Carletti
|
104
107
|
Spencer Rinehart
|
105
108
|
Steve Morris
|
106
|
-
Yok
|
107
|
-
Yuri Sidorov
|
108
|
-
Yuusuke Takizawa
|
109
109
|
Thomas E Enebo
|
110
110
|
Thomas Weymuth
|
111
111
|
Ticean Bennett
|
@@ -117,7 +117,10 @@ Tom Lianza
|
|
117
117
|
tommeier
|
118
118
|
Troels Knak-Nielsen
|
119
119
|
Tsyren Ochirov
|
120
|
+
Victor Shcherbakov
|
120
121
|
Wei Zhu
|
122
|
+
Yok
|
123
|
+
Yuri Sidorov
|
124
|
+
Yuusuke Takizawa
|
121
125
|
Zubin Henner
|
122
126
|
Бродяной Александр
|
123
|
-
Douglas Miller
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,17 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
-
##
|
4
|
-
|
5
|
-
|
3
|
+
## 6.7.0
|
4
|
+
- Changed `Money#<=>` to return `nil` if the comparison is inappropriate. (#584)
|
5
|
+
- Remove implicit conversion of values being compared. Only accept `Money` and
|
6
|
+
subclasses of `Money` for comparisons and raise TypeError otherwise.
|
7
|
+
- When comparing fails due to `Money::Bank::UnknownRate` `Money#<=>` will now
|
8
|
+
return `nil` as `Comparable#==` will not rescue exceptions in the next release.
|
9
|
+
- Fix `Currency` specs for `#exponent` and `#decimal_places` not making assertions.
|
10
|
+
- Fix a couple of Ruby warnings found in specs.
|
11
|
+
- Fix `Money#-`,`Money#+` arithmetics for Ruby 2.3+ : check for zero value without using eql? with a Fixnum. (#577)
|
12
|
+
- Use `Money#decimal_mark` when formatting with `rounded_infinite_precision` rule
|
13
|
+
set to `true`.
|
14
|
+
- Replaced meta-defined `thousands_separator` and `decimal_mark` methods with regular methods. (#579)
|
6
15
|
|
7
16
|
## 6.6.0
|
8
17
|
- Fixed VariableExchange#exchange_with for big numbers.
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -34,9 +34,9 @@ A Ruby Library for dealing with money and currency conversion.
|
|
34
34
|
|
35
35
|
### Resources
|
36
36
|
|
37
|
-
- [Website](http://rubymoney.github.
|
38
|
-
- [API Documentation](http://rubydoc.info/gems/money/frames)
|
39
|
-
- [Git Repository](
|
37
|
+
- [Website](http://rubymoney.github.io/money/)
|
38
|
+
- [API Documentation](http://www.rubydoc.info/gems/money/frames)
|
39
|
+
- [Git Repository](https://github.com/RubyMoney/money)
|
40
40
|
|
41
41
|
### Notes
|
42
42
|
|
@@ -101,8 +101,8 @@ The most part of `Money` APIs allows you to supply either a `String` or a
|
|
101
101
|
`Money::Currency`.
|
102
102
|
|
103
103
|
``` ruby
|
104
|
-
Money.new(1000, "USD") == Money.new(1000, Currency.new("USD"))
|
105
|
-
Money.new(1000, "EUR").currency == Currency.new("EUR")
|
104
|
+
Money.new(1000, "USD") == Money.new(1000, Money::Currency.new("USD"))
|
105
|
+
Money.new(1000, "EUR").currency == Money::Currency.new("EUR")
|
106
106
|
```
|
107
107
|
|
108
108
|
A `Money::Currency` instance holds all the information about the currency,
|
@@ -181,10 +181,10 @@ def all_currencies(hash)
|
|
181
181
|
end
|
182
182
|
|
183
183
|
major_currencies(Money::Currency.table)
|
184
|
-
# => [
|
184
|
+
# => [:usd, :eur, :gbp, :aud, :cad, :jpy]
|
185
185
|
|
186
186
|
all_currencies(Money::Currency.table)
|
187
|
-
# => [
|
187
|
+
# => [:aed, :afn, :all, ...]
|
188
188
|
```
|
189
189
|
|
190
190
|
### Default Currency
|
@@ -202,7 +202,7 @@ If you use Rails, then `environment.rb` is a very good place to put this.
|
|
202
202
|
|
203
203
|
The exponent of a money value is the number of digits after the decimal
|
204
204
|
separator (which separates the major unit from the minor unit). See e.g.
|
205
|
-
[
|
205
|
+
[ISO 4217](http://www.currency-iso.org/en/shared/amendments/iso-4217-amendment.html) for more
|
206
206
|
information. You can find the exponent (as a `Float`) by
|
207
207
|
|
208
208
|
``` ruby
|
@@ -367,18 +367,19 @@ Money.disallow_currency_conversion!
|
|
367
367
|
The following is a list of Money.gem compatible currency exchange rate
|
368
368
|
implementations.
|
369
369
|
|
370
|
-
- [eu_central_bank](
|
371
|
-
- [google_currency](
|
370
|
+
- [eu_central_bank](https://github.com/RubyMoney/eu_central_bank)
|
371
|
+
- [google_currency](https://github.com/RubyMoney/google_currency)
|
372
372
|
- [money-json-rates](https://github.com/askuratovsky/money-json-rates)
|
373
|
-
- [nordea](https://github.com/
|
373
|
+
- [nordea](https://github.com/matiaskorhonen/nordea)
|
374
374
|
- [nbrb_currency](https://github.com/slbug/nbrb_currency)
|
375
|
+
- [money-currencylayer-bank](https://github.com/phlegx/money-currencylayer-bank)
|
375
376
|
- [money-open-exchange-rates](https://github.com/spk/money-open-exchange-rates)
|
376
377
|
- [money-historical-bank](https://github.com/atwam/money-historical-bank)
|
377
378
|
- [russian_central_bank](https://github.com/rmustafin/russian_central_bank)
|
378
379
|
|
379
380
|
## Ruby on Rails
|
380
381
|
|
381
|
-
To integrate money in a Rails application use [money-rails](
|
382
|
+
To integrate money in a Rails application use [money-rails](https://github.com/RubyMoney/money-rails).
|
382
383
|
|
383
384
|
For deprecated methods of integrating with Rails, check [the wiki](https://github.com/RubyMoney/money/wiki).
|
384
385
|
|
@@ -412,9 +413,26 @@ If you wish to disable this feature:
|
|
412
413
|
Money.use_i18n = false
|
413
414
|
```
|
414
415
|
|
416
|
+
### Troubleshooting
|
417
|
+
|
418
|
+
If you get a runtime error such as:
|
419
|
+
|
420
|
+
I18n::InvalidLocale: :en is not a valid locale
|
421
|
+
|
422
|
+
Set the following:
|
423
|
+
``` ruby
|
424
|
+
I18n.enforce_available_locales = false
|
425
|
+
```
|
426
|
+
|
415
427
|
## Formatting
|
416
428
|
|
417
|
-
There are several formatting rules for when `Money#format` is called. For more information, check out the [formatting module](https://github.com/RubyMoney/money/blob/master/lib/money/money/formatting.rb)
|
429
|
+
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).
|
430
|
+
|
431
|
+
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:
|
432
|
+
```ruby
|
433
|
+
m = Money.new('123', :gbp) # => #<Money fractional:123 currency:GBP>
|
434
|
+
m.format( symbol: m.currency.to_s + ' ') # => "GBP 1.23"
|
435
|
+
```
|
418
436
|
|
419
437
|
## Migration Notes
|
420
438
|
|
data/Rakefile
CHANGED
data/config/currency_iso.json
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
"alternate_symbols": ["DH", "Dhs"],
|
8
8
|
"subunit": "Fils",
|
9
9
|
"subunit_to_unit": 100,
|
10
|
-
"symbol_first":
|
10
|
+
"symbol_first": false,
|
11
11
|
"html_entity": "",
|
12
12
|
"decimal_mark": ".",
|
13
13
|
"thousands_separator": ",",
|
@@ -202,7 +202,7 @@
|
|
202
202
|
"priority": 100,
|
203
203
|
"iso_code": "BGN",
|
204
204
|
"name": "Bulgarian Lev",
|
205
|
-
"symbol": "
|
205
|
+
"symbol": "лв.",
|
206
206
|
"alternate_symbols": ["lev", "leva", "лев", "лева"],
|
207
207
|
"subunit": "Stotinka",
|
208
208
|
"subunit_to_unit": 100,
|
@@ -351,8 +351,24 @@
|
|
351
351
|
"iso_numeric": "072",
|
352
352
|
"smallest_denomination": 5
|
353
353
|
},
|
354
|
-
"
|
354
|
+
"byn": {
|
355
355
|
"priority": 100,
|
356
|
+
"iso_code": "BYN",
|
357
|
+
"name": "Belarusian Ruble",
|
358
|
+
"symbol": "Br",
|
359
|
+
"disambiguate_symbol": "BYN",
|
360
|
+
"alternate_symbols": ["бел. руб.", "б.р.", "руб.", "р."],
|
361
|
+
"subunit": "Kapeyka",
|
362
|
+
"subunit_to_unit": 100,
|
363
|
+
"symbol_first": false,
|
364
|
+
"html_entity": "",
|
365
|
+
"decimal_mark": ",",
|
366
|
+
"thousands_separator": " ",
|
367
|
+
"iso_numeric": "933",
|
368
|
+
"smallest_denomination": 1
|
369
|
+
},
|
370
|
+
"byr": {
|
371
|
+
"priority": 50,
|
356
372
|
"iso_code": "BYR",
|
357
373
|
"name": "Belarusian Ruble",
|
358
374
|
"symbol": "Br",
|
@@ -365,7 +381,7 @@
|
|
365
381
|
"decimal_mark": ",",
|
366
382
|
"thousands_separator": " ",
|
367
383
|
"iso_numeric": "974",
|
368
|
-
"smallest_denomination":
|
384
|
+
"smallest_denomination": 100
|
369
385
|
},
|
370
386
|
"bzd": {
|
371
387
|
"priority": 100,
|
@@ -887,7 +903,7 @@
|
|
887
903
|
"alternate_symbols": [],
|
888
904
|
"subunit": "Lipa",
|
889
905
|
"subunit_to_unit": 100,
|
890
|
-
"symbol_first":
|
906
|
+
"symbol_first": false,
|
891
907
|
"html_entity": "",
|
892
908
|
"decimal_mark": ",",
|
893
909
|
"thousands_separator": ".",
|
@@ -990,8 +1006,8 @@
|
|
990
1006
|
"name": "Iranian Rial",
|
991
1007
|
"symbol": "﷼",
|
992
1008
|
"alternate_symbols": [],
|
993
|
-
"subunit":
|
994
|
-
"subunit_to_unit":
|
1009
|
+
"subunit": null,
|
1010
|
+
"subunit_to_unit": 1,
|
995
1011
|
"symbol_first": true,
|
996
1012
|
"html_entity": "﷼",
|
997
1013
|
"decimal_mark": ".",
|
@@ -11,7 +11,8 @@
|
|
11
11
|
"html_entity": "",
|
12
12
|
"decimal_mark": ".",
|
13
13
|
"thousands_separator": ",",
|
14
|
-
"iso_numeric": ""
|
14
|
+
"iso_numeric": "",
|
15
|
+
"smallest_denomination": 1
|
15
16
|
},
|
16
17
|
"jep": {
|
17
18
|
"priority": 100,
|
@@ -28,5 +29,37 @@
|
|
28
29
|
"thousands_separator": ",",
|
29
30
|
"iso_numeric": "",
|
30
31
|
"smallest_denomination": 1
|
32
|
+
},
|
33
|
+
"ggp": {
|
34
|
+
"priority": 100,
|
35
|
+
"iso_code": "GGP",
|
36
|
+
"name": "Guernsey Pound",
|
37
|
+
"symbol": "£",
|
38
|
+
"disambiguate_symbol": "GGP",
|
39
|
+
"alternate_symbols": [],
|
40
|
+
"subunit": "Penny",
|
41
|
+
"subunit_to_unit": 100,
|
42
|
+
"symbol_first": true,
|
43
|
+
"html_entity": "£",
|
44
|
+
"decimal_mark": ".",
|
45
|
+
"thousands_separator": ",",
|
46
|
+
"iso_numeric": "",
|
47
|
+
"smallest_denomination": 1
|
48
|
+
},
|
49
|
+
"imp": {
|
50
|
+
"priority": 100,
|
51
|
+
"iso_code": "IMP",
|
52
|
+
"name": "Isle of Man Pound",
|
53
|
+
"symbol": "£",
|
54
|
+
"disambiguate_symbol": "IMP",
|
55
|
+
"alternate_symbols": ["M£"],
|
56
|
+
"subunit": "Penny",
|
57
|
+
"subunit_to_unit": 100,
|
58
|
+
"symbol_first": true,
|
59
|
+
"html_entity": "£",
|
60
|
+
"decimal_mark": ".",
|
61
|
+
"thousands_separator": ",",
|
62
|
+
"iso_numeric": "",
|
63
|
+
"smallest_denomination": 1
|
31
64
|
}
|
32
65
|
}
|
data/lib/money.rb
CHANGED
@@ -2,5 +2,18 @@ require "bigdecimal"
|
|
2
2
|
require "bigdecimal/util"
|
3
3
|
require "set"
|
4
4
|
require "i18n"
|
5
|
+
require "sixarm_ruby_unaccent"
|
5
6
|
require "money/currency"
|
6
7
|
require "money/money"
|
8
|
+
|
9
|
+
# Overwrites unaccent method of sixarm_ruby_unaccent.
|
10
|
+
class String
|
11
|
+
def unaccent
|
12
|
+
accentmap = ACCENTMAP
|
13
|
+
accentmap.delete("\u{0142}") # Delete ł symbol from ACCENTMAP used in PLN currency
|
14
|
+
accentmap.delete("\u{010D}") # Delete č symbol from ACCENTMAP used in CZK currency
|
15
|
+
accentmap.delete("\u{FDFC}") # Delete ﷼ symbol from ACCENTMAP used in IRR, SAR and YER currencies
|
16
|
+
accentmap.delete("\u{20A8}") # Delete ₨ symbol from ACCENTMAP used in INR, LKR, MUR, NPR, PKR and SCR currencies
|
17
|
+
split(//u).map {|c| accentmap[c] || c }.join("")
|
18
|
+
end
|
19
|
+
end
|
data/lib/money/bank/base.rb
CHANGED
@@ -118,7 +118,7 @@ class Money
|
|
118
118
|
# @example
|
119
119
|
# same_currency?("usd", "USD") #=> true
|
120
120
|
# same_currency?("usd", "EUR") #=> false
|
121
|
-
# same_currency?("usd", Currency.new("USD") #=> true
|
121
|
+
# same_currency?("usd", Currency.new("USD")) #=> true
|
122
122
|
# same_currency?("usd", "USD") #=> true
|
123
123
|
def same_currency?(currency1, currency2)
|
124
124
|
Currency.wrap(currency1) == Currency.wrap(currency2)
|
data/lib/money/currency.rb
CHANGED
@@ -188,7 +188,7 @@ class Money
|
|
188
188
|
key = curr.downcase.to_sym
|
189
189
|
end
|
190
190
|
existed = @table.delete(key)
|
191
|
-
@stringified_keys = stringify_keys
|
191
|
+
@stringified_keys = stringify_keys if existed
|
192
192
|
existed ? true : false
|
193
193
|
end
|
194
194
|
|
@@ -232,9 +232,9 @@ class Money
|
|
232
232
|
# @!attribute [r] decimal_mark
|
233
233
|
# @return [String] The decimal mark, or character used to separate the
|
234
234
|
# whole unit from the subunit.
|
235
|
-
# @!attribute [r]
|
236
|
-
# @return [String] character used to separate thousands grouping of
|
237
|
-
# whole unit.
|
235
|
+
# @!attribute [r] thousands_separator
|
236
|
+
# @return [String] The character used to separate thousands grouping of
|
237
|
+
# the whole unit.
|
238
238
|
# @!attribute [r] symbol_first
|
239
239
|
# @return [Boolean] Should the currency symbol precede the amount, or
|
240
240
|
# should it come after?
|