money 3.6.1 → 3.6.2

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.
@@ -1,142 +1,158 @@
1
- require "spec_helper"
2
-
3
- describe "Money core extensions" do
4
-
5
- describe Numeric do
6
- describe "#to_money" do
7
- it "should work" do
8
- money = 1234.to_money
9
- money.cents.should == 1234_00
10
- money.currency.should == Money.default_currency
11
-
12
- money = 100.37.to_money
13
- money.cents.should == 100_37
14
- money.currency.should == Money.default_currency
15
-
16
- money = BigDecimal.new('1234').to_money
17
- money.cents.should == 1234_00
18
- money.currency.should == Money.default_currency
19
- end
20
-
21
- it "should accept optional currency" do
22
- 1234.to_money('USD').should == Money.new(123400, 'USD')
23
- 1234.to_money('EUR').should == Money.new(123400, 'EUR')
24
- end
25
-
26
- it "should respect :subunit_to_unit currency property" do
27
- 10.to_money('USD').should == Money.new(10_00, 'USD')
28
- 10.to_money('TND').should == Money.new(10_000, 'TND')
29
- 10.to_money('CLP').should == Money.new(10, 'CLP')
30
- end
31
-
32
- specify "#issue/15" do
33
- amount = 555.55.to_money
34
- amount.should == Money.new(55555)
35
- end
36
- end
37
- end
38
-
39
- describe String do
40
- describe "#to_money" do
41
-
42
- StringToMoney = {
43
- "20.15" => Money.new(20_15) ,
44
- "100" => Money.new(100_00) ,
45
- "100.37" => Money.new(100_37) ,
46
- "100,37" => Money.new(100_37) ,
47
- "100 000" => Money.new(100_000_00) ,
48
- "100,000.00" => Money.new(100_000_00) ,
49
- "1,000" => Money.new(1_000_00) ,
50
- "-1,000" => Money.new(-1_000_00) ,
51
- "1,000.5" => Money.new(1_000_50) ,
52
- "1,000.51" => Money.new(1_000_51) ,
53
- "1,000.505" => Money.new(1_000_51) ,
54
- "1,000.504" => Money.new(1_000_50) ,
55
- "1,000.0000" => Money.new(1_000_00) ,
56
- "1,000.5000" => Money.new(1_000_50) ,
57
- "1,000.5099" => Money.new(1_000_51) ,
58
- "1.550" => Money.new(1_55) ,
59
- "25." => Money.new(25_00) ,
60
- ".75" => Money.new(75) ,
61
-
62
- "100 USD" => Money.new(100_00, "USD") ,
63
- "-100 USD" => Money.new(-100_00, "USD") ,
64
- "100 EUR" => Money.new(100_00, "EUR") ,
65
- "100.37 EUR" => Money.new(100_37, "EUR") ,
66
- "100,37 EUR" => Money.new(100_37, "EUR") ,
67
- "100,000.00 USD" => Money.new(100_000_00, "USD") ,
68
- "100.000,00 EUR" => Money.new(100_000_00, "EUR") ,
69
- "1,000 USD" => Money.new(1_000_00, "USD") ,
70
- "-1,000 USD" => Money.new(-1_000_00, "USD") ,
71
- "1,000.5500 USD" => Money.new(1_000_55, "USD") ,
72
- "-1,000.6500 USD" => Money.new(-1_000_65, "USD") ,
73
- "1.550 USD" => Money.new(1_55, "USD") ,
74
-
75
- "USD 100" => Money.new(100_00, "USD") ,
76
- "EUR 100" => Money.new(100_00, "EUR") ,
77
- "EUR 100.37" => Money.new(100_37, "EUR") ,
78
- "CAD -100.37" => Money.new(-100_37, "CAD") ,
79
- "EUR 100,37" => Money.new(100_37, "EUR") ,
80
- "EUR -100,37" => Money.new(-100_37, "EUR") ,
81
- "USD 100,000.00" => Money.new(100_000_00, "USD") ,
82
- "EUR 100.000,00" => Money.new(100_000_00, "EUR") ,
83
- "USD 1,000" => Money.new(1_000_00, "USD") ,
84
- "USD -1,000" => Money.new(-1_000_00, "USD") ,
85
- "USD 1,000.9000" => Money.new(1_000_90, "USD") ,
86
- "USD -1,000.090" => Money.new(-1_000_09, "USD") ,
87
- "USD 1.5500" => Money.new(1_55, "USD") ,
88
-
89
- "$100 USD" => Money.new(100_00, "USD") ,
90
- "$1,194.59 USD" => Money.new(1_194_59, "USD") ,
91
- "$-1,955 USD" => Money.new(-1_955_00, "USD") ,
92
- "$1,194.5900 USD" => Money.new(1_194_59, "USD") ,
93
- "$-1,955.000 USD" => Money.new(-1_955_00, "USD") ,
94
- "$1.99000 USD" => Money.new(1_99, "USD") ,
95
- }
96
-
97
- specify "it should work" do
98
- StringToMoney.each do |string, money|
99
- string.to_money.should == money
100
- end
101
- end
102
-
103
- it "should coerce input to string" do
104
- Money.parse(20, "USD").should == Money.new(20_00, "USD")
105
- end
106
-
107
- it "should accept optional currency" do
108
- "10.10".to_money('USD').should == Money.new(1010, 'USD')
109
- "10.10".to_money('EUR').should == Money.new(1010, 'EUR')
110
- "10.10 USD".to_money('USD').should == Money.new(1010, 'USD')
111
- end
112
-
113
- it "should raise error if optional currency doesn't match string currency" do
114
- lambda{ "10.10 USD".to_money('EUR') }.should raise_error(/Mismatching Currencies/)
115
- end
116
-
117
- it "should ignore unrecognized data" do
118
- "hello 2000 world".to_money.should == Money.new(2000_00)
119
- end
120
-
121
- it "should respect :subunit_to_unit currency property" do
122
- "1".to_money("USD").should == Money.new(1_00, "USD")
123
- "1".to_money("TND").should == Money.new(1_000, "TND")
124
- "1".to_money("CLP").should == Money.new(1, "CLP")
125
- "1.5".to_money("KWD").cents.should == 1500
126
- end
127
- end
128
-
129
- describe "#to_currency" do
130
- it "should convert string to Currency" do
131
- "USD".to_currency.should == Money::Currency.new(:usd)
132
- "EUR".to_currency.should == Money::Currency.new(:eur)
133
- end
134
-
135
- it "should raise Money::Currency::UnknownCurrency with unknown Currency" do
136
- lambda { "XXX".to_currency }.should raise_error(Money::Currency::UnknownCurrency)
137
- lambda { " ".to_currency }.should raise_error(Money::Currency::UnknownCurrency)
138
- end
139
- end
140
- end
141
-
142
- end
1
+ require "spec_helper"
2
+
3
+ describe "Money core extensions" do
4
+
5
+ describe Numeric do
6
+ describe "#to_money" do
7
+ it "should work" do
8
+ money = 1234.to_money
9
+ money.cents.should == 1234_00
10
+ money.currency.should == Money.default_currency
11
+
12
+ money = 100.37.to_money
13
+ money.cents.should == 100_37
14
+ money.currency.should == Money.default_currency
15
+
16
+ money = BigDecimal.new('1234').to_money
17
+ money.cents.should == 1234_00
18
+ money.currency.should == Money.default_currency
19
+ end
20
+
21
+ it "should accept optional currency" do
22
+ 1234.to_money('USD').should == Money.new(123400, 'USD')
23
+ 1234.to_money('EUR').should == Money.new(123400, 'EUR')
24
+ end
25
+
26
+ it "should respect :subunit_to_unit currency property" do
27
+ 10.to_money('USD').should == Money.new(10_00, 'USD')
28
+ 10.to_money('TND').should == Money.new(10_000, 'TND')
29
+ 10.to_money('CLP').should == Money.new(10, 'CLP')
30
+ end
31
+
32
+ specify "#issue/15" do
33
+ amount = 555.55.to_money
34
+ amount.should == Money.new(55555)
35
+ end
36
+ end
37
+ end
38
+
39
+ describe String do
40
+ describe "#to_money" do
41
+
42
+ StringToMoney = {
43
+ "20.15" => Money.new(20_15) ,
44
+ "100" => Money.new(100_00) ,
45
+ "100.37" => Money.new(100_37) ,
46
+ "100,37" => Money.new(100_37) ,
47
+ "100 000" => Money.new(100_000_00) ,
48
+ "100,000.00" => Money.new(100_000_00) ,
49
+ "1,000" => Money.new(1_000_00) ,
50
+ "-1,000" => Money.new(-1_000_00) ,
51
+ "1,000.5" => Money.new(1_000_50) ,
52
+ "1,000.51" => Money.new(1_000_51) ,
53
+ "1,000.505" => Money.new(1_000_51) ,
54
+ "1,000.504" => Money.new(1_000_50) ,
55
+ "1,000.0000" => Money.new(1_000_00) ,
56
+ "1,000.5000" => Money.new(1_000_50) ,
57
+ "1,000.5099" => Money.new(1_000_51) ,
58
+ "1.550" => Money.new(1_55) ,
59
+ "25." => Money.new(25_00) ,
60
+ ".75" => Money.new(75) ,
61
+
62
+ "100 USD" => Money.new(100_00, "USD") ,
63
+ "-100 USD" => Money.new(-100_00, "USD") ,
64
+ "100 EUR" => Money.new(100_00, "EUR") ,
65
+ "100.37 EUR" => Money.new(100_37, "EUR") ,
66
+ "100,37 EUR" => Money.new(100_37, "EUR") ,
67
+ "100,000.00 USD" => Money.new(100_000_00, "USD") ,
68
+ "100.000,00 EUR" => Money.new(100_000_00, "EUR") ,
69
+ "1,000 USD" => Money.new(1_000_00, "USD") ,
70
+ "-1,000 USD" => Money.new(-1_000_00, "USD") ,
71
+ "1,000.5500 USD" => Money.new(1_000_55, "USD") ,
72
+ "-1,000.6500 USD" => Money.new(-1_000_65, "USD") ,
73
+ "1.550 USD" => Money.new(1_55, "USD") ,
74
+
75
+ "USD 100" => Money.new(100_00, "USD") ,
76
+ "EUR 100" => Money.new(100_00, "EUR") ,
77
+ "EUR 100.37" => Money.new(100_37, "EUR") ,
78
+ "CAD -100.37" => Money.new(-100_37, "CAD") ,
79
+ "EUR 100,37" => Money.new(100_37, "EUR") ,
80
+ "EUR -100,37" => Money.new(-100_37, "EUR") ,
81
+ "USD 100,000.00" => Money.new(100_000_00, "USD") ,
82
+ "EUR 100.000,00" => Money.new(100_000_00, "EUR") ,
83
+ "USD 1,000" => Money.new(1_000_00, "USD") ,
84
+ "USD -1,000" => Money.new(-1_000_00, "USD") ,
85
+ "USD 1,000.9000" => Money.new(1_000_90, "USD") ,
86
+ "USD -1,000.090" => Money.new(-1_000_09, "USD") ,
87
+ "USD 1.5500" => Money.new(1_55, "USD") ,
88
+
89
+ "$100 USD" => Money.new(100_00, "USD") ,
90
+ "$1,194.59 USD" => Money.new(1_194_59, "USD") ,
91
+ "$-1,955 USD" => Money.new(-1_955_00, "USD") ,
92
+ "$1,194.5900 USD" => Money.new(1_194_59, "USD") ,
93
+ "$-1,955.000 USD" => Money.new(-1_955_00, "USD") ,
94
+ "$1.99000 USD" => Money.new(1_99, "USD") ,
95
+ }
96
+
97
+ specify "it should work" do
98
+ StringToMoney.each do |string, money|
99
+ string.to_money.should == money
100
+ end
101
+ end
102
+
103
+ it "should coerce input to string" do
104
+ Money.parse(20, "USD").should == Money.new(20_00, "USD")
105
+ end
106
+
107
+ it "should accept optional currency" do
108
+ "10.10".to_money('USD').should == Money.new(1010, 'USD')
109
+ "10.10".to_money('EUR').should == Money.new(1010, 'EUR')
110
+ "10.10 USD".to_money('USD').should == Money.new(1010, 'USD')
111
+ end
112
+
113
+ it "should raise error if optional currency doesn't match string currency" do
114
+ lambda{ "10.10 USD".to_money('EUR') }.should raise_error(/Mismatching Currencies/)
115
+ end
116
+
117
+ it "should ignore unrecognized data" do
118
+ "hello 2000 world".to_money.should == Money.new(2000_00)
119
+ end
120
+
121
+ it "should respect :subunit_to_unit currency property" do
122
+ "1".to_money("USD").should == Money.new(1_00, "USD")
123
+ "1".to_money("TND").should == Money.new(1_000, "TND")
124
+ "1".to_money("CLP").should == Money.new(1, "CLP")
125
+ "1.5".to_money("KWD").cents.should == 1500
126
+ end
127
+ end
128
+
129
+ describe "#to_currency" do
130
+ it "should convert string to Currency" do
131
+ "USD".to_currency.should == Money::Currency.new(:usd)
132
+ "EUR".to_currency.should == Money::Currency.new(:eur)
133
+ end
134
+
135
+ it "should raise Money::Currency::UnknownCurrency with unknown Currency" do
136
+ lambda { "XXX".to_currency }.should raise_error(Money::Currency::UnknownCurrency)
137
+ lambda { " ".to_currency }.should raise_error(Money::Currency::UnknownCurrency)
138
+ end
139
+ end
140
+ end
141
+
142
+ describe Symbol do
143
+ describe "#to_currency" do
144
+ it "should convert symbol to Currency" do
145
+ :usd.to_currency.should == Money::Currency.new(:usd)
146
+ :ars.to_currency.should == Money::Currency.new(:ars)
147
+ end
148
+ it "should work case-insensitive" do
149
+ :EUR.to_currency.should == Money::Currency.new(:eur)
150
+ end
151
+ it "should raise Money::Currency::UnknownCurrency with unknown Currency" do
152
+ lambda { :XXX.to_currency }.should raise_error(Money::Currency::UnknownCurrency)
153
+ lambda { :" ".to_currency }.should raise_error(Money::Currency::UnknownCurrency)
154
+ end
155
+ end
156
+ end
157
+
158
+ end
@@ -1,128 +1,133 @@
1
- # encoding: utf-8
2
-
3
- require "spec_helper"
4
-
5
- describe Money::Currency do
6
-
7
- specify "#initialize should lookup data from TABLE" do
8
- with_custom_definitions do
9
- Money::Currency::TABLE[:usd] = {:priority => 1, :iso_code => "USD", :name => "United States Dollar", :symbol => "$", :subunit => "Cent", :subunit_to_unit => 100, :decimal_mark => ".", :thousands_separator => ","}
10
- Money::Currency::TABLE[:eur] = {:priority => 2, :iso_code => "EUR", :name => "Euro", :symbol => "€", :subunit => "Cent", :subunit_to_unit => 100, :decimal_mark => ".", :thousands_separator => ","}
11
-
12
- currency = Money::Currency.new("USD")
13
- currency.id.should == :usd
14
- currency.priority.should == 1
15
- currency.iso_code.should == "USD"
16
- currency.name.should == "United States Dollar"
17
- currency.decimal_mark.should == "."
18
- currency.separator.should == "."
19
- currency.thousands_separator.should == ","
20
- currency.delimiter.should == ","
21
- end
22
- end
23
-
24
- specify "#initialize should raise UnknownMoney::Currency with unknown currency" do
25
- lambda { Money::Currency.new("xxx") }.should raise_error(Money::Currency::UnknownCurrency, /xxx/)
26
- end
27
-
28
- specify "#== should return true if self === other" do
29
- currency = Money::Currency.new(:eur)
30
- currency.should == currency
31
- end
32
-
33
- specify "#== should return true if the id is equal" do
34
- Money::Currency.new(:eur).should == Money::Currency.new(:eur)
35
- Money::Currency.new(:eur).should_not == Money::Currency.new(:usd)
36
- end
37
-
38
- specify "#eql? should return true if #== returns true" do
39
- Money::Currency.new(:eur).eql?(Money::Currency.new(:eur)).should be true
40
- Money::Currency.new(:eur).eql?(Money::Currency.new(:usd)).should be false
41
- end
42
-
43
- specify "#hash should return the same value for equal objects" do
44
- Money::Currency.new(:eur).hash.should == Money::Currency.new(:eur).hash
45
- Money::Currency.new(:eur).hash.should_not == Money::Currency.new(:usd).hash
46
- end
47
-
48
- specify "#hash can be used to return the intersection of Currency object arrays" do
49
- intersection = [Money::Currency.new(:eur), Money::Currency.new(:usd)] & [Money::Currency.new(:eur)]
50
- intersection.should == [Money::Currency.new(:eur)]
51
- end
52
-
53
- specify "#<=> should compare objects by priority" do
54
- Money::Currency.new(:cad).should > Money::Currency.new(:usd)
55
- Money::Currency.new(:usd).should < Money::Currency.new(:eur)
56
- end
57
-
58
- specify "#to_s" do
59
- Money::Currency.new(:usd).to_s.should == "USD"
60
- Money::Currency.new(:eur).to_s.should == "EUR"
61
- end
62
-
63
- specify "#inspect" do
64
- Money::Currency.new(:usd).inspect.should ==
65
- %Q{#<Money::Currency id: usd, priority: 1, symbol_first: true, thousands_separator: ,, html_entity: $, decimal_mark: ., name: United States Dollar, symbol: $, subunit_to_unit: 100, iso_code: USD, subunit: Cent>}
66
- end
67
-
68
-
69
- specify "#self.find should return currency matching given id" do
70
- with_custom_definitions do
71
- Money::Currency::TABLE[:usd] = { :priority => 1, :iso_code => "USD", :name => "United States Dollar", :symbol => "$", :subunit => "Cent", :subunit_to_unit => 100, :decimal_mark => ".", :thousands_separator => "," }
72
- Money::Currency::TABLE[:eur] = { :priority => 2, :iso_code => "EUR", :name => "Euro", :symbol => "€", :subunit => "Cent", :subunit_to_unit => 100, :decimal_mark => ".", :thousands_separator => "," }
73
-
74
- expected = Money::Currency.new(:eur)
75
- Money::Currency.find(:eur).should == expected
76
- Money::Currency.find(:EUR).should == expected
77
- Money::Currency.find("eur").should == expected
78
- Money::Currency.find("EUR").should == expected
79
- end
80
- end
81
-
82
- specify "#self.find should return nil unless currency matching given id" do
83
- with_custom_definitions do
84
- Money::Currency::TABLE[:usd] = { :position => 1, :iso_code => "USD", :name => "United States Dollar", :symbol => "$", :subunit => "Cent", :subunit_to_unit => 100, :decimal_mark => ".", :thousands_separator => "," }
85
- Money::Currency::TABLE[:eur] = { :position => 2, :iso_code => "EUR", :name => "Euro", :symbol => "€", :subunit => "Cent", :subunit_to_unit => 100, :decimal_mark => ".", :thousands_separator => "," }
86
-
87
- expected = Money::Currency.new(:eur)
88
- Money::Currency.find(:eur).should == expected
89
- Money::Currency.find(:EUR).should == expected
90
- Money::Currency.find("eur").should == expected
91
- Money::Currency.find("EUR").should == expected
92
- end
93
- end
94
-
95
- specify "#self.wrap should return nil if object is nil" do
96
- Money::Currency.wrap(nil).should == nil
97
- Money::Currency.wrap(Money::Currency.new(:usd)).should == Money::Currency.new(:usd)
98
- Money::Currency.wrap(:usd).should == Money::Currency.new(:usd)
99
- end
100
-
101
-
102
- def with_custom_definitions(&block)
103
- begin
104
- old = Money::Currency::TABLE.dup
105
- Money::Currency::TABLE.clear
106
- yield
107
- ensure
108
- silence_warnings do
109
- Money::Currency.const_set("TABLE", old)
110
- end
111
- end
112
- end
113
-
114
- # Sets $VERBOSE to nil for the duration of the block and back to its original value afterwards.
115
- #
116
- # silence_warnings do
117
- # value = noisy_call # no warning voiced
118
- # end
119
- #
120
- # noisy_call # warning voiced
121
- def silence_warnings
122
- old_verbose, $VERBOSE = $VERBOSE, nil
123
- yield
124
- ensure
125
- $VERBOSE = old_verbose
126
- end
127
-
128
- end
1
+ # encoding: utf-8
2
+
3
+ require "spec_helper"
4
+
5
+ describe Money::Currency do
6
+
7
+ specify "#initialize should lookup data from TABLE" do
8
+ with_custom_definitions do
9
+ Money::Currency::TABLE[:usd] = {:priority => 1, :iso_code => "USD", :name => "United States Dollar", :symbol => "$", :subunit => "Cent", :subunit_to_unit => 100, :decimal_mark => ".", :thousands_separator => ","}
10
+ Money::Currency::TABLE[:eur] = {:priority => 2, :iso_code => "EUR", :name => "Euro", :symbol => "€", :subunit => "Cent", :subunit_to_unit => 100, :decimal_mark => ".", :thousands_separator => ","}
11
+
12
+ currency = Money::Currency.new("USD")
13
+ currency.id.should == :usd
14
+ currency.priority.should == 1
15
+ currency.iso_code.should == "USD"
16
+ currency.name.should == "United States Dollar"
17
+ currency.decimal_mark.should == "."
18
+ currency.separator.should == "."
19
+ currency.thousands_separator.should == ","
20
+ currency.delimiter.should == ","
21
+ end
22
+ end
23
+
24
+ specify "#initialize should raise UnknownMoney::Currency with unknown currency" do
25
+ lambda { Money::Currency.new("xxx") }.should raise_error(Money::Currency::UnknownCurrency, /xxx/)
26
+ end
27
+
28
+ specify "#== should return true if self === other" do
29
+ currency = Money::Currency.new(:eur)
30
+ currency.should == currency
31
+ end
32
+
33
+ specify "#== should return true if the id is equal" do
34
+ Money::Currency.new(:eur).should == Money::Currency.new(:eur)
35
+ Money::Currency.new(:eur).should_not == Money::Currency.new(:usd)
36
+ end
37
+
38
+ specify "#eql? should return true if #== returns true" do
39
+ Money::Currency.new(:eur).eql?(Money::Currency.new(:eur)).should be true
40
+ Money::Currency.new(:eur).eql?(Money::Currency.new(:usd)).should be false
41
+ end
42
+
43
+ specify "#hash should return the same value for equal objects" do
44
+ Money::Currency.new(:eur).hash.should == Money::Currency.new(:eur).hash
45
+ Money::Currency.new(:eur).hash.should_not == Money::Currency.new(:usd).hash
46
+ end
47
+
48
+ specify "#hash can be used to return the intersection of Currency object arrays" do
49
+ intersection = [Money::Currency.new(:eur), Money::Currency.new(:usd)] & [Money::Currency.new(:eur)]
50
+ intersection.should == [Money::Currency.new(:eur)]
51
+ end
52
+
53
+ specify "#<=> should compare objects by priority" do
54
+ Money::Currency.new(:cad).should > Money::Currency.new(:usd)
55
+ Money::Currency.new(:usd).should < Money::Currency.new(:eur)
56
+ end
57
+
58
+ specify "#to_s" do
59
+ Money::Currency.new(:usd).to_s.should == "USD"
60
+ Money::Currency.new(:eur).to_s.should == "EUR"
61
+ end
62
+
63
+ specify "#to_currency" do
64
+ usd = Money::Currency.new(:usd)
65
+ usd.to_currency.should == usd
66
+ end
67
+
68
+ specify "#inspect" do
69
+ Money::Currency.new(:usd).inspect.should ==
70
+ %Q{#<Money::Currency id: usd, priority: 1, symbol_first: true, thousands_separator: ,, html_entity: $, decimal_mark: ., name: United States Dollar, symbol: $, subunit_to_unit: 100, iso_code: USD, subunit: Cent>}
71
+ end
72
+
73
+
74
+ specify "#self.find should return currency matching given id" do
75
+ with_custom_definitions do
76
+ Money::Currency::TABLE[:usd] = { :priority => 1, :iso_code => "USD", :name => "United States Dollar", :symbol => "$", :subunit => "Cent", :subunit_to_unit => 100, :decimal_mark => ".", :thousands_separator => "," }
77
+ Money::Currency::TABLE[:eur] = { :priority => 2, :iso_code => "EUR", :name => "Euro", :symbol => "€", :subunit => "Cent", :subunit_to_unit => 100, :decimal_mark => ".", :thousands_separator => "," }
78
+
79
+ expected = Money::Currency.new(:eur)
80
+ Money::Currency.find(:eur).should == expected
81
+ Money::Currency.find(:EUR).should == expected
82
+ Money::Currency.find("eur").should == expected
83
+ Money::Currency.find("EUR").should == expected
84
+ end
85
+ end
86
+
87
+ specify "#self.find should return nil unless currency matching given id" do
88
+ with_custom_definitions do
89
+ Money::Currency::TABLE[:usd] = { :position => 1, :iso_code => "USD", :name => "United States Dollar", :symbol => "$", :subunit => "Cent", :subunit_to_unit => 100, :decimal_mark => ".", :thousands_separator => "," }
90
+ Money::Currency::TABLE[:eur] = { :position => 2, :iso_code => "EUR", :name => "Euro", :symbol => "€", :subunit => "Cent", :subunit_to_unit => 100, :decimal_mark => ".", :thousands_separator => "," }
91
+
92
+ expected = Money::Currency.new(:eur)
93
+ Money::Currency.find(:eur).should == expected
94
+ Money::Currency.find(:EUR).should == expected
95
+ Money::Currency.find("eur").should == expected
96
+ Money::Currency.find("EUR").should == expected
97
+ end
98
+ end
99
+
100
+ specify "#self.wrap should return nil if object is nil" do
101
+ Money::Currency.wrap(nil).should == nil
102
+ Money::Currency.wrap(Money::Currency.new(:usd)).should == Money::Currency.new(:usd)
103
+ Money::Currency.wrap(:usd).should == Money::Currency.new(:usd)
104
+ end
105
+
106
+
107
+ def with_custom_definitions(&block)
108
+ begin
109
+ old = Money::Currency::TABLE.dup
110
+ Money::Currency::TABLE.clear
111
+ yield
112
+ ensure
113
+ silence_warnings do
114
+ Money::Currency.const_set("TABLE", old)
115
+ end
116
+ end
117
+ end
118
+
119
+ # Sets $VERBOSE to nil for the duration of the block and back to its original value afterwards.
120
+ #
121
+ # silence_warnings do
122
+ # value = noisy_call # no warning voiced
123
+ # end
124
+ #
125
+ # noisy_call # warning voiced
126
+ def silence_warnings
127
+ old_verbose, $VERBOSE = $VERBOSE, nil
128
+ yield
129
+ ensure
130
+ $VERBOSE = old_verbose
131
+ end
132
+
133
+ end