Skip to content

Commit 183be6f

Browse files
committed
Add travis ci config file, Facade Design Pattern and PHP Code Sniffer
1 parent 3a2fdfe commit 183be6f

13 files changed

+361
-4
lines changed

.travis.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
language: php
2+
php:
3+
- 5.4
4+
- 5.5
5+
- 5.6
6+
- hhvm
7+
8+
before_script:
9+
- composer self-update
10+
- composer install --prefer-source --no-interaction --dev
11+
12+
branches:
13+
only:
14+
- master
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
namespace PhpDesignPatterns\Structural\Facade;
4+
5+
/**
6+
* Class CoffeeDispenser
7+
* @package PhpDesignPatterns\Structural\Facade
8+
*/
9+
Class CoffeeDispenser implements DispenserInterface
10+
{
11+
/**
12+
* Get the product.
13+
*
14+
* @return string
15+
*/
16+
public function getProduct()
17+
{
18+
return 'coffee: 10mg';
19+
}
20+
}
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
<?php
2+
3+
namespace PhpDesignPatterns\Structural\Facade;
4+
5+
/**
6+
* Class CoffeeMakerFacade
7+
* @package PhpDesignPatterns\Structural\Facade
8+
*/
9+
Class CoffeeMakerFacade
10+
{
11+
/**
12+
* Minimum number of cups to make.
13+
*
14+
* @var integer
15+
*/
16+
const MINIMUM_CUPS = 1;
17+
18+
/**
19+
* Instance of Dispenser.
20+
*
21+
* @var Dispenser
22+
*/
23+
private $coffee_dispenser;
24+
25+
/**
26+
* Instance of Dispenser.
27+
*
28+
* @var Dispenser
29+
*/
30+
private $sugar_dispenser;
31+
32+
/**
33+
* Instance of Dispenser.
34+
*
35+
* @var Dispenser
36+
*/
37+
private $water_dispenser;
38+
39+
/**
40+
*
41+
*/
42+
public function __construct()
43+
{
44+
$this->coffee_dispenser = new CoffeeDispenser;
45+
$this->sugar_dispenser = new SugarDispenser;
46+
$this->water_dispenser = new WaterDispenser;
47+
}
48+
49+
/**
50+
* Make N cups of coffee.
51+
*
52+
* @param integer $cups Number of cups to make.
53+
* @return array
54+
*/
55+
public function makeCups($cups)
56+
{
57+
$cups = $this->checkCups($cups);
58+
59+
$coffee_cups = array();
60+
for($i=1;$i<$cups+1;$i++) {
61+
$products = implode(',', $this->getProducts());
62+
$coffee_cups["coffee #".$i] = $products;
63+
}
64+
return $coffee_cups;
65+
}
66+
67+
/**
68+
* Just check cups.
69+
*
70+
* @param mixed $cups
71+
* @return integer
72+
*/
73+
private function checkCups($cups)
74+
{
75+
if(static::MINIMUM_CUPS > $cups) {
76+
$cups = static::MINIMUM_CUPS;
77+
}
78+
return $cups;
79+
}
80+
81+
/**
82+
* Get products from different dispensers.
83+
*
84+
* @return array
85+
*/
86+
private function getProducts()
87+
{
88+
return array(
89+
$this->sugar_dispenser->getProduct(),
90+
$this->coffee_dispenser->getProduct(),
91+
$this->water_dispenser->getProduct(),
92+
);
93+
}
94+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
namespace PhpDesignPatterns\Structural\Facade;
4+
5+
/**
6+
* Interface DispenserInterface
7+
* @package PhpDesignPatterns\Structural\Facade
8+
*/
9+
interface DispenserInterface
10+
{
11+
/**
12+
* Get the dispenser product.
13+
*
14+
* @return mixed
15+
*/
16+
public function getProduct();
17+
}

Structural/Facade/README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Facade Design Pattern
2+
3+
## Intent
4+
5+
“Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use.”
6+
7+
Excerpt From: Erich Gamma. “Design Patterns: Elements of Reusable Object-Oriented Software.”
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
namespace PhpDesignPatterns\Structural\Facade;
4+
5+
/**
6+
* Class SugarDispenser
7+
* @package PhpDesignPatterns\Structural\Facade
8+
*/
9+
Class SugarDispenser implements DispenserInterface
10+
{
11+
/**
12+
* Get the product.
13+
*
14+
* @return string
15+
*/
16+
public function getProduct()
17+
{
18+
return 'sugar: 3mg';
19+
}
20+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
namespace PhpDesignPatterns\Structural\Facade;
4+
5+
/**
6+
* Class WaterDispenser
7+
* @package PhpDesignPatterns\Structural\Facade
8+
*/
9+
Class WaterDispenser implements DispenserInterface
10+
{
11+
/**
12+
* Get the product.
13+
*
14+
* @return string
15+
*/
16+
public function getProduct()
17+
{
18+
return 'water: 5ml';
19+
}
20+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
namespace PhpDesignPatterns\Tests\Structural\Facade;
4+
5+
use PhpDesignPatterns\Structural\Facade\CoffeeDispenser;
6+
7+
/**
8+
* Class CoffeeDispenserTest
9+
* @package PhpDesignPatterns\Tests\Structural\Facade
10+
*/
11+
class CoffeeDispenserTest extends \PHPUnit_Framework_TestCase
12+
{
13+
/**
14+
* Testing get product.
15+
*/
16+
public function testGetProduct()
17+
{
18+
$expected = 'coffee: 10mg';
19+
$coffee_dispenser = new CoffeeDispenser;
20+
$this->assertEquals($expected, $coffee_dispenser->getProduct(), 'The result is not the expected one.');
21+
}
22+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
namespace PhpDesignPatterns\Tests\Structural\Facade;
4+
5+
use PhpDesignPatterns\Structural\Facade\CoffeeMakerFacade;
6+
7+
/**
8+
* Class CoffeeMakerFacadeTest
9+
* @package PhpDesignPatterns\Tests\Structural\Facade
10+
*/
11+
class CoffeeMakerFacadeTest extends \PHPUnit_Framework_TestCase
12+
{
13+
/**
14+
* Testing get product.
15+
*/
16+
public function testGetProduct()
17+
{
18+
$expected = array(
19+
'coffee #1' => 'sugar: 3mg,coffee: 10mg,water: 5ml',
20+
'coffee #2' => 'sugar: 3mg,coffee: 10mg,water: 5ml',
21+
'coffee #3' => 'sugar: 3mg,coffee: 10mg,water: 5ml',
22+
'coffee #4' => 'sugar: 3mg,coffee: 10mg,water: 5ml',
23+
);
24+
$coffee_maker = new CoffeeMakerFacade;
25+
$this->assertEquals($expected, $coffee_maker->makeCups(count($expected)), 'The result is not the expected one.');
26+
}
27+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
namespace PhpDesignPatterns\Tests\Structural\Facade;
4+
5+
use PhpDesignPatterns\Structural\Facade\SugarDispenser;
6+
7+
/**
8+
* Class SugarDispenserTest
9+
* @package PhpDesignPatterns\Tests\Structural\Facade
10+
*/
11+
class SugarDispenserTest extends \PHPUnit_Framework_TestCase
12+
{
13+
/**
14+
* Testing get product.
15+
*/
16+
public function testGetProduct()
17+
{
18+
$expected = 'sugar: 3mg';
19+
$sugar_dispenser = new SugarDispenser;
20+
$this->assertEquals($expected, $sugar_dispenser->getProduct(), 'The result is not the expected one.');
21+
}
22+
}

0 commit comments

Comments
 (0)