GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.

Engine::validate()   A
last analyzed

Complexity

Conditions 4
Paths 6

Size

Total Lines 15
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 1
Metric Value
c 2
b 0
f 1
dl 0
loc 15
rs 9.2
cc 4
eloc 9
nc 6
nop 0
1
<?php
2
3
namespace Papper;
4
5
use Papper\FluentSyntax\ExecuteMappingFluentSyntax;
6
use Papper\FluentSyntax\MappingFluentSyntax;
7
use Papper\Internal\Configuration;
8
9
/**
10
 * Papper mapping engine
11
 *
12
 * @author Vladimir Komissarov <[email protected]>
13
 */
14
class Engine
15
{
16
	/**
17
	 * @var Internal\Configuration
18
	 */
19
	private $config;
20
21
	public function __construct()
22
	{
23
		$this->config = new Configuration();
24
	}
25
26
	/**
27
	 * Returns mapping options
28
	 *
29
	 * @return MappingOptionsInterface
30
	 */
31
	public function getMappingOptions()
32
	{
33
		return $this->config->getMappingOptions();
34
	}
35
36
	/**
37
	 * Creates a TypeMap for the source's type and destination's type.
38
	 *
39
	 * @param string $sourceType Source type
40
	 * @param string $destinationType Destination type
41
	 * @throws ClassNotFoundException
42
	 * @return MappingFluentSyntax
43
	 */
44
	public function createMap($sourceType, $destinationType)
45
	{
46
		return new MappingFluentSyntax($this->config->findTypeMap($sourceType, $destinationType));
47
	}
48
49
	/**
50
	 * Configure map
51
	 *
52
	 * @param MappingConfigurationInterface $configuration
53
	 */
54
	public function configureMapping(MappingConfigurationInterface $configuration)
55
	{
56
		$configuration->configure(new MappingConfigurationContext($this));
57
	}
58
59
	/**
60
	 * Initialize a mapping from the source object.
61
	 * The source type can be is inferred from the source object.
62
	 *
63
	 * @param object|object[] $source Source object or collection to map from
64
	 * @param string|null $sourceType Source object type
65
	 * @throws MappingException
66
	 * @return ExecuteMappingFluentSyntax
67
	 */
68
	public function map($source, $sourceType = null)
69
	{
70
		return new ExecuteMappingFluentSyntax($this, $source, $sourceType);
71
	}
72
73
	/**
74
	 * Execute a mapping using MappingContext
75
	 *
76
	 * @param MappingContext $context Mapping context
77
	 * @return object|object[] Mapped destination object or collection
78
	 * @throws MappingException
79
	 * @throws ClassNotFoundException
80
	 */
81
	public function execute(MappingContext $context)
82
	{
83
		$typeMap = $this->config->findTypeMap($context->getSourceType(), $context->getDestinationType());
84
85
		try {
86
			$typeMap->validate();
87
			$mapFunc = $typeMap->getMapFunc();
88
89
			$destination = is_array($context->getSource())
90
				? $this->mapCollection($context, $mapFunc)
91
				: $this->mapObject($context, $mapFunc);
92
			return $destination;
93
		} catch (\Exception $e) {
94
			$message = sprintf("Error while mapping %s -> %s", $typeMap->getSourceType(), $typeMap->getDestinationType());
95
			throw new MappingException($message, 0, $e);
96
		}
97
	}
98
99
	/**
100
	 * Validates that every top level destination property is mapped to source property.
101
	 * If not, a ConfigurationException is thrown detailing any missing mappings.
102
	 *
103
	 * @throws ValidationException if any TypeMaps contain unmapped properties
104
	 */
105
	public function validate()
106
	{
107
		$errors = array();
108
		foreach ($this->config->getAllTypeMaps() as $typeMap) {
109
			try {
110
				$typeMap->validate();
111
			} catch (\Exception $e) {
112
				$errors[] = $e->getMessage();
113
			}
114
		}
115
116
		if (!empty($errors)) {
117
			throw new ValidationException(implode("\n\n", $errors));
118
		}
119
	}
120
121
	/**
122
	 * Clear out all existing configuration
123
	 */
124
	public function reset()
125
	{
126
		$this->config = new Configuration();
127
	}
128
129
	private function mapCollection(MappingContext $context, \Closure $mapFunc)
130
	{
131
		$destination = array();
132
		foreach ($context->getSource() as $source) {
133
			$destination[] = $mapFunc($source, $context->getDestination());
134
		}
135
		return $destination;
136
	}
137
138
	private function mapObject(MappingContext $context, \Closure $mapFunc)
0 ignored issues
show
Documentation introduced by
The return type could not be reliably inferred; please add a @return annotation.

Our type inference engine in quite powerful, but sometimes the code does not provide enough clues to go by. In these cases we request you to add a @return annotation as described here.

Loading history...
139
	{
140
		return $mapFunc($context->getSource(), $context->getDestination());
141
	}
142
}
143