money 6.13.0 → 6.13.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +49 -2
  3. data/README.md +93 -3
  4. data/config/currency_backwards_compatible.json +31 -0
  5. data/config/currency_iso.json +18 -18
  6. data/lib/money/bank/variable_exchange.rb +14 -6
  7. data/lib/money/currency.rb +4 -4
  8. data/lib/money/currency/loader.rb +15 -13
  9. data/lib/money/locale_backend/currency.rb +11 -0
  10. data/lib/money/locale_backend/i18n.rb +2 -1
  11. data/lib/money/locale_backend/legacy.rb +2 -2
  12. data/lib/money/money.rb +100 -52
  13. data/lib/money/money/allocation.rb +8 -5
  14. data/lib/money/money/arithmetic.rb +20 -10
  15. data/lib/money/money/formatter.rb +3 -0
  16. data/lib/money/money/formatting_rules.rb +15 -5
  17. data/lib/money/money/locale_backend.rb +3 -1
  18. data/lib/money/rates_store/memory.rb +24 -23
  19. data/lib/money/version.rb +1 -1
  20. data/money.gemspec +4 -4
  21. metadata +11 -51
  22. data/.coveralls.yml +0 -1
  23. data/.gitignore +0 -23
  24. data/.rspec +0 -2
  25. data/.travis.yml +0 -32
  26. data/AUTHORS +0 -131
  27. data/CONTRIBUTING.md +0 -17
  28. data/Gemfile +0 -16
  29. data/Rakefile +0 -17
  30. data/spec/bank/base_spec.rb +0 -79
  31. data/spec/bank/single_currency_spec.rb +0 -13
  32. data/spec/bank/variable_exchange_spec.rb +0 -265
  33. data/spec/currency/heuristics_spec.rb +0 -11
  34. data/spec/currency/loader_spec.rb +0 -19
  35. data/spec/currency_spec.rb +0 -400
  36. data/spec/locale_backend/i18n_spec.rb +0 -62
  37. data/spec/locale_backend/legacy_spec.rb +0 -74
  38. data/spec/money/allocation_spec.rb +0 -130
  39. data/spec/money/arithmetic_spec.rb +0 -756
  40. data/spec/money/constructors_spec.rb +0 -91
  41. data/spec/money/formatting_spec.rb +0 -855
  42. data/spec/money/locale_backend_spec.rb +0 -14
  43. data/spec/money_spec.rb +0 -880
  44. data/spec/rates_store/memory_spec.rb +0 -80
  45. data/spec/spec_helper.rb +0 -30
  46. data/spec/support/shared_examples/money_examples.rb +0 -14
@@ -3,12 +3,14 @@
3
3
  require 'money/locale_backend/errors'
4
4
  require 'money/locale_backend/legacy'
5
5
  require 'money/locale_backend/i18n'
6
+ require 'money/locale_backend/currency'
6
7
 
7
8
  class Money
8
9
  module LocaleBackend
9
10
  BACKENDS = {
10
11
  legacy: Money::LocaleBackend::Legacy,
11
- i18n: Money::LocaleBackend::I18n
12
+ i18n: Money::LocaleBackend::I18n,
13
+ currency: Money::LocaleBackend::Currency
12
14
  }.freeze
13
15
 
14
16
  def self.find(name)
@@ -1,3 +1,5 @@
1
+ require 'monitor'
2
+
1
3
  class Money
2
4
  module RatesStore
3
5
 
@@ -17,11 +19,11 @@ class Money
17
19
  #
18
20
  # @param [Hash] opts Optional store options.
19
21
  # @option opts [Boolean] :without_mutex disables the usage of a mutex
20
- # @param [Hash] rt Optional initial exchange rate data.
21
- def initialize(opts = {}, rt = {})
22
- @options, @index = opts, rt
23
- @mutex = Mutex.new
24
- @in_transaction = false
22
+ # @param [Hash] rates Optional initial exchange rate data.
23
+ def initialize(opts = {}, rates = {})
24
+ @rates = rates
25
+ @options = opts
26
+ @guard = Monitor.new
25
27
  end
26
28
 
27
29
  # Registers a conversion rate and returns it. Uses +Mutex+ to synchronize data access.
@@ -37,7 +39,9 @@ class Money
37
39
  # store.add_rate("USD", "CAD", 1.24515)
38
40
  # store.add_rate("CAD", "USD", 0.803115)
39
41
  def add_rate(currency_iso_from, currency_iso_to, rate)
40
- transaction { index[rate_key_for(currency_iso_from, currency_iso_to)] = rate }
42
+ guard.synchronize do
43
+ rates[rate_key_for(currency_iso_from, currency_iso_to)] = rate
44
+ end
41
45
  end
42
46
 
43
47
  # Retrieve the rate for the given currencies. Uses +Mutex+ to synchronize data access.
@@ -54,24 +58,21 @@ class Money
54
58
  #
55
59
  # store.get_rate("USD", "CAD") #=> 1.24515
56
60
  def get_rate(currency_iso_from, currency_iso_to)
57
- transaction { index[rate_key_for(currency_iso_from, currency_iso_to)] }
61
+ guard.synchronize do
62
+ rates[rate_key_for(currency_iso_from, currency_iso_to)]
63
+ end
58
64
  end
59
65
 
60
66
  def marshal_dump
61
- [self.class, options, index]
67
+ guard.synchronize do
68
+ return [self.class, options, rates.dup]
69
+ end
62
70
  end
63
71
 
64
72
  # Wraps block execution in a thread-safe transaction
65
73
  def transaction(&block)
66
- if @in_transaction || options[:without_mutex]
67
- block.call self
68
- else
69
- @mutex.synchronize do
70
- @in_transaction = true
71
- result = block.call
72
- @in_transaction = false
73
- result
74
- end
74
+ guard.synchronize do
75
+ yield
75
76
  end
76
77
  end
77
78
 
@@ -88,19 +89,19 @@ class Money
88
89
  # puts [iso_from, iso_to, rate].join
89
90
  # end
90
91
  def each_rate(&block)
91
- enum = Enumerator.new do |yielder|
92
- index.each do |key, rate|
92
+ return to_enum(:each_rate) unless block_given?
93
+
94
+ guard.synchronize do
95
+ rates.each do |key, rate|
93
96
  iso_from, iso_to = key.split(INDEX_KEY_SEPARATOR)
94
- yielder.yield iso_from, iso_to, rate
97
+ yield iso_from, iso_to, rate
95
98
  end
96
99
  end
97
-
98
- block_given? ? enum.each(&block) : enum
99
100
  end
100
101
 
101
102
  private
102
103
 
103
- attr_reader :index, :options
104
+ attr_reader :rates, :options, :guard
104
105
 
105
106
  # Return the rate hashkey for the given currencies.
106
107
  #
@@ -1,3 +1,3 @@
1
1
  class Money
2
- VERSION = '6.13.0'
2
+ VERSION = '6.13.8'
3
3
  end
@@ -7,8 +7,8 @@ Gem::Specification.new do |s|
7
7
  s.name = "money"
8
8
  s.version = Money::VERSION
9
9
  s.platform = Gem::Platform::RUBY
10
- s.authors = ["Shane Emmons"]
11
- s.email = ["shane@emmons.io"]
10
+ s.authors = ['Shane Emmons', 'Anthony Dmitriyev']
11
+ s.email = ['shane@emmons.io', 'anthony.dmitriyev@gmail.com']
12
12
  s.homepage = "https://rubymoney.github.io/money"
13
13
  s.summary = "A Ruby Library for dealing with money and currency conversion."
14
14
  s.description = "A Ruby Library for dealing with money and currency conversion."
@@ -16,13 +16,13 @@ Gem::Specification.new do |s|
16
16
 
17
17
  s.add_dependency 'i18n', [">= 0.6.4", '<= 2']
18
18
 
19
- s.add_development_dependency "bundler", "~> 1.3"
19
+ s.add_development_dependency "bundler"
20
20
  s.add_development_dependency "rake"
21
21
  s.add_development_dependency "rspec", "~> 3.4"
22
22
  s.add_development_dependency "yard", "~> 0.9.11"
23
23
  s.add_development_dependency "kramdown", "~> 1.1"
24
24
 
25
- s.files = `git ls-files`.split($/)
25
+ s.files = `git ls-files -z -- config/* lib/* CHANGELOG.md LICENSE money.gemspec README.md`.split("\x0")
26
26
  s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
27
27
  s.test_files = s.files.grep(%r{^(test|spec|features)/})
28
28
  s.require_paths = ["lib"]
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: money
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.13.0
4
+ version: 6.13.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shane Emmons
8
+ - Anthony Dmitriyev
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2018-10-01 00:00:00.000000000 Z
12
+ date: 2020-07-04 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: i18n
@@ -34,16 +35,16 @@ dependencies:
34
35
  name: bundler
35
36
  requirement: !ruby/object:Gem::Requirement
36
37
  requirements:
37
- - - "~>"
38
+ - - ">="
38
39
  - !ruby/object:Gem::Version
39
- version: '1.3'
40
+ version: '0'
40
41
  type: :development
41
42
  prerelease: false
42
43
  version_requirements: !ruby/object:Gem::Requirement
43
44
  requirements:
44
- - - "~>"
45
+ - - ">="
45
46
  - !ruby/object:Gem::Version
46
- version: '1.3'
47
+ version: '0'
47
48
  - !ruby/object:Gem::Dependency
48
49
  name: rake
49
50
  requirement: !ruby/object:Gem::Requirement
@@ -103,21 +104,14 @@ dependencies:
103
104
  description: A Ruby Library for dealing with money and currency conversion.
104
105
  email:
105
106
  - shane@emmons.io
107
+ - anthony.dmitriyev@gmail.com
106
108
  executables: []
107
109
  extensions: []
108
110
  extra_rdoc_files: []
109
111
  files:
110
- - ".coveralls.yml"
111
- - ".gitignore"
112
- - ".rspec"
113
- - ".travis.yml"
114
- - AUTHORS
115
112
  - CHANGELOG.md
116
- - CONTRIBUTING.md
117
- - Gemfile
118
113
  - LICENSE
119
114
  - README.md
120
- - Rakefile
121
115
  - config/currency_backwards_compatible.json
122
116
  - config/currency_iso.json
123
117
  - config/currency_non_iso.json
@@ -129,6 +123,7 @@ files:
129
123
  - lib/money/currency/heuristics.rb
130
124
  - lib/money/currency/loader.rb
131
125
  - lib/money/locale_backend/base.rb
126
+ - lib/money/locale_backend/currency.rb
132
127
  - lib/money/locale_backend/errors.rb
133
128
  - lib/money/locale_backend/i18n.rb
134
129
  - lib/money/locale_backend/legacy.rb
@@ -142,23 +137,6 @@ files:
142
137
  - lib/money/rates_store/memory.rb
143
138
  - lib/money/version.rb
144
139
  - money.gemspec
145
- - spec/bank/base_spec.rb
146
- - spec/bank/single_currency_spec.rb
147
- - spec/bank/variable_exchange_spec.rb
148
- - spec/currency/heuristics_spec.rb
149
- - spec/currency/loader_spec.rb
150
- - spec/currency_spec.rb
151
- - spec/locale_backend/i18n_spec.rb
152
- - spec/locale_backend/legacy_spec.rb
153
- - spec/money/allocation_spec.rb
154
- - spec/money/arithmetic_spec.rb
155
- - spec/money/constructors_spec.rb
156
- - spec/money/formatting_spec.rb
157
- - spec/money/locale_backend_spec.rb
158
- - spec/money_spec.rb
159
- - spec/rates_store/memory_spec.rb
160
- - spec/spec_helper.rb
161
- - spec/support/shared_examples/money_examples.rb
162
140
  homepage: https://rubymoney.github.io/money
163
141
  licenses:
164
142
  - MIT
@@ -181,26 +159,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
181
159
  - !ruby/object:Gem::Version
182
160
  version: '0'
183
161
  requirements: []
184
- rubyforge_project:
185
- rubygems_version: 2.6.8
162
+ rubygems_version: 3.1.2
186
163
  signing_key:
187
164
  specification_version: 4
188
165
  summary: A Ruby Library for dealing with money and currency conversion.
189
- test_files:
190
- - spec/bank/base_spec.rb
191
- - spec/bank/single_currency_spec.rb
192
- - spec/bank/variable_exchange_spec.rb
193
- - spec/currency/heuristics_spec.rb
194
- - spec/currency/loader_spec.rb
195
- - spec/currency_spec.rb
196
- - spec/locale_backend/i18n_spec.rb
197
- - spec/locale_backend/legacy_spec.rb
198
- - spec/money/allocation_spec.rb
199
- - spec/money/arithmetic_spec.rb
200
- - spec/money/constructors_spec.rb
201
- - spec/money/formatting_spec.rb
202
- - spec/money/locale_backend_spec.rb
203
- - spec/money_spec.rb
204
- - spec/rates_store/memory_spec.rb
205
- - spec/spec_helper.rb
206
- - spec/support/shared_examples/money_examples.rb
166
+ test_files: []
@@ -1 +0,0 @@
1
- repo_token: lUJ1iIe2hjtyIFZm413PZ38saqD5UOLXo
data/.gitignore DELETED
@@ -1,23 +0,0 @@
1
- # Bundler
2
- .bundle
3
- Gemfile.lock
4
- pkg/*
5
- bin/
6
-
7
- # Rubinius
8
- *.rbc
9
-
10
- # YARD
11
- .yardoc
12
- yardoc/
13
- doc/
14
-
15
- # Project
16
- .rbenv-version
17
- .rbx
18
- .rvmrc
19
- .ruby-version
20
- .ruby-gemset
21
-
22
- # Spec artifacts
23
- /coverage
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --require spec_helper
2
- --color
@@ -1,32 +0,0 @@
1
- ---
2
- language: ruby
3
- sudo: false
4
- rvm:
5
- - 1.9.3
6
- - 2.0
7
- - 2.1.10
8
- - 2.2.10
9
- - 2.3.7
10
- - 2.4.4
11
- - 2.5.1
12
- - 2.6.0
13
- - rbx-3
14
- - jruby-9.0.5.0
15
- - jruby-9.1.17.0
16
- - jruby-9.2.0.0
17
- - ruby-head
18
- - jruby-head
19
- matrix:
20
- allow_failures:
21
- - rvm: ruby-head
22
- - rvm: jruby-head
23
- - rvm: rbx-3
24
- fast_finish: true
25
- before_install:
26
- - gem update bundler
27
- script: bundle exec rspec spec
28
- notifications:
29
- email:
30
- - semmons99@gmail.com
31
- - andreas@aloop.org
32
- - weppos@weppos.net
data/AUTHORS DELETED
@@ -1,131 +0,0 @@
1
- Abhay Kumar
2
- Adrian Longley
3
- Alexander Ross
4
- Alex Speller
5
- Andreas Loupasakis
6
- Andrei
7
- Andrew White
8
- Andrius Chamentauskas
9
- Anthony Hristov
10
- Anthony Sellitti
11
- banjerluke
12
- Bartosz Dz
13
- bbozo
14
- Benjamin Grössing
15
- Bill DeRusha
16
- Bodaniel Jeanes
17
- Brian Jones
18
- bUg.
19
- Cade Truitt
20
- Casper Thomsen
21
- Chad Boyd
22
- Choongmin Lee
23
- Chris Kampmeier
24
- Christian Billen
25
- Clarke Brunsdon
26
- Daniel Sherson
27
- Dave Kroondyk
28
- Doug Droper
29
- Douglas Miller
30
- Ed Saunders
31
- Edwin Vlieg
32
- Eloy
33
- Evan Alter
34
- Exoth
35
- Filipe Goncalves
36
- Francisco Trindade
37
- François Beausoleil
38
- François Klingler
39
- Fred Liang
40
- Gabriel Gilder
41
- Gee-Hsien Chuang
42
- George Millo
43
- Hakan Ensari
44
- Hongli Lai
45
- Ilia Lobsanov
46
- Ivan Shamatov
47
- Ingo Wichmann
48
- Jacob Atzen
49
- James Cotterill
50
- James Hunt
51
- Jean-Louis Giordano
52
- Jean-Philippe Doyle
53
- Jell
54
- Jérémy Lecour
55
- Jeremy McNevin
56
- Jesse Cooke
57
- Jim Kingdon
58
- John Duff
59
- John Gakos
60
- Jonathon M. Abbott
61
- Josh Delsman
62
- Josh Hepworth
63
- Joshua Clayton
64
- Julien Boyer
65
- Kaleem Ullah
66
- Kenichi Kamiya
67
- Kenn Ejima
68
- Kenneth Salomon
69
- kirillian
70
- Laurynas Butkus
71
- Marcel Scherf
72
- Marco Otte-Witte
73
- Mateus Gomes
74
- Mateusz Wolsza
75
- Matias Korhonen
76
- Matthew McEachen
77
- Matt Jankowski
78
- Max Melentiev
79
- Michael Irwin
80
- Michael J. Cohen
81
- Michael Reinsch
82
- Michael Rodrigues
83
- Mikael Wikman
84
- Mike Herrera
85
- Mike Połétyn
86
- Musannif Zahir
87
- Neil Middleton
88
- Nihad Abbasov
89
- Olek Janiszewski
90
- Orien Madgwick
91
- Paul McMahon
92
- Paulo Diniz
93
- Pavan Sudarshan
94
- Pavel Gabriel
95
- pconnor
96
- Pedro Nascimento
97
- Pelle Braendgaard
98
- Peter Rhoades
99
- Phil Cohen
100
- pivotal-cloudplanner
101
- Prathan Thananart
102
- Robert Starsi
103
- Romain Gérard
104
- Ryan Bigg
105
- sankaranarayanan
106
- Scott Pierce
107
- Semyon Perepelitsa
108
- Shane Emmons
109
- Simone Carletti
110
- Spencer Rinehart
111
- Steve Morris
112
- Thomas E Enebo
113
- Thomas Weymuth
114
- Ticean Bennett
115
- Tien Nguyen
116
- Tim Hart
117
- Tim Krins
118
- Tobias Luetke
119
- Tobias Schmidt
120
- Tom Lianza
121
- tommeier
122
- Troels Knak-Nielsen
123
- Tsyren Ochirov
124
- Victor Shcherbakov
125
- Wei Zhu
126
- Yok
127
- Yuri Sidorov
128
- Yuusuke Takizawa
129
- Zubin Henner
130
- Бродяной Александр
131
- Nicolay Hvidsten