money 2.0.0 → 2.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/Rakefile +1 -1
- data/lib/money/core_extensions.rb +2 -2
- data/lib/money/money.rb +39 -21
- data/money.gemspec +2 -2
- data/test/core_extensions_spec.rb +31 -28
- data/test/exchange_bank_spec.rb +40 -40
- data/test/money_spec.rb +169 -116
- metadata +4 -3
data/Rakefile
CHANGED
@@ -24,10 +24,10 @@ class String
|
|
24
24
|
currency = matches[0] ? matches[0][0] : Money.default_currency
|
25
25
|
|
26
26
|
# Get the cents amount
|
27
|
-
|
27
|
+
sans_spaces = gsub(/\s+/, '')
|
28
|
+
matches = sans_spaces.scan /(\-?\d+(?:[\.,]\d+)?)/
|
28
29
|
cents = if matches[0]
|
29
30
|
value = matches[0][0].gsub(/,/, '.')
|
30
|
-
value.gsub!(/ +/, '')
|
31
31
|
value.to_f * 100
|
32
32
|
else
|
33
33
|
0
|
data/lib/money/money.rb
CHANGED
@@ -127,46 +127,64 @@ class Money
|
|
127
127
|
end
|
128
128
|
|
129
129
|
|
130
|
-
# Format the price according to several rules
|
131
|
-
#
|
130
|
+
# Format the price according to several rules. The following options are
|
131
|
+
# supported: :display_free, :with_currency, :no_cents, :symbol and :html
|
132
|
+
#
|
133
|
+
# display_free:
|
134
|
+
#
|
135
|
+
# Money.us_dollar(0).format(:display_free => true) => "free"
|
136
|
+
# Money.us_dollar(0).format(:display_free => "gratis") => "gratis"
|
137
|
+
# Money.us_dollar(0).format => "$0.00"
|
132
138
|
#
|
133
139
|
# with_currency:
|
134
140
|
#
|
135
|
-
# Money.ca_dollar(0).format => "free"
|
136
141
|
# Money.ca_dollar(100).format => "$1.00"
|
137
|
-
# Money.ca_dollar(100).format(:with_currency) => "$1.00 CAD"
|
138
|
-
# Money.us_dollar(85).format(:with_currency) => "$0.85 USD"
|
142
|
+
# Money.ca_dollar(100).format(:with_currency => true) => "$1.00 CAD"
|
143
|
+
# Money.us_dollar(85).format(:with_currency => true) => "$0.85 USD"
|
139
144
|
#
|
140
145
|
# no_cents:
|
141
146
|
#
|
142
|
-
# Money.ca_dollar(100).format(:no_cents) => "$1"
|
143
|
-
# Money.ca_dollar(599).format(:no_cents) => "$5"
|
147
|
+
# Money.ca_dollar(100).format(:no_cents => true) => "$1"
|
148
|
+
# Money.ca_dollar(599).format(:no_cents => true) => "$5"
|
144
149
|
#
|
145
|
-
# Money.ca_dollar(570).format(:no_cents, :with_currency) => "$5 CAD"
|
146
|
-
# Money.ca_dollar(39000).format(:no_cents) => "$390"
|
150
|
+
# Money.ca_dollar(570).format(:no_cents => true, :with_currency => true) => "$5 CAD"
|
151
|
+
# Money.ca_dollar(39000).format(:no_cents => true) => "$390"
|
152
|
+
#
|
153
|
+
# symbol:
|
154
|
+
#
|
155
|
+
# Money.new(100, :currency => "GBP").format(:symbol => "£") => "£1.00"
|
147
156
|
#
|
148
157
|
# html:
|
149
158
|
#
|
150
|
-
# Money.ca_dollar(570).format(:html, :with_currency) => "$5.70 <span class=\"currency\">CAD</span>"
|
151
|
-
def format(
|
152
|
-
|
153
|
-
|
154
|
-
|
159
|
+
# Money.ca_dollar(570).format(:html => true, :with_currency => true) => "$5.70 <span class=\"currency\">CAD</span>"
|
160
|
+
def format(rules = {})
|
161
|
+
if cents == 0
|
162
|
+
if rules[:display_free].respond_to?(:to_str)
|
163
|
+
return rules[:display_free]
|
164
|
+
elsif rules[:display_free]
|
165
|
+
return "free"
|
166
|
+
end
|
167
|
+
end
|
155
168
|
|
156
|
-
|
157
|
-
|
169
|
+
symbol = rules[:symbol] ? rules[:symbol].empty? ? "$" : rules[:symbol] : "$"
|
170
|
+
|
171
|
+
if rules[:no_cents]
|
172
|
+
formatted = sprintf("#{symbol}%d", cents.to_f / 100)
|
158
173
|
else
|
159
|
-
formatted = sprintf("
|
174
|
+
formatted = sprintf("#{symbol}%.2f", cents.to_f / 100)
|
160
175
|
end
|
176
|
+
|
177
|
+
# Commify ("10000" => "10,000")
|
178
|
+
formatted.gsub!(/(\d)(?=\d{3}+(?:\.|$))(\d{3}\..*)?/,'\1,\2')
|
161
179
|
|
162
|
-
if rules
|
180
|
+
if rules[:with_currency]
|
163
181
|
formatted << " "
|
164
|
-
formatted << '<span class="currency">' if rules
|
182
|
+
formatted << '<span class="currency">' if rules[:html]
|
165
183
|
formatted << currency
|
166
|
-
formatted << '</span>' if rules
|
184
|
+
formatted << '</span>' if rules[:html]
|
167
185
|
end
|
168
186
|
formatted
|
169
|
-
end
|
187
|
+
end
|
170
188
|
|
171
189
|
# Money.ca_dollar(100).to_s => "1.00"
|
172
190
|
def to_s
|
data/money.gemspec
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "money"
|
3
|
-
s.version = "2.
|
3
|
+
s.version = "2.1.0"
|
4
4
|
s.summary = "Money and currency exchange support library"
|
5
5
|
s.email = "hongli@phusion.nl"
|
6
6
|
s.homepage = "http://money.rubyforge.org/"
|
7
7
|
s.description = "Money and currency exchange support library."
|
8
8
|
s.has_rdoc = true
|
9
9
|
s.rubyforge_project = "money"
|
10
|
-
s.authors = ["Tobias Luetke", "Hongli Lai"]
|
10
|
+
s.authors = ["Tobias Luetke", "Hongli Lai", "Jeremy McNevin"]
|
11
11
|
|
12
12
|
s.files = [
|
13
13
|
"README.rdoc", "MIT-LICENSE", "money.gemspec", "Rakefile",
|
@@ -2,32 +2,35 @@ $LOAD_PATH << File.expand_path(File.dirname(__FILE__) + "/../lib")
|
|
2
2
|
require 'money/core_extensions'
|
3
3
|
|
4
4
|
describe "Money core extensions" do
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
5
|
+
specify "Numberic#to_money works" do
|
6
|
+
money = 1234.to_money
|
7
|
+
money.cents.should == 1234_00
|
8
|
+
money.currency.should == Money.default_currency
|
9
|
+
|
10
|
+
money = 100.37.to_money
|
11
|
+
money.cents.should == 100_37
|
12
|
+
money.currency.should == Money.default_currency
|
13
|
+
end
|
14
|
+
|
15
|
+
specify "String#to_money works" do
|
16
|
+
"100".to_money.should == Money.new(100_00)
|
17
|
+
"100.37".to_money.should == Money.new(100_37)
|
18
|
+
"100,37".to_money.should == Money.new(100_37)
|
19
|
+
"100 000".to_money.should == Money.new(100_000_00)
|
20
|
+
|
21
|
+
"100 USD".to_money.should == Money.new(100_00, "USD")
|
22
|
+
"-100 USD".to_money.should == Money.new(-100_00, "USD")
|
23
|
+
"100 EUR".to_money.should == Money.new(100_00, "EUR")
|
24
|
+
"100.37 EUR".to_money.should == Money.new(100_37, "EUR")
|
25
|
+
"100,37 EUR".to_money.should == Money.new(100_37, "EUR")
|
26
|
+
|
27
|
+
"USD 100".to_money.should == Money.new(100_00, "USD")
|
28
|
+
"EUR 100".to_money.should == Money.new(100_00, "EUR")
|
29
|
+
"EUR 100.37".to_money.should == Money.new(100_37, "EUR")
|
30
|
+
"CAD -100.37".to_money.should == Money.new(-100_37, "CAD")
|
31
|
+
"EUR 100,37".to_money.should == Money.new(100_37, "EUR")
|
32
|
+
"EUR -100,37".to_money.should == Money.new(-100_37, "EUR")
|
33
|
+
|
34
|
+
"$100 USD".to_money.should == Money.new(100_00, "USD")
|
35
|
+
end
|
33
36
|
end
|
data/test/exchange_bank_spec.rb
CHANGED
@@ -2,44 +2,44 @@ $LOAD_PATH << File.expand_path(File.dirname(__FILE__) + "/../lib")
|
|
2
2
|
require 'money/variable_exchange_bank'
|
3
3
|
|
4
4
|
describe Money::VariableExchangeBank do
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
5
|
+
before :each do
|
6
|
+
@bank = Money::VariableExchangeBank.new
|
7
|
+
end
|
8
|
+
|
9
|
+
it "returns the previously specified conversion rate" do
|
10
|
+
@bank.add_rate("USD", "EUR", 0.788332676)
|
11
|
+
@bank.add_rate("EUR", "YEN", 122.631477)
|
12
|
+
@bank.get_rate("USD", "EUR").should == 0.788332676
|
13
|
+
@bank.get_rate("EUR", "YEN").should == 122.631477
|
14
|
+
end
|
15
|
+
|
16
|
+
it "treats currency names case-insensitively" do
|
17
|
+
@bank.add_rate("usd", "eur", 1)
|
18
|
+
@bank.get_rate("USD", "EUR").should == 1
|
19
|
+
@bank.same_currency?("USD", "usd").should be_true
|
20
|
+
@bank.same_currency?("EUR", "usd").should be_false
|
21
|
+
end
|
22
|
+
|
23
|
+
it "returns nil if the conversion rate is unknown" do
|
24
|
+
@bank.get_rate("American Pesos", "EUR").should be_nil
|
25
|
+
end
|
26
|
+
|
27
|
+
it "exchanges money from one currency to another according to the specified conversion rates" do
|
28
|
+
@bank.add_rate("USD", "EUR", 0.5)
|
29
|
+
@bank.add_rate("EUR", "YEN", 10)
|
30
|
+
@bank.exchange(10_00, "USD", "EUR").should == 5_00
|
31
|
+
@bank.exchange(500_00, "EUR", "YEN").should == 5000_00
|
32
|
+
end
|
33
|
+
|
34
|
+
it "rounds the exchanged result down" do
|
35
|
+
@bank.add_rate("USD", "EUR", 0.788332676)
|
36
|
+
@bank.add_rate("EUR", "YEN", 122.631477)
|
37
|
+
@bank.exchange(10_00, "USD", "EUR").should == 788
|
38
|
+
@bank.exchange(500_00, "EUR", "YEN").should == 6131573
|
39
|
+
end
|
40
|
+
|
41
|
+
it "raises Money::UnknownRate upon conversion if the conversion rate is unknown" do
|
42
|
+
block = lambda { @bank.exchange(10, "USD", "EUR") }
|
43
|
+
block.should raise_error(Money::UnknownRate)
|
44
|
+
end
|
45
45
|
end
|
data/test/money_spec.rb
CHANGED
@@ -1,124 +1,177 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
$LOAD_PATH << File.expand_path(File.dirname(__FILE__) + "/../lib")
|
2
3
|
require 'money/money'
|
3
4
|
|
4
5
|
describe Money do
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
6
|
+
it "is associated to the singleton instance of VariableExchangeBank by default" do
|
7
|
+
Money.new(0).bank.object_id.should == Money::VariableExchangeBank.instance.object_id
|
8
|
+
end
|
9
|
+
|
10
|
+
specify "#cents returns the amount of cents passed to the constructor" do
|
11
|
+
Money.new(200_00, "USD").cents.should == 200_00
|
12
|
+
end
|
13
|
+
|
14
|
+
it "rounds the given cents to an integer" do
|
15
|
+
Money.new(1.00, "USD").cents.should == 1
|
16
|
+
Money.new(1.01, "USD").cents.should == 1
|
17
|
+
Money.new(1.50, "USD").cents.should == 2
|
18
|
+
end
|
19
|
+
|
20
|
+
specify "#currency returns the currency passed to the constructor" do
|
21
|
+
Money.new(200_00, "USD").currency.should == "USD"
|
22
|
+
end
|
23
|
+
|
24
|
+
specify "#zero? returns whether the amount is 0" do
|
25
|
+
Money.new(0, "USD").should be_zero
|
26
|
+
Money.new(0, "EUR").should be_zero
|
27
|
+
Money.new(1, "USD").should_not be_zero
|
28
|
+
Money.new(10, "YEN").should_not be_zero
|
29
|
+
Money.new(-1, "EUR").should_not be_zero
|
30
|
+
end
|
31
|
+
|
32
|
+
specify "#exchange_to exchanges the amount via its exchange bank" do
|
33
|
+
money = Money.new(100_00, "USD")
|
34
|
+
money.bank.should_receive(:exchange).with(100_00, "USD", "EUR").and_return(200_00)
|
35
|
+
money.exchange_to("EUR")
|
36
|
+
end
|
37
|
+
|
38
|
+
specify "#exchange_to exchanges the amount properly" do
|
39
|
+
money = Money.new(100_00, "USD")
|
40
|
+
money.bank.should_receive(:exchange).with(100_00, "USD", "EUR").and_return(200_00)
|
41
|
+
money.exchange_to("EUR").should == Money.new(200_00, "EUR")
|
42
|
+
end
|
43
|
+
|
44
|
+
specify "#== returns true if and only if their amount and currency are equal" do
|
45
|
+
Money.new(1_00, "USD").should == Money.new(1_00, "USD")
|
46
|
+
Money.new(1_00, "USD").should_not == Money.new(1_00, "EUR")
|
47
|
+
Money.new(1_00, "USD").should_not == Money.new(2_00, "USD")
|
48
|
+
Money.new(1_00, "USD").should_not == Money.new(99_00, "EUR")
|
49
|
+
end
|
50
|
+
|
51
|
+
specify "#* multiplies the money's amount by the multiplier while retaining the currency" do
|
52
|
+
(Money.new(1_00, "USD") * 10).should == Money.new(10_00, "USD")
|
53
|
+
end
|
54
|
+
|
55
|
+
specify "#* divides the money's amount by the divisor while retaining the currency" do
|
56
|
+
(Money.new(10_00, "USD") / 10).should == Money.new(1_00, "USD")
|
57
|
+
end
|
58
|
+
|
59
|
+
specify "Money.empty creates a new Money object of 0 cents" do
|
60
|
+
Money.empty.should == Money.new(0)
|
61
|
+
end
|
62
|
+
|
63
|
+
specify "Money.ca_dollar creates a new Money object of the given value in CAD" do
|
64
|
+
Money.ca_dollar(50).should == Money.new(50, "CAD")
|
65
|
+
end
|
66
|
+
|
67
|
+
specify "Money.ca_dollar creates a new Money object of the given value in USD" do
|
68
|
+
Money.us_dollar(50).should == Money.new(50, "USD")
|
69
|
+
end
|
70
|
+
|
71
|
+
specify "Money.ca_dollar creates a new Money object of the given value in EUR" do
|
72
|
+
Money.euro(50).should == Money.new(50, "EUR")
|
73
|
+
end
|
74
|
+
|
75
|
+
specify "Money.add_rate works" do
|
76
|
+
Money.add_rate("EUR", "USD", 10)
|
77
|
+
Money.new(10_00, "EUR").exchange_to("USD").should == Money.new(100_00, "USD")
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "#format" do
|
81
|
+
it "returns the monetary value as a string" do
|
82
|
+
Money.ca_dollar(100).format.should == "$1.00"
|
83
|
+
end
|
84
|
+
|
85
|
+
describe "if the monetary value is 0" do
|
86
|
+
before :each do
|
87
|
+
@money = Money.us_dollar(0)
|
88
|
+
end
|
89
|
+
|
90
|
+
it "returns 'free' when :display_free is true" do
|
91
|
+
@money.format(:display_free => true).should == 'free'
|
92
|
+
end
|
93
|
+
|
94
|
+
it "returns '$0.00' when :display_free is false or not given" do
|
95
|
+
@money.format.should == '$0.00'
|
96
|
+
@money.format(:display_free => false).should == '$0.00'
|
97
|
+
@money.format(:display_free => nil).should == '$0.00'
|
98
|
+
end
|
99
|
+
|
100
|
+
it "returns the value specified by :display_free if it's a string-like object" do
|
101
|
+
@money.format(:display_free => 'gratis').should == 'gratis'
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
specify "#format(:with_currency => true) works as documented" do
|
106
|
+
Money.ca_dollar(100).format(:with_currency => true).should == "$1.00 CAD"
|
107
|
+
Money.us_dollar(85).format(:with_currency => true).should == "$0.85 USD"
|
108
|
+
end
|
109
|
+
|
110
|
+
specify "#format(:no_cents => true) works as documented" do
|
111
|
+
Money.ca_dollar(100).format(:no_cents => true).should == "$1"
|
112
|
+
Money.ca_dollar(599).format(:no_cents => true).should == "$5"
|
113
|
+
Money.ca_dollar(570).format(:no_cents => true, :with_currency => true).should == "$5 CAD"
|
114
|
+
Money.ca_dollar(39000).format(:no_cents => true).should == "$390"
|
115
|
+
end
|
116
|
+
|
117
|
+
specify "#format(:symbol => ...) works as documented" do
|
118
|
+
Money.new(100, :currency => "GBP").format(:symbol => "£").should == "£1.00"
|
119
|
+
end
|
120
|
+
|
121
|
+
specify "#format(:html => true) works as documented" do
|
122
|
+
string = Money.ca_dollar(570).format(:html => true, :with_currency => true)
|
123
|
+
string.should == "$5.70 <span class=\"currency\">CAD</span>"
|
124
|
+
end
|
125
|
+
|
126
|
+
it "should insert commas into the result if the amount is sufficiently large" do
|
127
|
+
Money.us_dollar(1_000_000_000_12).format.should == "$1,000,000,000.12"
|
128
|
+
Money.us_dollar(1_000_000_000_12).format(:no_cents => true).should == "$1,000,000,000"
|
129
|
+
end
|
130
|
+
end
|
78
131
|
end
|
79
132
|
|
80
133
|
describe "Actions involving two Money objects" do
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
134
|
+
describe "if the other Money object has the same currency" do
|
135
|
+
specify "#<=> compares the two objects' amounts" do
|
136
|
+
(Money.new(1_00, "USD") <=> Money.new(1_00, "USD")).should == 0
|
137
|
+
(Money.new(1_00, "USD") <=> Money.new(99, "USD")).should > 0
|
138
|
+
(Money.new(1_00, "USD") <=> Money.new(2_00, "USD")).should < 0
|
139
|
+
end
|
140
|
+
|
141
|
+
specify "#+ adds the other object's amount to the current object's amount while retaining the currency" do
|
142
|
+
(Money.new(10_00, "USD") + Money.new(90, "USD")).should == Money.new(10_90, "USD")
|
143
|
+
end
|
144
|
+
|
145
|
+
specify "#- substracts the other object's amount from the current object's amount while retaining the currency" do
|
146
|
+
(Money.new(10_00, "USD") - Money.new(90, "USD")).should == Money.new(9_10, "USD")
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
describe "if the other Money object has a different currency" do
|
151
|
+
specify "#<=> compares the two objects' amount after converting the other object's amount to its own currency" do
|
152
|
+
target = Money.new(200_00, "EUR")
|
153
|
+
target.should_receive(:exchange_to).with("USD").and_return(Money.new(300_00, "USD"))
|
154
|
+
(Money.new(100_00, "USD") <=> target).should < 0
|
155
|
+
|
156
|
+
target = Money.new(200_00, "EUR")
|
157
|
+
target.should_receive(:exchange_to).with("USD").and_return(Money.new(100_00, "USD"))
|
158
|
+
(Money.new(100_00, "USD") <=> target).should == 0
|
159
|
+
|
160
|
+
target = Money.new(200_00, "EUR")
|
161
|
+
target.should_receive(:exchange_to).with("USD").and_return(Money.new(99_00, "USD"))
|
162
|
+
(Money.new(100_00, "USD") <=> target).should > 0
|
163
|
+
end
|
164
|
+
|
165
|
+
specify "#+ adds the other object's amount, converted to this object's currency, to this object's amount while retaining its currency" do
|
166
|
+
other = Money.new(90, "EUR")
|
167
|
+
other.should_receive(:exchange_to).with("USD").and_return(Money.new(9_00, "USD"))
|
168
|
+
(Money.new(10_00, "USD") + other).should == Money.new(19_00, "USD")
|
169
|
+
end
|
170
|
+
|
171
|
+
specify "#- substracts the other object's amount, converted to this object's currency, from this object's amount while retaining its currency" do
|
172
|
+
other = Money.new(90, "EUR")
|
173
|
+
other.should_receive(:exchange_to).with("USD").and_return(Money.new(9_00, "USD"))
|
174
|
+
(Money.new(10_00, "USD") - other).should == Money.new(1_00, "USD")
|
175
|
+
end
|
176
|
+
end
|
124
177
|
end
|
metadata
CHANGED
@@ -1,16 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: money
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tobias Luetke
|
8
8
|
- Hongli Lai
|
9
|
+
- Jeremy McNevin
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
13
|
|
13
|
-
date:
|
14
|
+
date: 2009-02-15 00:00:00 +01:00
|
14
15
|
default_executable:
|
15
16
|
dependencies: []
|
16
17
|
|
@@ -57,7 +58,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
57
58
|
requirements: []
|
58
59
|
|
59
60
|
rubyforge_project: money
|
60
|
-
rubygems_version: 1.
|
61
|
+
rubygems_version: 1.3.1
|
61
62
|
signing_key:
|
62
63
|
specification_version: 2
|
63
64
|
summary: Money and currency exchange support library
|