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

JsonBucketLogger::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 2
dl 0
loc 3
ccs 3
cts 3
cp 1
crap 1
rs 10
c 0
b 0
f 0
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