money 6.6.1 → 6.7.0
Sign up to get free protection for your applications and to get access to all the features.
- 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?
|