money 3.1.0.pre1 → 3.1.0.pre2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +6 -0
- data/README.rdoc +23 -11
- data/VERSION +1 -1
- data/lib/money/bank/base.rb +13 -0
- data/lib/money/bank/variable_exchange.rb +1 -2
- data/lib/money/money.rb +20 -4
- data/money.gemspec +2 -2
- data/spec/bank/base_spec.rb +23 -2
- metadata +4 -4
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
== Money 3.1.0.pre2
|
2
|
+
* moved @rounding_method from Money::Bank::VariableExchange to
|
3
|
+
Money::Bank::Base (closes #18)
|
4
|
+
* added #setup and call after #initialize in Money::Bank::Base (closes #19)
|
5
|
+
* update/fix documentation (closes #17)
|
6
|
+
|
1
7
|
== Money 3.1.0.pre1
|
2
8
|
* Implemented Money::Bank::Base (closes #14)
|
3
9
|
* Added Bank::Base#exchange_with
|
data/README.rdoc
CHANGED
@@ -51,9 +51,21 @@ The development version (hosted on Github) can be installed with:
|
|
51
51
|
money.cents # => 1000
|
52
52
|
money.currency # => Currency.new("USD")
|
53
53
|
|
54
|
+
# Comparisons
|
54
55
|
Money.new(1000, "USD") == Money.new(1000, "USD") # => true
|
55
56
|
Money.new(1000, "USD") == Money.new(100, "USD") # => false
|
56
57
|
Money.new(1000, "USD") == Money.new(1000, "EUR") # => false
|
58
|
+
Money.new(1000, "USD") != Money.new(1000, "EUR") # => true
|
59
|
+
|
60
|
+
# Arithmetic
|
61
|
+
Money.new(1000, "USD") + Money.new(500, "USD") == Money.new(1500, "USD")
|
62
|
+
Money.new(1000, "USD") - Money.new(200, "USD") == Money.new(800, "USD")
|
63
|
+
Money.new(1000, "USD") / 5 == Money.new(200, "USD")
|
64
|
+
Money.new(1000, "USD") * 5 == Money.new(5000, "USD")
|
65
|
+
|
66
|
+
# Currency conversions
|
67
|
+
some_code_to_setup_exchange_rates
|
68
|
+
Money.new(1000, "USD").exchange_to("EUR") == Money.new(some_value, "EUR")
|
57
69
|
|
58
70
|
=== Currency
|
59
71
|
|
@@ -66,7 +78,7 @@ The most part of <tt>Money</tt> APIs allows you to supply either a <tt>String</t
|
|
66
78
|
A <tt>Money::Currency</tt> instance holds all the information about the currency,
|
67
79
|
including the currency symbol, name and much more.
|
68
80
|
|
69
|
-
currency = Money.new(1000, "USD")
|
81
|
+
currency = Money.new(1000, "USD").currency
|
70
82
|
currency.iso_code
|
71
83
|
# => "USD"
|
72
84
|
currency.name
|
@@ -89,14 +101,14 @@ containing all the currency attributes.
|
|
89
101
|
|
90
102
|
The pre-defined set of attributes includes:
|
91
103
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
104
|
+
- priority: a numerical value you can use to sort/group the currency list
|
105
|
+
- iso_code: the international 3-letter code as defined by the ISO 4217 standard
|
106
|
+
- name: the currency name
|
107
|
+
- symbol: the currency symbol (UTF-8 encoded)
|
108
|
+
- subunit: the name of the fractional monetary unit
|
109
|
+
- subunit_to_unit: the proportion between the unit and the subunit
|
110
|
+
- separator: character between the whole and fraction amounts
|
111
|
+
- delimiter: character between each thousands place
|
100
112
|
|
101
113
|
All attributes are optional. Some attributes, such as <tt>:symbol</tt>, are used by the Money class
|
102
114
|
to print out a representation of the object. Other attributes, such as <tt>:name</tt> or <tt>:priority</tt>,
|
@@ -133,7 +145,7 @@ and all_currencies as follows:
|
|
133
145
|
major_currencies(Money::Currency::TABLE)
|
134
146
|
# => [ :usd, :eur, :bgp, :cad ]
|
135
147
|
|
136
|
-
|
148
|
+
all_currencies(Money::Currency::TABLE)
|
137
149
|
# => [ :aed, :afn, all, ... ]
|
138
150
|
|
139
151
|
|
@@ -175,7 +187,7 @@ www.xe.com for the current rates or just returns <tt>rand(2)</tt>:
|
|
175
187
|
The following is a list of Money.gem compatible currency exchange rate
|
176
188
|
implementations.
|
177
189
|
|
178
|
-
* eu_central_bank.gem: http://github.com/
|
190
|
+
* eu_central_bank.gem: http://github.com/RubyMoney/eu_central_bank
|
179
191
|
|
180
192
|
=== Ruby on Rails
|
181
193
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.1.0.
|
1
|
+
3.1.0.pre2
|
data/lib/money/bank/base.rb
CHANGED
@@ -41,6 +41,19 @@ class Money
|
|
41
41
|
@@singleton ||= self.new
|
42
42
|
end
|
43
43
|
|
44
|
+
attr_reader :rounding_method
|
45
|
+
|
46
|
+
# Initializes a new Money::Bank::Base object. An optional block can be
|
47
|
+
# passed to dictate the rounding method that +exchange_with+ can use.
|
48
|
+
def initialize(&block)
|
49
|
+
@rounding_method = block
|
50
|
+
setup
|
51
|
+
end
|
52
|
+
|
53
|
+
# Called after initialize. Subclasses can use this method to setup
|
54
|
+
# variables, etc that they normally would in +#initialize+.
|
55
|
+
def setup
|
56
|
+
end
|
44
57
|
|
45
58
|
# @deprecated +#exchange+ will be removed in v3.2.0, use +#exchange_with+
|
46
59
|
#
|
data/lib/money/money.rb
CHANGED
@@ -149,6 +149,10 @@ class Money
|
|
149
149
|
end
|
150
150
|
end
|
151
151
|
|
152
|
+
# Returns a new Money object containing the sum of the two operands'
|
153
|
+
# monetary values. If +other_money+ has a different currency then its
|
154
|
+
# monetary value is automatically exchanged to this object's currency
|
155
|
+
# using +exchange_to+.
|
152
156
|
def +(other_money)
|
153
157
|
if currency == other_money.currency
|
154
158
|
Money.new(cents + other_money.cents, other_money.currency)
|
@@ -157,6 +161,10 @@ class Money
|
|
157
161
|
end
|
158
162
|
end
|
159
163
|
|
164
|
+
# Returns a new Money object containing the difference between the two
|
165
|
+
# operands' monetary values. If +other_money+ has a different currency
|
166
|
+
# then its monetary value is automatically exchanged to this object's
|
167
|
+
# currency using +exchange_to+.
|
160
168
|
def -(other_money)
|
161
169
|
if currency == other_money.currency
|
162
170
|
Money.new(cents - other_money.cents, other_money.currency)
|
@@ -165,17 +173,25 @@ class Money
|
|
165
173
|
end
|
166
174
|
end
|
167
175
|
|
168
|
-
#
|
176
|
+
# Gets the cents value of this money object.
|
177
|
+
#
|
178
|
+
# Money.new(15_00, "USD").cents # => 15_00
|
169
179
|
def cents
|
170
180
|
@cents
|
171
181
|
end
|
172
182
|
|
173
|
-
#
|
183
|
+
# Multiplies the monetary value with the given number and returns a
|
184
|
+
# new Money object with this monetary value and the same currency.
|
185
|
+
#
|
186
|
+
# Multiplying with another Money object is currently not supported.
|
174
187
|
def *(fixnum)
|
175
188
|
Money.new(cents * fixnum, currency)
|
176
189
|
end
|
177
190
|
|
178
|
-
#
|
191
|
+
# Divides the monetary value with the given number and returns a
|
192
|
+
# new Money object with this monetary value and the same currency.
|
193
|
+
#
|
194
|
+
# Dividing with another Money object is currently not supported.
|
179
195
|
def /(val)
|
180
196
|
if val.is_a?(Money)
|
181
197
|
if currency == val.currency
|
@@ -188,7 +204,7 @@ class Money
|
|
188
204
|
end
|
189
205
|
end
|
190
206
|
|
191
|
-
#
|
207
|
+
# Synonym for #/.
|
192
208
|
def div(val)
|
193
209
|
self / val
|
194
210
|
end
|
data/money.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{money}
|
8
|
-
s.version = "3.1.0.
|
8
|
+
s.version = "3.1.0.pre2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Tobias Luetke", "Hongli Lai", "Jeremy McNevin", "Shane Emmons", "Simone Carletti"]
|
12
|
-
s.date = %q{2010-08-
|
12
|
+
s.date = %q{2010-08-10}
|
13
13
|
s.description = %q{Money and currency exchange support library.}
|
14
14
|
s.email = %q{hongli@phusion.nl}
|
15
15
|
s.extra_rdoc_files = [
|
data/spec/bank/base_spec.rb
CHANGED
@@ -1,11 +1,33 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe Money::Bank::Base do
|
4
|
-
|
5
4
|
before :each do
|
6
5
|
@bank = Money::Bank::Base.new
|
7
6
|
end
|
8
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
|
+
|
9
31
|
describe '#exchange' do
|
10
32
|
it 'should raise NotImplementedError' do
|
11
33
|
lambda { @bank.exchange(100, 'USD', 'EUR') }.should raise_exception(NotImplementedError)
|
@@ -53,5 +75,4 @@ describe Money::Bank::Base do
|
|
53
75
|
lambda{@bank.send(:same_currency?, 'AAA', 'BBB')}.should raise_exception(Money::Currency::UnknownCurrency)
|
54
76
|
end
|
55
77
|
end
|
56
|
-
|
57
78
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: money
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 341127967
|
5
5
|
prerelease: true
|
6
6
|
segments:
|
7
7
|
- 3
|
8
8
|
- 1
|
9
9
|
- 0
|
10
|
-
-
|
11
|
-
version: 3.1.0.
|
10
|
+
- pre2
|
11
|
+
version: 3.1.0.pre2
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- Tobias Luetke
|
@@ -20,7 +20,7 @@ autorequire:
|
|
20
20
|
bindir: bin
|
21
21
|
cert_chain: []
|
22
22
|
|
23
|
-
date: 2010-08-
|
23
|
+
date: 2010-08-10 00:00:00 -04:00
|
24
24
|
default_executable:
|
25
25
|
dependencies:
|
26
26
|
- !ruby/object:Gem::Dependency
|