Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
package
money
Commits
41821ead
Commit
41821ead
authored
Jul 12, 2011
by
Mathias Verraes
Browse files
renamed Currency classes, to have a single name for currencies
parent
2d929cc6
Changes
7
Hide whitespace changes
Inline
Side-by-side
README.md
View file @
41821ead
...
...
@@ -27,7 +27,7 @@ down to 3 and 1 cent leaves me 1 cent. Apart from re-investing that cent in the
is to keep handing out the remainder until all money is spent. In other words:
<?php
$profit = new Money(5, new E
uro
);
$profit = new Money(5, new E
UR
);
list($my_cut, $investors_cut) = $profit->allocate(70, 30);
// $my_cut is 4 cents, $investors_cut is 1 cent
...
...
@@ -41,12 +41,12 @@ Immutability
Jim and Hannah both want to buy a copy of book priced at EUR 25.
<?php
$jim_price = $hannah_price = new Money(2500, new E
uro
);
$jim_price = $hannah_price = new Money(2500, new E
UR
);
Jim has a coupon for EUR 5.
<?php
$coupon = new Money(500, new E
uro
);
$coupon = new Money(500, new E
UR
);
$jim_price->subtract($coupon);
Because $jim_price and $hannah_price are the same object, you'd expect Hannah to now have the reduced
...
...
@@ -60,7 +60,7 @@ The correct way of doing operations is:
$jim_price = $jim_price->subtract($coupon);
$jim_price->lessThan($hannah_price); // true
$jim_price->equals(Money::
euro
(2000)); // true
$jim_price->equals(Money::
EUR
(2000)); // true
The goal
...
...
lib/Verraes/Money/EUR.php
View file @
41821ead
...
...
@@ -10,7 +10,7 @@
namespace
Verraes\Money
;
class
E
uro
implements
Currency
class
E
UR
implements
Currency
{
/**
* @return string
...
...
lib/Verraes/Money/Money.php
View file @
41821ead
...
...
@@ -46,18 +46,18 @@ class Money
* Convenience factory method for an amount in EURO
* @return Money
*/
public
static
function
euro
(
$units
)
public
static
function
EUR
(
$units
)
{
return
new
Money
(
$units
,
new
E
uro
);
return
new
Money
(
$units
,
new
E
UR
);
}
/**
* Convenience factory method for an amount in USD
* @return Money
*/
public
static
function
usd
(
$units
)
public
static
function
USD
(
$units
)
{
return
new
Money
(
$units
,
new
U
sd
);
return
new
Money
(
$units
,
new
U
SD
);
}
private
function
isSameCurrency
(
Money
$other
)
...
...
lib/Verraes/Money/
-
USD.php
→
lib/Verraes/Money/USD.php
View file @
41821ead
...
...
@@ -10,7 +10,7 @@
namespace
Verraes\Money
;
class
U
sd
implements
Currency
class
U
SD
implements
Currency
{
/**
* @return string
...
...
tests/CurrencyTest.php
View file @
41821ead
...
...
@@ -11,17 +11,17 @@
require_once
'bootstrap.php'
;
use
Verraes\Money\Currency
;
use
Verraes\Money\E
uro
;
use
Verraes\Money\U
sd
;
use
Verraes\Money\E
UR
;
use
Verraes\Money\U
SD
;
class
CurrencyTest
extends
PHPUnit_Framework_TestCase
{
public
function
setUp
()
{
$this
->
euro1
=
new
E
uro
;
$this
->
euro2
=
new
E
uro
;
$this
->
usd1
=
new
U
sd
;
$this
->
usd2
=
new
U
sd
;
$this
->
euro1
=
new
E
UR
;
$this
->
euro2
=
new
E
UR
;
$this
->
usd1
=
new
U
SD
;
$this
->
usd2
=
new
U
SD
;
}
public
function
testDifferentInstancesAreEqual
()
...
...
tests/MoneyTest.php
View file @
41821ead
...
...
@@ -12,8 +12,8 @@ require_once 'bootstrap.php';
use
Verraes\Money\Money
;
use
Verraes\Money\Currency
;
use
Verraes\Money\U
sd
;
use
Verraes\Money\E
uro
;
use
Verraes\Money\U
SD
;
use
Verraes\Money\E
UR
;
class
MoneyTest
extends
PHPUnit_Framework_TestCase
{
...
...
@@ -35,18 +35,18 @@ class MoneyTest extends PHPUnit_Framework_TestCase
public
function
testFactoryMethods
()
{
$this
->
assertMoneyEquals
(
Money
::
euro
(
25
),
Money
::
euro
(
10
)
->
add
(
Money
::
euro
(
15
))
Money
::
EUR
(
25
),
Money
::
EUR
(
10
)
->
add
(
Money
::
EUR
(
15
))
);
$this
->
assertMoneyEquals
(
Money
::
usd
(
25
),
Money
::
usd
(
10
)
->
add
(
Money
::
usd
(
15
))
Money
::
USD
(
25
),
Money
::
USD
(
10
)
->
add
(
Money
::
USD
(
15
))
);
}
public
function
testGetters
()
{
$m
=
new
Money
(
100
,
$euro
=
new
E
uro
);
$m
=
new
Money
(
100
,
$euro
=
new
E
UR
);
$this
->
assertEquals
(
100
,
$m
->
getUnits
());
$this
->
assertEquals
(
$euro
,
$m
->
getCurrency
());
}
...
...
@@ -56,7 +56,7 @@ class MoneyTest extends PHPUnit_Framework_TestCase
*/
public
function
testDecimalsThrowException
()
{
$money
=
new
Money
(
0.01
,
new
E
uro
);
$money
=
new
Money
(
0.01
,
new
E
UR
);
}
/**
...
...
@@ -64,15 +64,15 @@ class MoneyTest extends PHPUnit_Framework_TestCase
*/
public
function
testStringThrowsException
()
{
$money
=
new
Money
(
'100'
,
new
E
uro
);
$money
=
new
Money
(
'100'
,
new
E
UR
);
}
public
function
testEquality
()
{
$m1
=
new
Money
(
100
,
new
E
uro
);
$m2
=
new
Money
(
100
,
new
E
uro
);
$m3
=
new
Money
(
100
,
new
U
sd
);
$m4
=
new
Money
(
50
,
new
E
uro
);
$m1
=
new
Money
(
100
,
new
E
UR
);
$m2
=
new
Money
(
100
,
new
E
UR
);
$m3
=
new
Money
(
100
,
new
U
SD
);
$m4
=
new
Money
(
50
,
new
E
UR
);
$this
->
assertTrue
(
$m1
->
equals
(
$m2
));
$this
->
assertFalse
(
$m1
->
equals
(
$m3
));
...
...
@@ -81,10 +81,10 @@ class MoneyTest extends PHPUnit_Framework_TestCase
public
function
testAddition
()
{
$m1
=
new
Money
(
100
,
new
E
uro
);
$m2
=
new
Money
(
100
,
new
E
uro
);
$m1
=
new
Money
(
100
,
new
E
UR
);
$m2
=
new
Money
(
100
,
new
E
UR
);
$sum
=
$m1
->
add
(
$m2
);
$expected
=
new
Money
(
200
,
new
E
uro
);
$expected
=
new
Money
(
200
,
new
E
UR
);
$this
->
assertMoneyEquals
(
$expected
,
$sum
);
...
...
@@ -98,17 +98,17 @@ class MoneyTest extends PHPUnit_Framework_TestCase
*/
public
function
testDifferentCurrenciesCannotBeAdded
()
{
$m1
=
new
Money
(
100
,
new
E
uro
);
$m2
=
new
Money
(
100
,
new
U
sd
);
$m1
=
new
Money
(
100
,
new
E
UR
);
$m2
=
new
Money
(
100
,
new
U
SD
);
$m1
->
add
(
$m2
);
}
public
function
testSubtraction
()
{
$m1
=
new
Money
(
100
,
new
E
uro
);
$m2
=
new
Money
(
200
,
new
E
uro
);
$m1
=
new
Money
(
100
,
new
E
UR
);
$m2
=
new
Money
(
200
,
new
E
UR
);
$diff
=
$m1
->
subtract
(
$m2
);
$expected
=
new
Money
(
-
100
,
new
E
uro
);
$expected
=
new
Money
(
-
100
,
new
E
UR
);
$this
->
assertMoneyEquals
(
$expected
,
$diff
);
...
...
@@ -122,20 +122,20 @@ class MoneyTest extends PHPUnit_Framework_TestCase
*/
public
function
testDifferentCurrenciesCannotBeSubtracted
()
{
$m1
=
new
Money
(
100
,
new
E
uro
);
$m2
=
new
Money
(
100
,
new
U
sd
);
$m1
=
new
Money
(
100
,
new
E
UR
);
$m2
=
new
Money
(
100
,
new
U
SD
);
$m1
->
subtract
(
$m2
);
}
public
function
testMultiplication
()
{
$m
=
new
Money
(
1
,
new
E
uro
);
$m
=
new
Money
(
1
,
new
E
UR
);
$this
->
assertMoneyEquals
(
new
Money
(
2
,
new
E
uro
),
new
Money
(
2
,
new
E
UR
),
$m
->
multiply
(
1.5
)
);
$this
->
assertMoneyEquals
(
new
Money
(
1
,
new
E
uro
),
new
Money
(
1
,
new
E
UR
),
$m
->
multiply
(
1.5
,
Money
::
ROUND_HALF_DOWN
)
);
...
...
@@ -144,17 +144,17 @@ class MoneyTest extends PHPUnit_Framework_TestCase
public
function
testDivision
()
{
$m
=
new
Money
(
10
,
new
E
uro
);
$m
=
new
Money
(
10
,
new
E
UR
);
$this
->
assertMoneyEquals
(
new
Money
(
3
,
new
E
uro
),
new
Money
(
3
,
new
E
UR
),
$m
->
divide
(
3
)
);
$this
->
assertMoneyEquals
(
new
Money
(
2
,
new
E
uro
),
new
Money
(
2
,
new
E
UR
),
$m
->
divide
(
4
,
Money
::
ROUND_HALF_EVEN
)
);
$this
->
assertMoneyEquals
(
new
Money
(
3
,
new
E
uro
),
new
Money
(
3
,
new
E
UR
),
$m
->
divide
(
3
,
Money
::
ROUND_HALF_ODD
)
);
...
...
@@ -163,9 +163,9 @@ class MoneyTest extends PHPUnit_Framework_TestCase
public
function
testComparison
()
{
$euro1
=
new
Money
(
1
,
new
E
uro
);
$euro2
=
new
Money
(
2
,
new
E
uro
);
$usd
=
new
Money
(
1
,
new
U
sd
);
$euro1
=
new
Money
(
1
,
new
E
UR
);
$euro2
=
new
Money
(
2
,
new
E
UR
);
$usd
=
new
Money
(
1
,
new
U
SD
);
$this
->
assertTrue
(
$euro2
->
greaterThan
(
$euro1
));
$this
->
assertFalse
(
$euro1
->
greaterThan
(
$euro2
));
...
...
@@ -182,36 +182,36 @@ class MoneyTest extends PHPUnit_Framework_TestCase
*/
public
function
testDifferentCurrenciesCannotBeCompared
()
{
Money
::
euro
(
1
)
->
compare
(
Money
::
usd
(
1
));
Money
::
EUR
(
1
)
->
compare
(
Money
::
USD
(
1
));
}
public
function
testAllocation
()
{
$m
=
new
Money
(
100
,
new
E
uro
);
$m
=
new
Money
(
100
,
new
E
UR
);
list
(
$part1
,
$part2
,
$part3
)
=
$m
->
allocate
(
array
(
1
,
1
,
1
));
$this
->
assertMoneyEquals
(
new
Money
(
34
,
new
E
uro
),
$part1
);
$this
->
assertMoneyEquals
(
new
Money
(
33
,
new
E
uro
),
$part2
);
$this
->
assertMoneyEquals
(
new
Money
(
33
,
new
E
uro
),
$part3
);
$this
->
assertMoneyEquals
(
new
Money
(
34
,
new
E
UR
),
$part1
);
$this
->
assertMoneyEquals
(
new
Money
(
33
,
new
E
UR
),
$part2
);
$this
->
assertMoneyEquals
(
new
Money
(
33
,
new
E
UR
),
$part3
);
$m
=
new
Money
(
101
,
new
E
uro
);
$m
=
new
Money
(
101
,
new
E
UR
);
list
(
$part1
,
$part2
,
$part3
)
=
$m
->
allocate
(
array
(
1
,
1
,
1
));
$this
->
assertMoneyEquals
(
new
Money
(
34
,
new
E
uro
),
$part1
);
$this
->
assertMoneyEquals
(
new
Money
(
34
,
new
E
uro
),
$part2
);
$this
->
assertMoneyEquals
(
new
Money
(
33
,
new
E
uro
),
$part3
);
$this
->
assertMoneyEquals
(
new
Money
(
34
,
new
E
UR
),
$part1
);
$this
->
assertMoneyEquals
(
new
Money
(
34
,
new
E
UR
),
$part2
);
$this
->
assertMoneyEquals
(
new
Money
(
33
,
new
E
UR
),
$part3
);
}
public
function
testAllocationOrderIsImportant
()
{
$m
=
new
Money
(
5
,
new
E
uro
);
$m
=
new
Money
(
5
,
new
E
UR
);
list
(
$part1
,
$part2
)
=
$m
->
allocate
(
array
(
3
,
7
));
$this
->
assertMoneyEquals
(
new
Money
(
2
,
new
E
uro
),
$part1
);
$this
->
assertMoneyEquals
(
new
Money
(
3
,
new
E
uro
),
$part2
);
$this
->
assertMoneyEquals
(
new
Money
(
2
,
new
E
UR
),
$part1
);
$this
->
assertMoneyEquals
(
new
Money
(
3
,
new
E
UR
),
$part2
);
$m
=
new
Money
(
5
,
new
E
uro
);
$m
=
new
Money
(
5
,
new
E
UR
);
list
(
$part1
,
$part2
)
=
$m
->
allocate
(
array
(
7
,
3
));
$this
->
assertMoneyEquals
(
new
Money
(
4
,
new
E
uro
),
$part1
);
$this
->
assertMoneyEquals
(
new
Money
(
1
,
new
E
uro
),
$part2
);
$this
->
assertMoneyEquals
(
new
Money
(
4
,
new
E
UR
),
$part1
);
$this
->
assertMoneyEquals
(
new
Money
(
1
,
new
E
UR
),
$part2
);
}
}
\ No newline at end of file
tests/bootstrap.php
View file @
41821ead
...
...
@@ -10,8 +10,8 @@
require_once
'PHPUnit/Framework/TestCase.php'
;
require_once
__DIR__
.
'/../lib/Verraes/Money/Currency.php'
;
require_once
__DIR__
.
'/../lib/Verraes/Money/E
uro
.php'
;
require_once
__DIR__
.
'/../lib/Verraes/Money/E
UR
.php'
;
require_once
__DIR__
.
'/../lib/Verraes/Money/Exception.php'
;
require_once
__DIR__
.
'/../lib/Verraes/Money/InvalidArgumentException.php'
;
require_once
__DIR__
.
'/../lib/Verraes/Money/Money.php'
;
require_once
__DIR__
.
'/../lib/Verraes/Money/U
sd
.php'
;
require_once
__DIR__
.
'/../lib/Verraes/Money/U
SD
.php'
;
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment