Passed
Push — main ( b13b1c...30676d )
by Emlyn
12:24
created

Json   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 46
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 17
c 2
b 0
f 0
dl 0
loc 46
ccs 19
cts 19
cp 1
rs 10
wmc 4

2 Methods

Rating   Name   Duplication   Size   Complexity  
A render() 0 18 2
A renderRelease() 0 15 2
1
<?php
2
/**
3
 * @category Library
4
 * @license MIT http://opensource.org/licenses/MIT
5
 * @link https://github.com/emlynwest/changelog
6
 */
7
8
namespace ChangeLog\Renderer;
9
10
use ChangeLog\Log;
11
use ChangeLog\Release;
12
use ChangeLog\RenderInterface;
13
14
/**
15
 * Allows change logs to be rendered to json
16
 */
17
class Json implements RenderInterface
18
{
19
20
	/**
21
	 * {@inheritdoc}
22
	 */
23 8
	public function render(Log $log)
24
	{
25 8
		$content = [
26 8
			'title' => $log->getTitle(),
27 8
			'description' => $log->getDescription(),
28 8
			'releases' => [],
29 8
		];
30
31
		/**
32
		 * @var string  $name
33
		 * @var Release $release
34
		 */
35 8
		foreach ($log as $name => $release)
36
		{
37 8
			$content['releases'][$name] = $this->renderRelease($release);
38
		}
39
40 8
		return json_encode($content);
41
	}
42
43
	/**
44
	 * @param Release $release
45
	 *
46
	 * @return array
47
	 */
48 8
	protected function renderRelease(Release $release)
49
	{
50 8
		$date = null;
51
52 8
		if ($release->getDate() !== null)
53
		{
54 8
			$date = $release->getDate()->format('Y-m-d');
55
		}
56
57 8
		return [
58 8
			'name' => $release->getName(),
59 8
			'link' => $release->getLink(),
60 8
			'linkName' => $release->getLinkName(),
61 8
			'date' => $date,
62 8
			'changes' => $release->getAllChanges(),
63 8
		];
64
	}
65
66
}
67