diff --git a/Structural/Decorator/Decorator.php b/Structural/Decorator/Decorator.php
deleted file mode 100644
index 0b8fde3..0000000
--- a/Structural/Decorator/Decorator.php
+++ /dev/null
@@ -1,31 +0,0 @@
-wrapped = $wrappable;
- }
-}
diff --git a/Structural/Decorator/JsonRenderer.php b/Structural/Decorator/JsonRenderer.php
new file mode 100644
index 0000000..9cc4066
--- /dev/null
+++ b/Structural/Decorator/JsonRenderer.php
@@ -0,0 +1,11 @@
+wrapped->renderData());
+ }
+}
diff --git a/Structural/Decorator/README.rst b/Structural/Decorator/README.rst
index b57a608..c854787 100644
--- a/Structural/Decorator/README.rst
+++ b/Structural/Decorator/README.rst
@@ -25,9 +25,9 @@ Code
You can also find these code on `GitHub`_
-RendererInterface.php
+RenderableInterface.php
-.. literalinclude:: RendererInterface.php
+.. literalinclude:: RenderableInterface.php
:language: php
:linenos:
@@ -37,21 +37,21 @@ Webservice.php
:language: php
:linenos:
-Decorator.php
+RendererDecorator.php
-.. literalinclude:: Decorator.php
+.. literalinclude:: RendererDecorator.php
:language: php
:linenos:
-RenderInXml.php
+XmlRenderer.php
-.. literalinclude:: RenderInXml.php
+.. literalinclude:: XmlRenderer.php
:language: php
:linenos:
-RenderInJson.php
+JsonRenderer.php
-.. literalinclude:: RenderInJson.php
+.. literalinclude:: JsonRenderer.php
:language: php
:linenos:
diff --git a/Structural/Decorator/RenderInJson.php b/Structural/Decorator/RenderInJson.php
deleted file mode 100644
index e950e28..0000000
--- a/Structural/Decorator/RenderInJson.php
+++ /dev/null
@@ -1,16 +0,0 @@
-wrapped->renderData());
- }
-}
diff --git a/Structural/Decorator/RenderInXml.php b/Structural/Decorator/RenderInXml.php
deleted file mode 100644
index 5afffda..0000000
--- a/Structural/Decorator/RenderInXml.php
+++ /dev/null
@@ -1,24 +0,0 @@
-wrapped->renderData() as $key => $val) {
- $doc->appendChild($doc->createElement($key, $val));
- }
-
- return $doc->saveXML();
- }
-}
diff --git a/Structural/Decorator/RenderableInterface.php b/Structural/Decorator/RenderableInterface.php
new file mode 100644
index 0000000..07e11d1
--- /dev/null
+++ b/Structural/Decorator/RenderableInterface.php
@@ -0,0 +1,8 @@
+wrapped = $renderer;
+ }
+}
diff --git a/Structural/Decorator/RendererInterface.php b/Structural/Decorator/RendererInterface.php
deleted file mode 100644
index e7b95eb..0000000
--- a/Structural/Decorator/RendererInterface.php
+++ /dev/null
@@ -1,13 +0,0 @@
-service = new Decorator\Webservice(array('foo' => 'bar'));
+ $this->service = new Decorator\Webservice('foobar');
}
public function testJsonDecorator()
{
- // Wrap service with a JSON decorator for renderers
- $service = new Decorator\RenderInJson($this->service);
- // Our Renderer will now output JSON instead of an array
- $this->assertEquals('{"foo":"bar"}', $service->renderData());
+ $service = new Decorator\JsonRenderer($this->service);
+
+ $this->assertEquals('"foobar"', $service->renderData());
}
public function testXmlDecorator()
{
- // Wrap service with a XML decorator for renderers
- $service = new Decorator\RenderInXml($this->service);
- // Our Renderer will now output XML instead of an array
- $xml = 'bar';
- $this->assertXmlStringEqualsXmlString($xml, $service->renderData());
- }
+ $service = new Decorator\XmlRenderer($this->service);
- /**
- * The first key-point of this pattern :.
- */
- public function testDecoratorMustImplementsRenderer()
- {
- $className = 'DesignPatterns\Structural\Decorator\Decorator';
- $interfaceName = 'DesignPatterns\Structural\Decorator\RendererInterface';
- $this->assertTrue(is_subclass_of($className, $interfaceName));
- }
-
- /**
- * Second key-point of this pattern : the decorator is type-hinted.
- *
- * @expectedException \PHPUnit_Framework_Error
- */
- public function testDecoratorTypeHinted()
- {
- if (version_compare(PHP_VERSION, '7', '>=')) {
- throw new \PHPUnit_Framework_Error('Skip test for PHP 7', 0, __FILE__, __LINE__);
- }
-
- $this->getMockForAbstractClass('DesignPatterns\Structural\Decorator\Decorator', array(new \stdClass()));
- }
-
- /**
- * Second key-point of this pattern : the decorator is type-hinted.
- *
- * @requires PHP 7
- * @expectedException TypeError
- */
- public function testDecoratorTypeHintedForPhp7()
- {
- $this->getMockForAbstractClass('DesignPatterns\Structural\Decorator\Decorator', array(new \stdClass()));
- }
-
- /**
- * The decorator implements and wraps the same interface.
- */
- public function testDecoratorOnlyAcceptRenderer()
- {
- $mock = $this->createMock('DesignPatterns\Structural\Decorator\RendererInterface');
- $dec = $this->getMockForAbstractClass('DesignPatterns\Structural\Decorator\Decorator', array($mock));
- $this->assertNotNull($dec);
+ $this->assertXmlStringEqualsXmlString('foobar', $service->renderData());
}
}
diff --git a/Structural/Decorator/Webservice.php b/Structural/Decorator/Webservice.php
index 1151672..6715a22 100644
--- a/Structural/Decorator/Webservice.php
+++ b/Structural/Decorator/Webservice.php
@@ -2,25 +2,19 @@
namespace DesignPatterns\Structural\Decorator;
-class Webservice implements RendererInterface
+class Webservice implements RenderableInterface
{
/**
- * @var mixed
+ * @var string
*/
- protected $data;
+ private $data;
- /**
- * @param mixed $data
- */
- public function __construct($data)
+ public function __construct(string $data)
{
$this->data = $data;
}
- /**
- * @return string
- */
- public function renderData()
+ public function renderData(): string
{
return $this->data;
}
diff --git a/Structural/Decorator/XmlRenderer.php b/Structural/Decorator/XmlRenderer.php
new file mode 100644
index 0000000..012da47
--- /dev/null
+++ b/Structural/Decorator/XmlRenderer.php
@@ -0,0 +1,15 @@
+wrapped->renderData();
+ $doc->appendChild($doc->createElement('content', $data));
+
+ return $doc->saveXML();
+ }
+}