money 3.1.0.pre3 → 3.1.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.
- data/CHANGELOG.md +196 -0
- data/README.md +217 -0
- data/lib/money/bank/base.rb +73 -32
- data/lib/money/bank/variable_exchange.rb +128 -27
- data/lib/money/core_extensions.rb +39 -18
- data/lib/money/currency.rb +146 -53
- data/lib/money/defaults.rb +8 -2
- data/lib/money/deprecations.rb +8 -5
- data/lib/money/money.rb +363 -170
- metadata +45 -54
- data/.document +0 -5
- data/.gitignore +0 -21
- data/CHANGELOG.rdoc +0 -68
- data/README.rdoc +0 -212
- data/Rakefile +0 -49
- data/VERSION +0 -1
- data/money.gemspec +0 -77
- data/spec/bank/base_spec.rb +0 -78
- data/spec/bank/variable_exchange_spec.rb +0 -311
- data/spec/core_extensions_spec.rb +0 -111
- data/spec/currency_spec.rb +0 -126
- data/spec/deprecations_spec.rb +0 -16
- data/spec/money_spec.rb +0 -799
- data/spec/spec_helper.rb +0 -8
data/Rakefile
DELETED
@@ -1,49 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'rake'
|
3
|
-
require 'rake/clean'
|
4
|
-
|
5
|
-
CLOBBER << 'pkg'
|
6
|
-
|
7
|
-
begin
|
8
|
-
require 'jeweler'
|
9
|
-
Jeweler::Tasks.new do |gem|
|
10
|
-
gem.name = "money"
|
11
|
-
gem.summary = "Money and currency exchange support library"
|
12
|
-
gem.description = "Money and currency exchange support library."
|
13
|
-
gem.email = "hongli@phusion.nl"
|
14
|
-
gem.homepage = "http://money.rubyforge.org/"
|
15
|
-
gem.authors = ["Tobias Luetke", "Hongli Lai", "Jeremy McNevin", "Shane Emmons", "Simone Carletti"]
|
16
|
-
gem.rubyforge_project = "money"
|
17
|
-
gem.add_development_dependency "rspec", ">= 1.2.9"
|
18
|
-
gem.add_development_dependency "hanna", ">= 0.1.12"
|
19
|
-
end
|
20
|
-
Jeweler::GemcutterTasks.new
|
21
|
-
Jeweler::RubyforgeTasks.new do |gem|
|
22
|
-
gem.remote_doc_path = ""
|
23
|
-
end
|
24
|
-
rescue LoadError
|
25
|
-
puts "Jeweler not available. Install it with: gem install jeweler"
|
26
|
-
end
|
27
|
-
|
28
|
-
require 'spec/rake/spectask'
|
29
|
-
Spec::Rake::SpecTask.new(:test) do |spec|
|
30
|
-
spec.libs << 'lib' << 'spec'
|
31
|
-
spec.spec_files = Dir['spec/**/*_spec.rb']
|
32
|
-
spec.spec_opts << '--color'
|
33
|
-
end
|
34
|
-
|
35
|
-
task :spec => :check_dependencies
|
36
|
-
|
37
|
-
task :default => :spec
|
38
|
-
|
39
|
-
require 'hanna/rdoctask'
|
40
|
-
Rake::RDocTask.new do |rdoc|
|
41
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
42
|
-
|
43
|
-
rdoc.rdoc_dir = 'rdoc'
|
44
|
-
rdoc.main = 'README.rdoc'
|
45
|
-
rdoc.title = "money #{version}"
|
46
|
-
rdoc.rdoc_files.include('README.rdoc', 'LICENSE', 'CHANGELOG.rdoc')
|
47
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
48
|
-
rdoc.options << '-U'
|
49
|
-
end
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
3.1.0.pre3
|
data/money.gemspec
DELETED
@@ -1,77 +0,0 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in rakefile, and run the gemspec command
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
|
6
|
-
Gem::Specification.new do |s|
|
7
|
-
s.name = %q{money}
|
8
|
-
s.version = "3.1.0.pre3"
|
9
|
-
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Tobias Luetke", "Hongli Lai", "Jeremy McNevin", "Shane Emmons", "Simone Carletti"]
|
12
|
-
s.date = %q{2010-08-31}
|
13
|
-
s.description = %q{Money and currency exchange support library.}
|
14
|
-
s.email = %q{hongli@phusion.nl}
|
15
|
-
s.extra_rdoc_files = [
|
16
|
-
"CHANGELOG.rdoc",
|
17
|
-
"LICENSE",
|
18
|
-
"README.rdoc"
|
19
|
-
]
|
20
|
-
s.files = [
|
21
|
-
".document",
|
22
|
-
".gitignore",
|
23
|
-
"CHANGELOG.rdoc",
|
24
|
-
"LICENSE",
|
25
|
-
"README.rdoc",
|
26
|
-
"Rakefile",
|
27
|
-
"VERSION",
|
28
|
-
"lib/money.rb",
|
29
|
-
"lib/money/bank/base.rb",
|
30
|
-
"lib/money/bank/variable_exchange.rb",
|
31
|
-
"lib/money/core_extensions.rb",
|
32
|
-
"lib/money/currency.rb",
|
33
|
-
"lib/money/defaults.rb",
|
34
|
-
"lib/money/deprecations.rb",
|
35
|
-
"lib/money/money.rb",
|
36
|
-
"money.gemspec",
|
37
|
-
"spec/bank/base_spec.rb",
|
38
|
-
"spec/bank/variable_exchange_spec.rb",
|
39
|
-
"spec/core_extensions_spec.rb",
|
40
|
-
"spec/currency_spec.rb",
|
41
|
-
"spec/deprecations_spec.rb",
|
42
|
-
"spec/money_spec.rb",
|
43
|
-
"spec/spec_helper.rb"
|
44
|
-
]
|
45
|
-
s.homepage = %q{http://money.rubyforge.org/}
|
46
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
47
|
-
s.require_paths = ["lib"]
|
48
|
-
s.rubyforge_project = %q{money}
|
49
|
-
s.rubygems_version = %q{1.3.7}
|
50
|
-
s.summary = %q{Money and currency exchange support library}
|
51
|
-
s.test_files = [
|
52
|
-
"spec/bank/base_spec.rb",
|
53
|
-
"spec/bank/variable_exchange_spec.rb",
|
54
|
-
"spec/core_extensions_spec.rb",
|
55
|
-
"spec/currency_spec.rb",
|
56
|
-
"spec/deprecations_spec.rb",
|
57
|
-
"spec/money_spec.rb",
|
58
|
-
"spec/spec_helper.rb"
|
59
|
-
]
|
60
|
-
|
61
|
-
if s.respond_to? :specification_version then
|
62
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
63
|
-
s.specification_version = 3
|
64
|
-
|
65
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
66
|
-
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
67
|
-
s.add_development_dependency(%q<hanna>, [">= 0.1.12"])
|
68
|
-
else
|
69
|
-
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
70
|
-
s.add_dependency(%q<hanna>, [">= 0.1.12"])
|
71
|
-
end
|
72
|
-
else
|
73
|
-
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
74
|
-
s.add_dependency(%q<hanna>, [">= 0.1.12"])
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
data/spec/bank/base_spec.rb
DELETED
@@ -1,78 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Money::Bank::Base do
|
4
|
-
before :each do
|
5
|
-
@bank = Money::Bank::Base.new
|
6
|
-
end
|
7
|
-
|
8
|
-
describe '#new with &block' do
|
9
|
-
it 'should store @rounding_method' do
|
10
|
-
proc = Proc.new{|n| n.ceil}
|
11
|
-
bank = Money::Bank::Base.new(&proc)
|
12
|
-
bank.rounding_method.should == proc
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
describe '#setup' do
|
17
|
-
it 'should call #setup after #initialize' do
|
18
|
-
class MyBank < Money::Bank::Base
|
19
|
-
attr_reader :setup_called
|
20
|
-
|
21
|
-
def setup
|
22
|
-
@setup_called = true
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
bank = MyBank.new
|
27
|
-
bank.setup_called.should == true
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
describe '#exchange' do
|
32
|
-
it 'should raise NotImplementedError' do
|
33
|
-
lambda { @bank.exchange(100, 'USD', 'EUR') }.should raise_exception(NotImplementedError)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
describe '#exchange_with' do
|
38
|
-
it 'should raise NotImplementedError' do
|
39
|
-
lambda { @bank.exchange_with(Money.new(100, 'USD'), 'EUR') }.should raise_exception(NotImplementedError)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
describe '#same_currency?' do
|
44
|
-
it 'should accept str/str' do
|
45
|
-
lambda{@bank.send(:same_currency?, 'USD', 'EUR')}.should_not raise_exception
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'should accept currency/str' do
|
49
|
-
lambda{@bank.send(:same_currency?, Money::Currency.wrap('USD'), 'EUR')}.should_not raise_exception
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'should accept str/currency' do
|
53
|
-
lambda{@bank.send(:same_currency?, 'USD', Money::Currency.wrap('EUR'))}.should_not raise_exception
|
54
|
-
end
|
55
|
-
|
56
|
-
it 'should accept currency/currency' do
|
57
|
-
lambda{@bank.send(:same_currency?, Money::Currency.wrap('USD'), Money::Currency.wrap('EUR'))}.should_not raise_exception
|
58
|
-
end
|
59
|
-
|
60
|
-
it 'should return `true` when currencies match' do
|
61
|
-
@bank.send(:same_currency?, 'USD', 'USD').should == true
|
62
|
-
@bank.send(:same_currency?, Money::Currency.wrap('USD'), 'USD').should == true
|
63
|
-
@bank.send(:same_currency?, 'USD', Money::Currency.wrap('USD')).should == true
|
64
|
-
@bank.send(:same_currency?, Money::Currency.wrap('USD'), Money::Currency.wrap('USD')).should == true
|
65
|
-
end
|
66
|
-
|
67
|
-
it 'should return `false` when currencies do not match' do
|
68
|
-
@bank.send(:same_currency?, 'USD', 'EUR').should == false
|
69
|
-
@bank.send(:same_currency?, Money::Currency.wrap('USD'), 'EUR').should == false
|
70
|
-
@bank.send(:same_currency?, 'USD', Money::Currency.wrap('EUR')).should == false
|
71
|
-
@bank.send(:same_currency?, Money::Currency.wrap('USD'), Money::Currency.wrap('EUR')).should == false
|
72
|
-
end
|
73
|
-
|
74
|
-
it 'should raise an UnknownCurrency exception when an unknown currency is passed' do
|
75
|
-
lambda{@bank.send(:same_currency?, 'AAA', 'BBB')}.should raise_exception(Money::Currency::UnknownCurrency)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
@@ -1,311 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "json"
|
3
|
-
require "yaml"
|
4
|
-
|
5
|
-
describe Money::Bank::VariableExchange do
|
6
|
-
|
7
|
-
describe '#new without block' do
|
8
|
-
before :each do
|
9
|
-
@bank = Money::Bank::VariableExchange.new
|
10
|
-
end
|
11
|
-
|
12
|
-
describe '#exchange' do
|
13
|
-
before :each do
|
14
|
-
@bank.send(:set_rate, 'USD', 'EUR', 1.33)
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'should accept str/str' do
|
18
|
-
lambda{@bank.exchange(100, 'USD', 'EUR')}.should_not raise_exception
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'should accept currency/str' do
|
22
|
-
lambda{@bank.exchange(100, Money::Currency.wrap('USD'), 'EUR')}.should_not raise_exception
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'should accept str/currency' do
|
26
|
-
lambda{@bank.exchange(100, 'USD', Money::Currency.wrap('EUR'))}.should_not raise_exception
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'should accept currency/currency' do
|
30
|
-
lambda{@bank.exchange(100, Money::Currency.wrap('USD'), Money::Currency.wrap('EUR'))}.should_not raise_exception
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'should exchange one currency to another' do
|
34
|
-
@bank.exchange(100, 'USD', 'EUR').should == 133
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'should truncate extra digits' do
|
38
|
-
@bank.exchange(10, 'USD', 'EUR').should == 13
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'should raise an UnknownCurrency exception when an unknown currency is requested' do
|
42
|
-
lambda{@bank.exchange(100, 'AAA', 'BBB')}.should raise_exception(Money::Currency::UnknownCurrency)
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'should raise an UnknownRate exception when an unknown rate is requested' do
|
46
|
-
lambda{@bank.exchange(100, 'USD', 'JPY')}.should raise_exception(Money::Bank::UnknownRate)
|
47
|
-
end
|
48
|
-
|
49
|
-
it 'should round the exchanged result down' do
|
50
|
-
@bank.add_rate("USD", "EUR", 0.788332676)
|
51
|
-
@bank.add_rate("EUR", "YEN", 122.631477)
|
52
|
-
@bank.exchange(10_00, "USD", "EUR").should == 788
|
53
|
-
@bank.exchange(500_00, "EUR", "YEN").should == 6131573
|
54
|
-
end
|
55
|
-
|
56
|
-
it 'should accept a custom truncation method' do
|
57
|
-
proc = Proc.new { |n| n.ceil }
|
58
|
-
@bank.exchange(10, 'USD', 'EUR', &proc).should == 14
|
59
|
-
end
|
60
|
-
|
61
|
-
|
62
|
-
context 'sterling to euros using a rate of 1.39' do
|
63
|
-
it 'returns the correct amount' do
|
64
|
-
@bank.add_rate('GBP', 'EUR', 1.38)
|
65
|
-
@bank.exchange(10000, 'GBP', 'EUR').should == 13800
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
context 'dollars to euros using a rate of 0.86' do
|
70
|
-
it 'returns the correct amount' do
|
71
|
-
@bank.add_rate('USD', 'EUR', 0.86)
|
72
|
-
@bank.exchange(10000, 'USD', 'EUR').should == 8600
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
context 'TND to USD using a rate of 0.67138' do
|
77
|
-
it 'returns the correct amount' do
|
78
|
-
@bank.add_rate('TND', 'USD', 0.67138)
|
79
|
-
@bank.exchange(1000, 'TND', 'USD').should == 67
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
context 'USD to TND using a rate of 1.32862' do
|
84
|
-
it 'returns the correct amount' do
|
85
|
-
@bank.add_rate('USD', 'TND', 1.32862)
|
86
|
-
@bank.exchange(1000, 'USD', 'TND').should == 13286
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
describe '#exchange_with' do
|
92
|
-
before :each do
|
93
|
-
@bank.send(:set_rate, 'USD', 'EUR', 1.33)
|
94
|
-
end
|
95
|
-
|
96
|
-
it 'should accept str' do
|
97
|
-
lambda{@bank.exchange_with(Money.new(100, 'USD'), 'EUR')}.should_not raise_exception
|
98
|
-
end
|
99
|
-
|
100
|
-
it 'should accept currency' do
|
101
|
-
lambda{@bank.exchange_with(Money.new(100, 'USD'), Money::Currency.wrap('EUR'))}.should_not raise_exception
|
102
|
-
end
|
103
|
-
|
104
|
-
it 'should exchange one currency to another' do
|
105
|
-
@bank.exchange_with(Money.new(100, 'USD'), 'EUR').should == Money.new(133, 'EUR')
|
106
|
-
end
|
107
|
-
|
108
|
-
it 'should truncate extra digits' do
|
109
|
-
@bank.exchange_with(Money.new(10, 'USD'), 'EUR').should == Money.new(13, 'EUR')
|
110
|
-
end
|
111
|
-
|
112
|
-
it 'should raise an UnknownCurrency exception when an unknown currency is requested' do
|
113
|
-
lambda{@bank.exchange_with(Money.new(100, 'USD'), 'BBB')}.should raise_exception(Money::Currency::UnknownCurrency)
|
114
|
-
end
|
115
|
-
|
116
|
-
it 'should raise an UnknownRate exception when an unknown rate is requested' do
|
117
|
-
lambda{@bank.exchange_with(Money.new(100, 'USD'), 'JPY')}.should raise_exception(Money::Bank::UnknownRate)
|
118
|
-
end
|
119
|
-
|
120
|
-
#it 'should round the exchanged result down' do
|
121
|
-
# @bank.add_rate("USD", "EUR", 0.788332676)
|
122
|
-
# @bank.add_rate("EUR", "YEN", 122.631477)
|
123
|
-
# @bank.exchange_with(Money.new(10_00, "USD"), "EUR").should == Money.new(788, "EUR")
|
124
|
-
# @bank.exchange_with(Money.new(500_00, "EUR"), "YEN").should == Money.new(6131573, "YEN")
|
125
|
-
#end
|
126
|
-
|
127
|
-
it 'should accept a custom truncation method' do
|
128
|
-
proc = Proc.new { |n| n.ceil }
|
129
|
-
@bank.exchange_with(Money.new(10, 'USD'), 'EUR', &proc).should == Money.new(14, 'EUR')
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
describe "#add_rate" do
|
134
|
-
it "should add rates correctly" do
|
135
|
-
@bank.add_rate("USD", "EUR", 0.788332676)
|
136
|
-
@bank.add_rate("EUR", "YEN", 122.631477)
|
137
|
-
|
138
|
-
@bank.instance_variable_get(:@rates)['USD_TO_EUR'].should == 0.788332676
|
139
|
-
@bank.instance_variable_get(:@rates)['EUR_TO_JPY'].should == 122.631477
|
140
|
-
end
|
141
|
-
|
142
|
-
it "should treat currency names case-insensitively" do
|
143
|
-
@bank.add_rate("usd", "eur", 1)
|
144
|
-
@bank.instance_variable_get(:@rates)['USD_TO_EUR'].should == 1
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
describe '#set_rate' do
|
149
|
-
it 'should set a rate' do
|
150
|
-
@bank.set_rate('USD', 'EUR', 1.25)
|
151
|
-
@bank.instance_variable_get(:@rates)['USD_TO_EUR'].should == 1.25
|
152
|
-
end
|
153
|
-
|
154
|
-
it 'should raise an UnknownCurrency exception when an unknown currency is passed' do
|
155
|
-
lambda{ @bank.set_rate('AAA', 'BBB', 1.25) }.should raise_exception(Money::Currency::UnknownCurrency)
|
156
|
-
end
|
157
|
-
end
|
158
|
-
|
159
|
-
describe '#get_rate' do
|
160
|
-
it 'should return a rate' do
|
161
|
-
@bank.set_rate('USD', 'EUR', 1.25)
|
162
|
-
@bank.get_rate('USD', 'EUR').should == 1.25
|
163
|
-
end
|
164
|
-
|
165
|
-
it 'should raise an UnknownCurrency exception when an unknown currency is requested' do
|
166
|
-
lambda{ @bank.get_rate('AAA', 'BBB') }.should raise_exception(Money::Currency::UnknownCurrency)
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
|
-
describe '#export_rates' do
|
171
|
-
before :each do
|
172
|
-
@bank.set_rate('USD', 'EUR', 1.25)
|
173
|
-
@bank.set_rate('USD', 'JPY', 2.55)
|
174
|
-
end
|
175
|
-
|
176
|
-
describe 'with format == :json' do
|
177
|
-
it 'should return rates formatted as json' do
|
178
|
-
rates_as_json = '{"USD_TO_EUR":1.25,"USD_TO_JPY":2.55}'
|
179
|
-
@bank.export_rates(:json).should == rates_as_json
|
180
|
-
end
|
181
|
-
end
|
182
|
-
|
183
|
-
describe 'with format == :ruby' do
|
184
|
-
it 'should return rates formatted as ruby objects' do
|
185
|
-
rates = {"USD_TO_EUR"=>1.25,"USD_TO_JPY"=>2.55}
|
186
|
-
@bank.export_rates(:ruby).should == Marshal.dump(rates)
|
187
|
-
end
|
188
|
-
end
|
189
|
-
|
190
|
-
describe 'with format == :yaml' do
|
191
|
-
it 'should return rates formatted as yaml' do
|
192
|
-
rates_as_yaml = "--- \nUSD_TO_EUR: 1.25\nUSD_TO_JPY: 2.55\n"
|
193
|
-
@bank.export_rates(:yaml).should == rates_as_yaml
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
describe 'with unknown format' do
|
198
|
-
it 'should raise `UnknownRateFormat`' do
|
199
|
-
lambda{@bank.export_rates(:foo)}.should raise_error Money::Bank::UnknownRateFormat
|
200
|
-
end
|
201
|
-
end
|
202
|
-
|
203
|
-
describe 'with :file provided' do
|
204
|
-
it 'should write rates to file' do
|
205
|
-
f = mock('IO')
|
206
|
-
File.should_receive(:open).with('null', 'w').and_return(f)
|
207
|
-
f.should_receive(:write).with('{"USD_TO_EUR":1.25,"USD_TO_JPY":2.55}')
|
208
|
-
|
209
|
-
@bank.export_rates(:json, 'null')
|
210
|
-
end
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
|
-
describe '#import_rates' do
|
215
|
-
describe 'with format == :json' do
|
216
|
-
it 'should load the rates provided' do
|
217
|
-
s = '{"USD_TO_EUR":1.25,"USD_TO_JPY":2.55}'
|
218
|
-
@bank.import_rates(:json, s)
|
219
|
-
@bank.get_rate('USD', 'EUR').should == 1.25
|
220
|
-
@bank.get_rate('USD', 'JPY').should == 2.55
|
221
|
-
end
|
222
|
-
end
|
223
|
-
|
224
|
-
describe 'with format == :ruby' do
|
225
|
-
it 'should load the rates provided' do
|
226
|
-
s = Marshal.dump({"USD_TO_EUR"=>1.25,"USD_TO_JPY"=>2.55})
|
227
|
-
@bank.import_rates(:ruby, s)
|
228
|
-
@bank.get_rate('USD', 'EUR').should == 1.25
|
229
|
-
@bank.get_rate('USD', 'JPY').should == 2.55
|
230
|
-
end
|
231
|
-
end
|
232
|
-
|
233
|
-
describe 'with format == :yaml' do
|
234
|
-
it 'should load the rates provided' do
|
235
|
-
s = "--- \nUSD_TO_EUR: 1.25\nUSD_TO_JPY: 2.55\n"
|
236
|
-
@bank.import_rates(:yaml, s)
|
237
|
-
@bank.get_rate('USD', 'EUR').should == 1.25
|
238
|
-
@bank.get_rate('USD', 'JPY').should == 2.55
|
239
|
-
end
|
240
|
-
end
|
241
|
-
|
242
|
-
describe 'with unknown format' do
|
243
|
-
it 'should raise `UnknownRateFormat`' do
|
244
|
-
lambda{@bank.import_rates(:foo, "")}.should raise_error Money::Bank::UnknownRateFormat
|
245
|
-
end
|
246
|
-
end
|
247
|
-
end
|
248
|
-
|
249
|
-
describe '#rate_key_for' do
|
250
|
-
it 'should accept str/str' do
|
251
|
-
lambda{@bank.send(:rate_key_for, 'USD', 'EUR')}.should_not raise_exception
|
252
|
-
end
|
253
|
-
|
254
|
-
it 'should accept currency/str' do
|
255
|
-
lambda{@bank.send(:rate_key_for, Money::Currency.wrap('USD'), 'EUR')}.should_not raise_exception
|
256
|
-
end
|
257
|
-
|
258
|
-
it 'should accept str/currency' do
|
259
|
-
lambda{@bank.send(:rate_key_for, 'USD', Money::Currency.wrap('EUR'))}.should_not raise_exception
|
260
|
-
end
|
261
|
-
|
262
|
-
it 'should accept currency/currency' do
|
263
|
-
lambda{@bank.send(:rate_key_for, Money::Currency.wrap('USD'), Money::Currency.wrap('EUR'))}.should_not raise_exception
|
264
|
-
end
|
265
|
-
|
266
|
-
it 'should return a hashkey based on the passed arguments' do
|
267
|
-
@bank.send(:rate_key_for, 'USD', 'EUR').should == 'USD_TO_EUR'
|
268
|
-
@bank.send(:rate_key_for, Money::Currency.wrap('USD'), 'EUR').should == 'USD_TO_EUR'
|
269
|
-
@bank.send(:rate_key_for, 'USD', Money::Currency.wrap('EUR')).should == 'USD_TO_EUR'
|
270
|
-
@bank.send(:rate_key_for, Money::Currency.wrap('USD'), Money::Currency.wrap('EUR')).should == 'USD_TO_EUR'
|
271
|
-
end
|
272
|
-
|
273
|
-
it 'should raise an UnknownCurrency exception when an unknown currency is passed' do
|
274
|
-
lambda{@bank.send(:rate_key_for, 'AAA', 'BBB')}.should raise_exception(Money::Currency::UnknownCurrency)
|
275
|
-
end
|
276
|
-
end
|
277
|
-
|
278
|
-
end
|
279
|
-
|
280
|
-
|
281
|
-
describe '#new with &block' do
|
282
|
-
before :each do
|
283
|
-
proc = Proc.new { |n| n.ceil }
|
284
|
-
@bank = Money::Bank::VariableExchange.new(&proc)
|
285
|
-
@bank.add_rate('USD', 'EUR', 1.33)
|
286
|
-
end
|
287
|
-
|
288
|
-
describe '#exchange' do
|
289
|
-
it 'should use a stored truncation method' do
|
290
|
-
@bank.exchange(10, 'USD', 'EUR').should == 14
|
291
|
-
end
|
292
|
-
|
293
|
-
it 'should use a custom truncation method over a stored one' do
|
294
|
-
proc = Proc.new { |n| n.ceil + 1 }
|
295
|
-
@bank.exchange(10, 'USD', 'EUR', &proc).should == 15
|
296
|
-
end
|
297
|
-
end
|
298
|
-
|
299
|
-
describe '#exchange_with' do
|
300
|
-
it 'should use a stored truncation method' do
|
301
|
-
@bank.exchange_with(Money.new(10, 'USD'), 'EUR').should == Money.new(14, 'EUR')
|
302
|
-
end
|
303
|
-
|
304
|
-
it 'should use a custom truncation method over a stored one' do
|
305
|
-
proc = Proc.new { |n| n.ceil + 1 }
|
306
|
-
@bank.exchange_with(Money.new(10, 'USD'), 'EUR', &proc).should == Money.new(15, 'EUR')
|
307
|
-
end
|
308
|
-
end
|
309
|
-
end
|
310
|
-
|
311
|
-
end
|