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
@@ -1,80 +0,0 @@
1
- describe Money::RatesStore::Memory do
2
- let(:subject) { described_class.new }
3
-
4
- describe '#add_rate and #get_rate' do
5
- it 'stores rate in memory' do
6
- expect(subject.add_rate('USD', 'CAD', 0.9)).to eql 0.9
7
- expect(subject.get_rate('USD', 'CAD')).to eql 0.9
8
- end
9
- end
10
-
11
- describe 'add_rate' do
12
- it "uses a mutex by default" do
13
- expect(subject.instance_variable_get(:@mutex)).to receive(:synchronize)
14
- subject.add_rate('USD', 'EUR', 1.25)
15
- end
16
-
17
- context ':without_mutex' do
18
- let(:subject) { Money::RatesStore::Memory.new(without_mutex: true) }
19
-
20
- it "doesn't use mutex if requested not to" do
21
- expect(subject.instance_variable_get(:@mutex)).not_to receive(:synchronize)
22
- subject.add_rate('USD', 'EUR', 1.25)
23
- end
24
- end
25
- end
26
-
27
- describe '#each_rate' do
28
- before do
29
- subject.add_rate('USD', 'CAD', 0.9)
30
- subject.add_rate('CAD', 'USD', 1.1)
31
- end
32
-
33
- it 'iterates over rates' do
34
- expect{|b| subject.each_rate(&b)}.to yield_successive_args(['USD', 'CAD', 0.9], ['CAD', 'USD', 1.1])
35
- end
36
-
37
- it 'is an Enumeator' do
38
- expect(subject.each_rate).to be_kind_of(Enumerator)
39
- result = subject.each_rate.each_with_object({}){|(from, to, rate),m| m[[from,to].join] = rate}
40
- expect(result).to match({'USDCAD' => 0.9, 'CADUSD' => 1.1})
41
- end
42
- end
43
-
44
- describe '#transaction' do
45
- context 'mutex' do
46
- it 'uses mutex' do
47
- expect(subject.instance_variable_get('@mutex')).to receive(:synchronize)
48
- subject.transaction{ 1 + 1 }
49
- end
50
-
51
- it 'wraps block in mutex transaction only once' do
52
- expect{
53
- subject.transaction do
54
- subject.add_rate('USD', 'CAD', 1)
55
- end
56
- }.not_to raise_error
57
- end
58
- end
59
-
60
- context 'no mutex' do
61
- let(:subject) { Money::RatesStore::Memory.new(without_mutex: true) }
62
-
63
- it 'does not use mutex' do
64
- expect(subject.instance_variable_get('@mutex')).not_to receive(:synchronize)
65
- subject.transaction{ 1 + 1 }
66
- end
67
- end
68
- end
69
-
70
- describe '#marshal_dump' do
71
- let(:subject) { Money::RatesStore::Memory.new(optional: true) }
72
-
73
- it 'can reload' do
74
- bank = Money::Bank::VariableExchange.new(subject)
75
- bank = Marshal.load(Marshal.dump(bank))
76
- expect(bank.store.instance_variable_get(:@options)).to eq subject.instance_variable_get(:@options)
77
- expect(bank.store.instance_variable_get(:@index)).to eq subject.instance_variable_get(:@index)
78
- end
79
- end
80
- end
@@ -1,30 +0,0 @@
1
- require "coveralls"
2
- Coveralls.wear!
3
-
4
- $LOAD_PATH.unshift File.dirname(__FILE__)
5
- require "rspec"
6
- require "money"
7
-
8
- Dir['./spec/support/**/*.rb'].sort.each { |f| require f }
9
-
10
- I18n.enforce_available_locales = false
11
-
12
- RSpec.configure do |c|
13
- c.order = :random
14
- c.filter_run :focus
15
- c.run_all_when_everything_filtered = true
16
- end
17
-
18
- def reset_i18n
19
- I18n.backend = I18n::Backend::Simple.new
20
- end
21
-
22
- RSpec.shared_context "with infinite precision", :infinite_precision do
23
- before do
24
- Money.infinite_precision = true
25
- end
26
-
27
- after do
28
- Money.infinite_precision = false
29
- end
30
- end
@@ -1,14 +0,0 @@
1
- RSpec.shared_examples 'instance with custom bank' do |operation, value|
2
- let(:custom_bank) { Money::Bank::VariableExchange.new }
3
- let(:instance) { Money.new(1, :usd, custom_bank) }
4
-
5
- subject { value ? instance.send(operation, value) : instance.send(operation) }
6
-
7
- it "returns custom bank from new instance" do
8
- new_money_instances = Array(subject).select { |el| el.is_a?(Money) }
9
-
10
- new_money_instances.each do |money_instance|
11
- expect(money_instance.bank).to eq(custom_bank)
12
- end
13
- end
14
- end