Passed
Push — master ( 950b60...cce8f6 )
by Gabriel
28:13
created

JsonBucketLogger   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 31
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 16
dl 0
loc 31
ccs 19
cts 19
cp 1
rs 10
c 0
b 0
f 0
wmc 4

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A writeEvent() 0 2 1
A getBucketMap() 0 8 1
A formatData() 0 6 1
1
<?php
2
3
declare( strict_types = 1 );
4
5
namespace WMDE\Fundraising\Frontend\BucketTesting\Logging;
6
7
use WMDE\Fundraising\Frontend\BucketTesting\Bucket;
8
9
/**
10
 * Logs the event info, the bucket data and the time as a JSON-encoded string
11
 */
12
class JsonBucketLogger implements BucketLogger {
13
14
	private $logWriter;
15
	private $timeTeller;
16
17 40
	public function __construct( LogWriter $logWriter, TimeTeller $timeTeller ) {
18 40
		$this->logWriter = $logWriter;
19 40
		$this->timeTeller = $timeTeller;
20 40
	}
21
22 40
	public function writeEvent( LoggingEvent $event, Bucket ...$buckets ): void {
23 40
		$this->logWriter->write( json_encode( $this->formatData( $event, ...$buckets ) ) );
24 40
	}
25
26 40
	private function formatData( LoggingEvent $event, Bucket ...$buckets ): array {
27
		return [
28 40
			'date' => $this->timeTeller->getTime(),
29 40
			'eventName' => $event->getName(),
30 40
			'metadata' => $event->getMetaData(),
31 40
			'buckets' => $this->getBucketMap( $buckets )
32
		];
33
	}
34
35 40
	private function getBucketMap( array $buckets ): array {
36 40
		return array_reduce(
37 40
			$buckets,
38
			function ( array $bucketMap, Bucket $bucket ) {
39 34
				$bucketMap[$bucket->getCampaign()->getName()] = $bucket->getName();
40 34
				return $bucketMap;
41 40
			},
42 40
			[]
43
		);
44
	}
45
46
}
47