Test Failed
Push — master ( e3cf61...f26703 )
by Alain
01:54
created
src/View/Engine/PHPEngine.php 3 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -51,7 +51,7 @@
 block discarded – undo
51 51
      * @param string $uri     URI to render.
52 52
      * @param array  $context Context in which to render.
53 53
      *
54
-     * @return callable Rendering callback.
54
+     * @return \Closure Rendering callback.
55 55
      * @throws FailedToLoadView If the View URI is not accessible or readable.
56 56
      * @throws FailedToLoadView If the View URI could not be loaded.
57 57
      */
Please login to merge, or discard this patch.
Indentation   +63 added lines, -63 removed lines patch added patch discarded remove patch
@@ -26,75 +26,75 @@
 block discarded – undo
26 26
 class PHPEngine extends AbstractEngine
27 27
 {
28 28
 
29
-    const PHP_EXTENSION = '.php';
29
+	const PHP_EXTENSION = '.php';
30 30
 
31
-    /**
32
-     * Check whether the Findable can handle an individual criterion.
33
-     *
34
-     * @since 0.1.0
35
-     *
36
-     * @param mixed $criterion Criterion to check.
37
-     *
38
-     * @return bool Whether the Findable can handle the criterion.
39
-     */
40
-    public function canHandle($criterion): bool
41
-    {
42
-        return URIHelper::hasExtension($criterion, static::PHP_EXTENSION)
43
-            && is_readable($criterion);
44
-    }
31
+	/**
32
+	 * Check whether the Findable can handle an individual criterion.
33
+	 *
34
+	 * @since 0.1.0
35
+	 *
36
+	 * @param mixed $criterion Criterion to check.
37
+	 *
38
+	 * @return bool Whether the Findable can handle the criterion.
39
+	 */
40
+	public function canHandle($criterion): bool
41
+	{
42
+		return URIHelper::hasExtension($criterion, static::PHP_EXTENSION)
43
+			&& is_readable($criterion);
44
+	}
45 45
 
46
-    /**
47
-     * Get the rendering callback for a given URI.
48
-     *
49
-     * @since 0.1.0
50
-     *
51
-     * @param string $uri     URI to render.
52
-     * @param array  $context Context in which to render.
53
-     *
54
-     * @return callable Rendering callback.
55
-     * @throws FailedToLoadView If the View URI is not accessible or readable.
56
-     * @throws FailedToLoadView If the View URI could not be loaded.
57
-     */
58
-    public function getRenderCallback(string $uri, array $context = []): callable
59
-    {
60
-        if (! is_readable($uri)) {
61
-            throw new FailedToLoadView(
62
-                sprintf(
63
-                    _('The View URI "%1$s" is not accessible or readable.'),
64
-                    $uri
65
-                )
66
-            );
67
-        }
46
+	/**
47
+	 * Get the rendering callback for a given URI.
48
+	 *
49
+	 * @since 0.1.0
50
+	 *
51
+	 * @param string $uri     URI to render.
52
+	 * @param array  $context Context in which to render.
53
+	 *
54
+	 * @return callable Rendering callback.
55
+	 * @throws FailedToLoadView If the View URI is not accessible or readable.
56
+	 * @throws FailedToLoadView If the View URI could not be loaded.
57
+	 */
58
+	public function getRenderCallback(string $uri, array $context = []): callable
59
+	{
60
+		if (! is_readable($uri)) {
61
+			throw new FailedToLoadView(
62
+				sprintf(
63
+					_('The View URI "%1$s" is not accessible or readable.'),
64
+					$uri
65
+				)
66
+			);
67
+		}
68 68
 
69
-        $closure = function () use ($uri, $context) {
69
+		$closure = function () use ($uri, $context) {
70 70
 
71
-            // Save current buffering level so we can backtrack in case of an error.
72
-            // This is needed because the view itself might also add an unknown number of output buffering levels.
73
-            $bufferLevel = ob_get_level();
74
-            ob_start();
71
+			// Save current buffering level so we can backtrack in case of an error.
72
+			// This is needed because the view itself might also add an unknown number of output buffering levels.
73
+			$bufferLevel = ob_get_level();
74
+			ob_start();
75 75
 
76
-            try {
77
-                include $uri;
78
-            } catch (Exception $exception) {
79
-                // Remove whatever levels were added up until now.
80
-                while (ob_get_level() > $bufferLevel) {
81
-                    ob_end_clean();
82
-                }
76
+			try {
77
+				include $uri;
78
+			} catch (Exception $exception) {
79
+				// Remove whatever levels were added up until now.
80
+				while (ob_get_level() > $bufferLevel) {
81
+					ob_end_clean();
82
+				}
83 83
 
84
-                throw new FailedToLoadView(
85
-                    sprintf(
86
-                        _('Could not load the View URI "%1$s". Reason: "%2$s".'),
87
-                        $uri,
88
-                        $exception->getMessage()
89
-                    ),
90
-                    $exception->getCode(),
91
-                    $exception
92
-                );
93
-            }
84
+				throw new FailedToLoadView(
85
+					sprintf(
86
+						_('Could not load the View URI "%1$s". Reason: "%2$s".'),
87
+						$uri,
88
+						$exception->getMessage()
89
+					),
90
+					$exception->getCode(),
91
+					$exception
92
+				);
93
+			}
94 94
 
95
-            return ob_get_clean();
96
-        };
95
+			return ob_get_clean();
96
+		};
97 97
 
98
-        return $closure;
99
-    }
98
+		return $closure;
99
+	}
100 100
 }
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -57,7 +57,7 @@  discard block
 block discarded – undo
57 57
      */
58 58
     public function getRenderCallback(string $uri, array $context = []): callable
59 59
     {
60
-        if (! is_readable($uri)) {
60
+        if ( ! is_readable($uri)) {
61 61
             throw new FailedToLoadView(
62 62
                 sprintf(
63 63
                     _('The View URI "%1$s" is not accessible or readable.'),
@@ -66,7 +66,7 @@  discard block
 block discarded – undo
66 66
             );
67 67
         }
68 68
 
69
-        $closure = function () use ($uri, $context) {
69
+        $closure = function() use ($uri, $context) {
70 70
 
71 71
             // Save current buffering level so we can backtrack in case of an error.
72 72
             // This is needed because the view itself might also add an unknown number of output buffering levels.
Please login to merge, or discard this patch.
src/View/ViewBuilder.php 3 patches
Doc Comments   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -94,7 +94,7 @@  discard block
 block discarded – undo
94 94
      * @since 0.1.0
95 95
      *
96 96
      * @param string $view View identifier to create a view for.
97
-     * @param mixed  $type Type of view to create.
97
+     * @param string|null  $type Type of view to create.
98 98
      *
99 99
      * @return View Instance of the requested view.
100 100
      * @throws FailedToInstantiateView If the view could not be instantiated.
@@ -199,7 +199,7 @@  discard block
 block discarded – undo
199 199
      *
200 200
      * @since 0.1.0
201 201
      *
202
-     * @param array $criteria Criteria to match.
202
+     * @param string[] $criteria Criteria to match.
203 203
      *
204 204
      * @return string|false URI of the requested view, or false if not found.
205 205
      */
@@ -281,7 +281,7 @@  discard block
 block discarded – undo
281 281
      *
282 282
      * @since 0.2.0
283 283
      *
284
-     * @param ConfigInterface|array $config Config to merge with defaults.
284
+     * @param null|ConfigInterface $config Config to merge with defaults.
285 285
      *
286 286
      * @return ConfigInterface Configuration passed in through the constructor.
287 287
      */
Please login to merge, or discard this patch.
Indentation   +300 added lines, -300 removed lines patch added patch discarded remove patch
@@ -33,305 +33,305 @@
 block discarded – undo
33 33
 class ViewBuilder
34 34
 {
35 35
 
36
-    use ConfigTrait;
37
-
38
-    const ENGINE_FINDER_KEY = 'EngineFinder';
39
-    const VIEW_FINDER_KEY = 'ViewFinder';
40
-
41
-    /**
42
-     * BaseViewFinder instance.
43
-     *
44
-     * @since 0.1.0
45
-     *
46
-     * @var ViewFinder
47
-     */
48
-    protected $viewFinder;
49
-
50
-    /**
51
-     * BaseEngineFinder instance.
52
-     *
53
-     * @since 0.1.0
54
-     *
55
-     * @var EngineFinder
56
-     */
57
-    protected $engineFinder;
58
-
59
-    /**
60
-     * Locations to scan for views.
61
-     *
62
-     * @since 0.1.0
63
-     *
64
-     * @var Locations
65
-     */
66
-    protected $locations;
67
-
68
-    /**
69
-     * Cache of already resolved view paths.
70
-     *
71
-     * @since 0.4.6
72
-     *
73
-     * @var string[]
74
-     */
75
-    protected $viewPathCache = [];
76
-
77
-    /**
78
-     * Instantiate a ViewBuilder object.
79
-     *
80
-     * @since 0.1.0
81
-     *
82
-     * @param ConfigInterface   $config       Optional. Configuration settings.
83
-     * @param ViewFinder|null   $viewFinder   Optional. ViewFinder instance.
84
-     * @param EngineFinder|null $engineFinder Optional. EngineFinder instance.
85
-     *
86
-     * @throws FailedToProcessConfigException If the config could not be processed.
87
-     */
88
-    public function __construct(
89
-        ConfigInterface $config = null,
90
-        ViewFinder $viewFinder = null,
91
-        EngineFinder $engineFinder = null
92
-    ) {
93
-        $this->processConfig($this->getConfig($config));
94
-        $this->viewFinder   = $viewFinder ?? $this->getViewFinder();
95
-        $this->engineFinder = $engineFinder ?? $this->getEngineFinder();
96
-        $this->locations    = new Locations();
97
-    }
98
-
99
-    /**
100
-     * Create a new view for a given URI.
101
-     *
102
-     * @since 0.1.0
103
-     *
104
-     * @param string $view View identifier to create a view for.
105
-     * @param mixed  $type Type of view to create.
106
-     *
107
-     * @return View Instance of the requested view.
108
-     * @throws FailedToInstantiateView If the view could not be instantiated.
109
-     */
110
-    public function create(string $view, $type = null): View
111
-    {
112
-        if (!array_key_exists($view, $this->viewPathCache)) {
113
-            $uri    = $this->scanLocations([$view]);
114
-            $engine = $uri ? $this->getEngine($uri) : false;
115
-
116
-            $this->viewPathCache[$view]           = [];
117
-            $this->viewPathCache[$view]['uri']    = $uri;
118
-            $this->viewPathCache[$view]['engine'] = $engine;
119
-
120
-            if ($type===null) {
121
-                $this->viewPathCache[$view]['view'] = $uri
122
-                    ? $this->getView($uri, $engine)
123
-                    : false;
124
-            }
125
-        } else {
126
-            $uri    = $this->viewPathCache[$view]['uri'];
127
-            $engine = $this->viewPathCache[$view]['engine'];
128
-        }
129
-
130
-
131
-        if (!$uri || !$engine) {
132
-            return $this->getViewFinder()->getNullObject();
133
-        }
134
-
135
-        if ($type === null) {
136
-            return $this->viewPathCache[$view]['view'];
137
-        }
138
-
139
-        return $this->getView($uri, $engine, $type);
140
-    }
141
-
142
-    /**
143
-     * Get an Engine that can deal with the given URI.
144
-     *
145
-     * @since 0.1.0
146
-     *
147
-     * @param string $uri URI to get an engine for.
148
-     *
149
-     * @return Engine Instance of an engine that can deal with the given URI.
150
-     */
151
-    public function getEngine(string $uri): Engine
152
-    {
153
-        return $this->getEngineFinder()->find([$uri]);
154
-    }
155
-
156
-    /**
157
-     * Get a view for a given URI, engine and type.
158
-     *
159
-     * @since 0.1.0
160
-     *
161
-     * @param string $uri    URI to get a view for.
162
-     * @param Engine $engine Engine to use for the view.
163
-     * @param mixed  $type   Type of view to get.
164
-     *
165
-     * @return View View that matches the given requirements.
166
-     * @throws FailedToInstantiateView If the view could not be instantiated.
167
-     */
168
-    public function getView(string $uri, Engine $engine, $type = null): View
169
-    {
170
-        if (null === $type) {
171
-            $view = $this->getViewFinder()->find([$uri], $engine);
172
-            return $view->setBuilder( $this );
173
-        }
174
-
175
-        return $this->resolveType($type, $uri, $engine);
176
-    }
177
-
178
-    /**
179
-     * Get the ViewFinder instance.
180
-     *
181
-     * @since 0.1.0
182
-     *
183
-     * @return ViewFinder Instance of a BaseViewFinder.
184
-     */
185
-    public function getViewFinder(): ViewFinder
186
-    {
187
-        return $this->viewFinder ?? $this->getFinder(static::VIEW_FINDER_KEY);
188
-    }
189
-
190
-    /**
191
-     * Get the EngineFinder instance.
192
-     *
193
-     * @since 0.1.0
194
-     *
195
-     * @return EngineFinder Instance of a BaseEngineFinder.
196
-     */
197
-    public function getEngineFinder(): EngineFinder
198
-    {
199
-        return $this->engineFinder ?? $this->getFinder(static::ENGINE_FINDER_KEY);
200
-    }
201
-
202
-    /**
203
-     * Add a location to scan with the BaseViewFinder.
204
-     *
205
-     * @since 0.1.0
206
-     *
207
-     * @param Location $location Location to scan with the BaseViewFinder.
208
-     *
209
-     * @return static
210
-     */
211
-    public function addLocation(Location $location)
212
-    {
213
-        $this->locations->add($location);
214
-
215
-        unset( $this->viewPathCache );
216
-        $this->viewPathCache = [];
217
-
218
-        return $this;
219
-    }
220
-
221
-    /**
222
-     * Get the collection of locations registered with this ViewBuilder.
223
-     *
224
-     * @since 0.1.3
225
-     *
226
-     * @return Locations Collection of locations.
227
-     */
228
-    public function getLocations()
229
-    {
230
-        return $this->locations;
231
-    }
232
-
233
-    /**
234
-     * Scan Locations for an URI that matches the specified criteria.
235
-     *
236
-     * @since 0.1.0
237
-     *
238
-     * @param array $criteria Criteria to match.
239
-     *
240
-     * @return string|false URI of the requested view, or false if not found.
241
-     */
242
-    public function scanLocations(array $criteria)
243
-    {
244
-        $uris = $this->locations->map(function ($location) use ($criteria) {
245
-            /** @var Location $location */
246
-            return $location->getURI($criteria);
247
-        })->filter(function ($uri) {
248
-            return false !== $uri;
249
-        });
36
+	use ConfigTrait;
37
+
38
+	const ENGINE_FINDER_KEY = 'EngineFinder';
39
+	const VIEW_FINDER_KEY = 'ViewFinder';
40
+
41
+	/**
42
+	 * BaseViewFinder instance.
43
+	 *
44
+	 * @since 0.1.0
45
+	 *
46
+	 * @var ViewFinder
47
+	 */
48
+	protected $viewFinder;
49
+
50
+	/**
51
+	 * BaseEngineFinder instance.
52
+	 *
53
+	 * @since 0.1.0
54
+	 *
55
+	 * @var EngineFinder
56
+	 */
57
+	protected $engineFinder;
58
+
59
+	/**
60
+	 * Locations to scan for views.
61
+	 *
62
+	 * @since 0.1.0
63
+	 *
64
+	 * @var Locations
65
+	 */
66
+	protected $locations;
67
+
68
+	/**
69
+	 * Cache of already resolved view paths.
70
+	 *
71
+	 * @since 0.4.6
72
+	 *
73
+	 * @var string[]
74
+	 */
75
+	protected $viewPathCache = [];
76
+
77
+	/**
78
+	 * Instantiate a ViewBuilder object.
79
+	 *
80
+	 * @since 0.1.0
81
+	 *
82
+	 * @param ConfigInterface   $config       Optional. Configuration settings.
83
+	 * @param ViewFinder|null   $viewFinder   Optional. ViewFinder instance.
84
+	 * @param EngineFinder|null $engineFinder Optional. EngineFinder instance.
85
+	 *
86
+	 * @throws FailedToProcessConfigException If the config could not be processed.
87
+	 */
88
+	public function __construct(
89
+		ConfigInterface $config = null,
90
+		ViewFinder $viewFinder = null,
91
+		EngineFinder $engineFinder = null
92
+	) {
93
+		$this->processConfig($this->getConfig($config));
94
+		$this->viewFinder   = $viewFinder ?? $this->getViewFinder();
95
+		$this->engineFinder = $engineFinder ?? $this->getEngineFinder();
96
+		$this->locations    = new Locations();
97
+	}
98
+
99
+	/**
100
+	 * Create a new view for a given URI.
101
+	 *
102
+	 * @since 0.1.0
103
+	 *
104
+	 * @param string $view View identifier to create a view for.
105
+	 * @param mixed  $type Type of view to create.
106
+	 *
107
+	 * @return View Instance of the requested view.
108
+	 * @throws FailedToInstantiateView If the view could not be instantiated.
109
+	 */
110
+	public function create(string $view, $type = null): View
111
+	{
112
+		if (!array_key_exists($view, $this->viewPathCache)) {
113
+			$uri    = $this->scanLocations([$view]);
114
+			$engine = $uri ? $this->getEngine($uri) : false;
115
+
116
+			$this->viewPathCache[$view]           = [];
117
+			$this->viewPathCache[$view]['uri']    = $uri;
118
+			$this->viewPathCache[$view]['engine'] = $engine;
119
+
120
+			if ($type===null) {
121
+				$this->viewPathCache[$view]['view'] = $uri
122
+					? $this->getView($uri, $engine)
123
+					: false;
124
+			}
125
+		} else {
126
+			$uri    = $this->viewPathCache[$view]['uri'];
127
+			$engine = $this->viewPathCache[$view]['engine'];
128
+		}
129
+
130
+
131
+		if (!$uri || !$engine) {
132
+			return $this->getViewFinder()->getNullObject();
133
+		}
134
+
135
+		if ($type === null) {
136
+			return $this->viewPathCache[$view]['view'];
137
+		}
138
+
139
+		return $this->getView($uri, $engine, $type);
140
+	}
141
+
142
+	/**
143
+	 * Get an Engine that can deal with the given URI.
144
+	 *
145
+	 * @since 0.1.0
146
+	 *
147
+	 * @param string $uri URI to get an engine for.
148
+	 *
149
+	 * @return Engine Instance of an engine that can deal with the given URI.
150
+	 */
151
+	public function getEngine(string $uri): Engine
152
+	{
153
+		return $this->getEngineFinder()->find([$uri]);
154
+	}
155
+
156
+	/**
157
+	 * Get a view for a given URI, engine and type.
158
+	 *
159
+	 * @since 0.1.0
160
+	 *
161
+	 * @param string $uri    URI to get a view for.
162
+	 * @param Engine $engine Engine to use for the view.
163
+	 * @param mixed  $type   Type of view to get.
164
+	 *
165
+	 * @return View View that matches the given requirements.
166
+	 * @throws FailedToInstantiateView If the view could not be instantiated.
167
+	 */
168
+	public function getView(string $uri, Engine $engine, $type = null): View
169
+	{
170
+		if (null === $type) {
171
+			$view = $this->getViewFinder()->find([$uri], $engine);
172
+			return $view->setBuilder( $this );
173
+		}
174
+
175
+		return $this->resolveType($type, $uri, $engine);
176
+	}
177
+
178
+	/**
179
+	 * Get the ViewFinder instance.
180
+	 *
181
+	 * @since 0.1.0
182
+	 *
183
+	 * @return ViewFinder Instance of a BaseViewFinder.
184
+	 */
185
+	public function getViewFinder(): ViewFinder
186
+	{
187
+		return $this->viewFinder ?? $this->getFinder(static::VIEW_FINDER_KEY);
188
+	}
189
+
190
+	/**
191
+	 * Get the EngineFinder instance.
192
+	 *
193
+	 * @since 0.1.0
194
+	 *
195
+	 * @return EngineFinder Instance of a BaseEngineFinder.
196
+	 */
197
+	public function getEngineFinder(): EngineFinder
198
+	{
199
+		return $this->engineFinder ?? $this->getFinder(static::ENGINE_FINDER_KEY);
200
+	}
201
+
202
+	/**
203
+	 * Add a location to scan with the BaseViewFinder.
204
+	 *
205
+	 * @since 0.1.0
206
+	 *
207
+	 * @param Location $location Location to scan with the BaseViewFinder.
208
+	 *
209
+	 * @return static
210
+	 */
211
+	public function addLocation(Location $location)
212
+	{
213
+		$this->locations->add($location);
214
+
215
+		unset( $this->viewPathCache );
216
+		$this->viewPathCache = [];
217
+
218
+		return $this;
219
+	}
220
+
221
+	/**
222
+	 * Get the collection of locations registered with this ViewBuilder.
223
+	 *
224
+	 * @since 0.1.3
225
+	 *
226
+	 * @return Locations Collection of locations.
227
+	 */
228
+	public function getLocations()
229
+	{
230
+		return $this->locations;
231
+	}
232
+
233
+	/**
234
+	 * Scan Locations for an URI that matches the specified criteria.
235
+	 *
236
+	 * @since 0.1.0
237
+	 *
238
+	 * @param array $criteria Criteria to match.
239
+	 *
240
+	 * @return string|false URI of the requested view, or false if not found.
241
+	 */
242
+	public function scanLocations(array $criteria)
243
+	{
244
+		$uris = $this->locations->map(function ($location) use ($criteria) {
245
+			/** @var Location $location */
246
+			return $location->getURI($criteria);
247
+		})->filter(function ($uri) {
248
+			return false !== $uri;
249
+		});
250 250
         
251
-        // Fall back for absolute paths on current filesystem.
252
-        if ($uris->isEmpty()) {
253
-            foreach ($criteria as $criterion) {
254
-                if (file_exists($criterion)) {
255
-                    return $criterion;
256
-                }
257
-            }
258
-        }
259
-
260
-        return $uris->isEmpty() ? false : $uris->first();
261
-    }
262
-
263
-    /**
264
-     * Get a finder instance.
265
-     *
266
-     * @since 0.1.1
267
-     *
268
-     * @param string $key Configuration key to use.
269
-     *
270
-     * @return ViewFinder|EngineFinder The requested finder instance.
271
-     */
272
-    protected function getFinder($key)
273
-    {
274
-        $finderClass = $this->config->getKey($key, 'ClassName');
275
-        return new $finderClass($this->config->getSubConfig($key));
276
-    }
277
-
278
-    /**
279
-     * Resolve the view type.
280
-     *
281
-     * @since 0.1.0
282
-     *
283
-     * @param mixed       $type   Type of view that was requested.
284
-     * @param string      $uri    URI to get a view for.
285
-     * @param Engine|null $engine Engine to use for the view.
286
-     *
287
-     * @return View Resolved View object.
288
-     * @throws FailedToInstantiateView If the view type could not be resolved.
289
-     */
290
-    protected function resolveType($type, string $uri, Engine $engine = null): View
291
-    {
292
-        $configKey = [static::VIEW_FINDER_KEY, 'Views', $type];
293
-
294
-        if (is_string($type) && $this->config->hasKey($configKey)) {
295
-            $className = $this->config->getKey($configKey);
296
-            $type      = new $className($uri, $engine, $this);
297
-        }
298
-
299
-        if (is_string($type)) {
300
-            $type = new $type($uri, $engine, $this);
301
-        }
302
-
303
-        if (is_callable($type)) {
304
-            $type = $type($uri, $engine, $this);
305
-        }
306
-
307
-        if (! $type instanceof View) {
308
-            throw new FailedToInstantiateView(
309
-                sprintf(
310
-                    _('Could not instantiate view "%s".'),
311
-                    serialize($type)
312
-                )
313
-            );
314
-        }
315
-
316
-        return $type;
317
-    }
318
-
319
-    /**
320
-     * Get the configuration to use in the ViewBuilder.
321
-     *
322
-     * @since 0.2.0
323
-     *
324
-     * @param ConfigInterface|array $config Config to merge with defaults.
325
-     *
326
-     * @return ConfigInterface Configuration passed in through the constructor.
327
-     */
328
-    protected function getConfig($config = []): ConfigInterface
329
-    {
330
-        $defaults = ConfigFactory::create(dirname(__DIR__, 2) . '/config/defaults.php', $config);
331
-        $config   = $config
332
-            ? ConfigFactory::createFromArray(array_merge_recursive($defaults->getArrayCopy(), $config->getArrayCopy()))
333
-            : $defaults;
334
-
335
-        return $config->getSubConfig('BrightNucleus\View');
336
-    }
251
+		// Fall back for absolute paths on current filesystem.
252
+		if ($uris->isEmpty()) {
253
+			foreach ($criteria as $criterion) {
254
+				if (file_exists($criterion)) {
255
+					return $criterion;
256
+				}
257
+			}
258
+		}
259
+
260
+		return $uris->isEmpty() ? false : $uris->first();
261
+	}
262
+
263
+	/**
264
+	 * Get a finder instance.
265
+	 *
266
+	 * @since 0.1.1
267
+	 *
268
+	 * @param string $key Configuration key to use.
269
+	 *
270
+	 * @return ViewFinder|EngineFinder The requested finder instance.
271
+	 */
272
+	protected function getFinder($key)
273
+	{
274
+		$finderClass = $this->config->getKey($key, 'ClassName');
275
+		return new $finderClass($this->config->getSubConfig($key));
276
+	}
277
+
278
+	/**
279
+	 * Resolve the view type.
280
+	 *
281
+	 * @since 0.1.0
282
+	 *
283
+	 * @param mixed       $type   Type of view that was requested.
284
+	 * @param string      $uri    URI to get a view for.
285
+	 * @param Engine|null $engine Engine to use for the view.
286
+	 *
287
+	 * @return View Resolved View object.
288
+	 * @throws FailedToInstantiateView If the view type could not be resolved.
289
+	 */
290
+	protected function resolveType($type, string $uri, Engine $engine = null): View
291
+	{
292
+		$configKey = [static::VIEW_FINDER_KEY, 'Views', $type];
293
+
294
+		if (is_string($type) && $this->config->hasKey($configKey)) {
295
+			$className = $this->config->getKey($configKey);
296
+			$type      = new $className($uri, $engine, $this);
297
+		}
298
+
299
+		if (is_string($type)) {
300
+			$type = new $type($uri, $engine, $this);
301
+		}
302
+
303
+		if (is_callable($type)) {
304
+			$type = $type($uri, $engine, $this);
305
+		}
306
+
307
+		if (! $type instanceof View) {
308
+			throw new FailedToInstantiateView(
309
+				sprintf(
310
+					_('Could not instantiate view "%s".'),
311
+					serialize($type)
312
+				)
313
+			);
314
+		}
315
+
316
+		return $type;
317
+	}
318
+
319
+	/**
320
+	 * Get the configuration to use in the ViewBuilder.
321
+	 *
322
+	 * @since 0.2.0
323
+	 *
324
+	 * @param ConfigInterface|array $config Config to merge with defaults.
325
+	 *
326
+	 * @return ConfigInterface Configuration passed in through the constructor.
327
+	 */
328
+	protected function getConfig($config = []): ConfigInterface
329
+	{
330
+		$defaults = ConfigFactory::create(dirname(__DIR__, 2) . '/config/defaults.php', $config);
331
+		$config   = $config
332
+			? ConfigFactory::createFromArray(array_merge_recursive($defaults->getArrayCopy(), $config->getArrayCopy()))
333
+			: $defaults;
334
+
335
+		return $config->getSubConfig('BrightNucleus\View');
336
+	}
337 337
 }
Please login to merge, or discard this patch.
Spacing   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -109,7 +109,7 @@  discard block
 block discarded – undo
109 109
      */
110 110
     public function create(string $view, $type = null): View
111 111
     {
112
-        if (!array_key_exists($view, $this->viewPathCache)) {
112
+        if ( ! array_key_exists($view, $this->viewPathCache)) {
113 113
             $uri    = $this->scanLocations([$view]);
114 114
             $engine = $uri ? $this->getEngine($uri) : false;
115 115
 
@@ -117,7 +117,7 @@  discard block
 block discarded – undo
117 117
             $this->viewPathCache[$view]['uri']    = $uri;
118 118
             $this->viewPathCache[$view]['engine'] = $engine;
119 119
 
120
-            if ($type===null) {
120
+            if ($type === null) {
121 121
                 $this->viewPathCache[$view]['view'] = $uri
122 122
                     ? $this->getView($uri, $engine)
123 123
                     : false;
@@ -128,7 +128,7 @@  discard block
 block discarded – undo
128 128
         }
129 129
 
130 130
 
131
-        if (!$uri || !$engine) {
131
+        if ( ! $uri || ! $engine) {
132 132
             return $this->getViewFinder()->getNullObject();
133 133
         }
134 134
 
@@ -169,7 +169,7 @@  discard block
 block discarded – undo
169 169
     {
170 170
         if (null === $type) {
171 171
             $view = $this->getViewFinder()->find([$uri], $engine);
172
-            return $view->setBuilder( $this );
172
+            return $view->setBuilder($this);
173 173
         }
174 174
 
175 175
         return $this->resolveType($type, $uri, $engine);
@@ -212,7 +212,7 @@  discard block
 block discarded – undo
212 212
     {
213 213
         $this->locations->add($location);
214 214
 
215
-        unset( $this->viewPathCache );
215
+        unset($this->viewPathCache);
216 216
         $this->viewPathCache = [];
217 217
 
218 218
         return $this;
@@ -241,10 +241,10 @@  discard block
 block discarded – undo
241 241
      */
242 242
     public function scanLocations(array $criteria)
243 243
     {
244
-        $uris = $this->locations->map(function ($location) use ($criteria) {
244
+        $uris = $this->locations->map(function($location) use ($criteria) {
245 245
             /** @var Location $location */
246 246
             return $location->getURI($criteria);
247
-        })->filter(function ($uri) {
247
+        })->filter(function($uri) {
248 248
             return false !== $uri;
249 249
         });
250 250
         
@@ -304,7 +304,7 @@  discard block
 block discarded – undo
304 304
             $type = $type($uri, $engine, $this);
305 305
         }
306 306
 
307
-        if (! $type instanceof View) {
307
+        if ( ! $type instanceof View) {
308 308
             throw new FailedToInstantiateView(
309 309
                 sprintf(
310 310
                     _('Could not instantiate view "%s".'),
@@ -327,7 +327,7 @@  discard block
 block discarded – undo
327 327
      */
328 328
     protected function getConfig($config = []): ConfigInterface
329 329
     {
330
-        $defaults = ConfigFactory::create(dirname(__DIR__, 2) . '/config/defaults.php', $config);
330
+        $defaults = ConfigFactory::create(dirname(__DIR__, 2).'/config/defaults.php', $config);
331 331
         $config   = $config
332 332
             ? ConfigFactory::createFromArray(array_merge_recursive($defaults->getArrayCopy(), $config->getArrayCopy()))
333 333
             : $defaults;
Please login to merge, or discard this patch.
src/Views.php 1 patch
Indentation   +85 added lines, -85 removed lines patch added patch discarded remove patch
@@ -28,97 +28,97 @@
 block discarded – undo
28 28
 class Views
29 29
 {
30 30
 
31
-    /**
32
-     * ViewBuilder Instance.
33
-     *
34
-     * @since 0.1.0
35
-     *
36
-     * @var ViewBuilder
37
-     */
38
-    protected static $viewBuilder;
31
+	/**
32
+	 * ViewBuilder Instance.
33
+	 *
34
+	 * @since 0.1.0
35
+	 *
36
+	 * @var ViewBuilder
37
+	 */
38
+	protected static $viewBuilder;
39 39
 
40
-    /**
41
-     * Add a location to the ViewBuilder.
42
-     *
43
-     * @since 0.1.0
44
-     *
45
-     * @param Location $location Location to add.
46
-     *
47
-     * @throws FailedToProcessConfigException If the Config could not be processed.
48
-     */
49
-    public static function addLocation(Location $location)
50
-    {
51
-        $viewBuilder = static::getViewBuilder();
52
-        $viewBuilder->addLocation($location);
53
-    }
40
+	/**
41
+	 * Add a location to the ViewBuilder.
42
+	 *
43
+	 * @since 0.1.0
44
+	 *
45
+	 * @param Location $location Location to add.
46
+	 *
47
+	 * @throws FailedToProcessConfigException If the Config could not be processed.
48
+	 */
49
+	public static function addLocation(Location $location)
50
+	{
51
+		$viewBuilder = static::getViewBuilder();
52
+		$viewBuilder->addLocation($location);
53
+	}
54 54
 
55
-    /**
56
-     * Get the ViewBuilder instance.
57
-     *
58
-     * @since 0.1.0
59
-     *
60
-     * @return ViewBuilder
61
-     * @throws FailedToProcessConfigException If the Config could not be processed.
62
-     */
63
-    public static function getViewBuilder()
64
-    {
65
-        if (null === static::$viewBuilder) {
66
-            static::$viewBuilder = static::instantiateViewBuilder();
67
-        }
55
+	/**
56
+	 * Get the ViewBuilder instance.
57
+	 *
58
+	 * @since 0.1.0
59
+	 *
60
+	 * @return ViewBuilder
61
+	 * @throws FailedToProcessConfigException If the Config could not be processed.
62
+	 */
63
+	public static function getViewBuilder()
64
+	{
65
+		if (null === static::$viewBuilder) {
66
+			static::$viewBuilder = static::instantiateViewBuilder();
67
+		}
68 68
 
69
-        return static::$viewBuilder;
70
-    }
69
+		return static::$viewBuilder;
70
+	}
71 71
 
72
-    /**
73
-     * Instantiate the ViewBuilder.
74
-     *
75
-     * @since 0.1.0
76
-     *
77
-     * @param ConfigInterface|null $config Optional. Configuration to pass into the ViewBuilder.
78
-     *
79
-     * @return ViewBuilder Instance of the ViewBuilder.
80
-     * @throws FailedToProcessConfigException If the Config could not be processed.
81
-     */
82
-    public static function instantiateViewBuilder(ConfigInterface $config = null)
83
-    {
84
-        return static::$viewBuilder = new ViewBuilder($config);
85
-    }
72
+	/**
73
+	 * Instantiate the ViewBuilder.
74
+	 *
75
+	 * @since 0.1.0
76
+	 *
77
+	 * @param ConfigInterface|null $config Optional. Configuration to pass into the ViewBuilder.
78
+	 *
79
+	 * @return ViewBuilder Instance of the ViewBuilder.
80
+	 * @throws FailedToProcessConfigException If the Config could not be processed.
81
+	 */
82
+	public static function instantiateViewBuilder(ConfigInterface $config = null)
83
+	{
84
+		return static::$viewBuilder = new ViewBuilder($config);
85
+	}
86 86
 
87
-    /**
88
-     * Create a new view for a given URI.
89
-     *
90
-     * @since 0.1.0
91
-     *
92
-     * @param string      $view View identifier to create a view for.
93
-     * @param string|null $type Type of view to create.
94
-     *
95
-     * @return View Instance of the requested view.
96
-     * @throws FailedToProcessConfigException If the Config could not be processed.
97
-     */
98
-    public static function create($view, $type = null)
99
-    {
100
-        $viewBuilder = static::getViewBuilder();
87
+	/**
88
+	 * Create a new view for a given URI.
89
+	 *
90
+	 * @since 0.1.0
91
+	 *
92
+	 * @param string      $view View identifier to create a view for.
93
+	 * @param string|null $type Type of view to create.
94
+	 *
95
+	 * @return View Instance of the requested view.
96
+	 * @throws FailedToProcessConfigException If the Config could not be processed.
97
+	 */
98
+	public static function create($view, $type = null)
99
+	{
100
+		$viewBuilder = static::getViewBuilder();
101 101
 
102
-        return $viewBuilder->create($view, $type);
103
-    }
102
+		return $viewBuilder->create($view, $type);
103
+	}
104 104
 
105
-    /**
106
-     * Render a view for a given URI.
107
-     *
108
-     * @since 0.1.0
109
-     *
110
-     * @param string      $view    View identifier to create a view for.
111
-     * @param array       $context Optional. The context in which to render the view.
112
-     * @param string|null $type    Type of view to create.
113
-     *
114
-     * @return string Rendered HTML content.
115
-     * @throws FailedToProcessConfigException If the Config could not be processed.
116
-     */
117
-    public static function render($view, array $context = [], $type = null)
118
-    {
119
-        $viewBuilder = static::getViewBuilder();
120
-        $viewObject  = $viewBuilder->create($view, $type);
105
+	/**
106
+	 * Render a view for a given URI.
107
+	 *
108
+	 * @since 0.1.0
109
+	 *
110
+	 * @param string      $view    View identifier to create a view for.
111
+	 * @param array       $context Optional. The context in which to render the view.
112
+	 * @param string|null $type    Type of view to create.
113
+	 *
114
+	 * @return string Rendered HTML content.
115
+	 * @throws FailedToProcessConfigException If the Config could not be processed.
116
+	 */
117
+	public static function render($view, array $context = [], $type = null)
118
+	{
119
+		$viewBuilder = static::getViewBuilder();
120
+		$viewObject  = $viewBuilder->create($view, $type);
121 121
 
122
-        return $viewObject->render($context);
123
-    }
122
+		return $viewObject->render($context);
123
+	}
124 124
 }
Please login to merge, or discard this patch.
src/View/Location/URIs.php 1 patch
Indentation   +14 added lines, -14 removed lines patch added patch discarded remove patch
@@ -25,19 +25,19 @@
 block discarded – undo
25 25
 class URIs extends ArrayCollection
26 26
 {
27 27
 
28
-    /**
29
-     * Create a new URIs from a Symfony Finder instance.
30
-     *
31
-     * @since 0.1.3
32
-     *
33
-     * @param Finder $finder The Finder instance to create the URI collection from.
34
-     *
35
-     * @return URIs New URIs instance.
36
-     */
37
-    public static function fromFinder(Finder $finder): URIs
38
-    {
39
-        $elements = array_keys(iterator_to_array($finder));
28
+	/**
29
+	 * Create a new URIs from a Symfony Finder instance.
30
+	 *
31
+	 * @since 0.1.3
32
+	 *
33
+	 * @param Finder $finder The Finder instance to create the URI collection from.
34
+	 *
35
+	 * @return URIs New URIs instance.
36
+	 */
37
+	public static function fromFinder(Finder $finder): URIs
38
+	{
39
+		$elements = array_keys(iterator_to_array($finder));
40 40
 
41
-        return new static($elements);
42
-    }
41
+		return new static($elements);
42
+	}
43 43
 }
Please login to merge, or discard this patch.
src/View/Location/Location.php 1 patch
Indentation   +20 added lines, -20 removed lines patch added patch discarded remove patch
@@ -22,25 +22,25 @@
 block discarded – undo
22 22
 interface Location
23 23
 {
24 24
 
25
-    /**
26
-     * Get the first URI that matches the given criteria.
27
-     *
28
-     * @since 0.1.0
29
-     *
30
-     * @param array $criteria Criteria to match.
31
-     *
32
-     * @return string|false URI that matches the criteria or false if none found.
33
-     */
34
-    public function getURI(array $criteria);
25
+	/**
26
+	 * Get the first URI that matches the given criteria.
27
+	 *
28
+	 * @since 0.1.0
29
+	 *
30
+	 * @param array $criteria Criteria to match.
31
+	 *
32
+	 * @return string|false URI that matches the criteria or false if none found.
33
+	 */
34
+	public function getURI(array $criteria);
35 35
 
36
-    /**
37
-     * Get all URIs that match the given criteria.
38
-     *
39
-     * @since 0.1.1
40
-     *
41
-     * @param array $criteria Criteria to match.
42
-     *
43
-     * @return URIs Collection of URIs that matches the criteria or an empty collection if none found.
44
-     */
45
-    public function getURIs(array $criteria): URIs;
36
+	/**
37
+	 * Get all URIs that match the given criteria.
38
+	 *
39
+	 * @since 0.1.1
40
+	 *
41
+	 * @param array $criteria Criteria to match.
42
+	 *
43
+	 * @return URIs Collection of URIs that matches the criteria or an empty collection if none found.
44
+	 */
45
+	public function getURIs(array $criteria): URIs;
46 46
 }
Please login to merge, or discard this patch.
src/View/Location/Locations.php 2 patches
Indentation   +31 added lines, -31 removed lines patch added patch discarded remove patch
@@ -24,37 +24,37 @@
 block discarded – undo
24 24
 class Locations extends ArrayCollection
25 25
 {
26 26
 
27
-    /**
28
-     * Adds a location at the end of the collection if it does not already exist.
29
-     *
30
-     * @param mixed $location The location to add.
31
-     *
32
-     * @return bool Whether the location was added or not.
33
-     */
34
-    public function add($location): bool
35
-    {
36
-        if ($this->hasLocation($location)) {
37
-            return false;
38
-        }
27
+	/**
28
+	 * Adds a location at the end of the collection if it does not already exist.
29
+	 *
30
+	 * @param mixed $location The location to add.
31
+	 *
32
+	 * @return bool Whether the location was added or not.
33
+	 */
34
+	public function add($location): bool
35
+	{
36
+		if ($this->hasLocation($location)) {
37
+			return false;
38
+		}
39 39
 
40
-        return parent::add($location);
41
-    }
40
+		return parent::add($location);
41
+	}
42 42
 
43
-    /**
44
-     * Check whether a given location is already registered.
45
-     *
46
-     * For two locations to be equal, both their path and their extensions must be the same.
47
-     *
48
-     * @since 0.1.1
49
-     *
50
-     * @param Location $location Location to check the existence of.
51
-     *
52
-     * @return bool Whether the location is already registered or not.
53
-     */
54
-    public function hasLocation(Location $location): bool
55
-    {
56
-        return $this->exists(function ($key, $element) use ($location) {
57
-            return $location == $element;
58
-        });
59
-    }
43
+	/**
44
+	 * Check whether a given location is already registered.
45
+	 *
46
+	 * For two locations to be equal, both their path and their extensions must be the same.
47
+	 *
48
+	 * @since 0.1.1
49
+	 *
50
+	 * @param Location $location Location to check the existence of.
51
+	 *
52
+	 * @return bool Whether the location is already registered or not.
53
+	 */
54
+	public function hasLocation(Location $location): bool
55
+	{
56
+		return $this->exists(function ($key, $element) use ($location) {
57
+			return $location == $element;
58
+		});
59
+	}
60 60
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -53,7 +53,7 @@
 block discarded – undo
53 53
      */
54 54
     public function hasLocation(Location $location): bool
55 55
     {
56
-        return $this->exists(function ($key, $element) use ($location) {
56
+        return $this->exists(function($key, $element) use ($location) {
57 57
             return $location == $element;
58 58
         });
59 59
     }
Please login to merge, or discard this patch.
src/View/Support/Findable.php 1 patch
Indentation   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -22,14 +22,14 @@
 block discarded – undo
22 22
 interface Findable
23 23
 {
24 24
 
25
-    /**
26
-     * Check whether the Findable can handle an individual criterion.
27
-     *
28
-     * @since 0.1.0
29
-     *
30
-     * @param mixed $criterion Criterion to check.
31
-     *
32
-     * @return bool Whether the Findable can handle the criterion.
33
-     */
34
-    public function canHandle($criterion): bool;
25
+	/**
26
+	 * Check whether the Findable can handle an individual criterion.
27
+	 *
28
+	 * @since 0.1.0
29
+	 *
30
+	 * @param mixed $criterion Criterion to check.
31
+	 *
32
+	 * @return bool Whether the Findable can handle the criterion.
33
+	 */
34
+	public function canHandle($criterion): bool;
35 35
 }
Please login to merge, or discard this patch.
src/View/Support/Extensions.php 1 patch
Indentation   +19 added lines, -19 removed lines patch added patch discarded remove patch
@@ -24,24 +24,24 @@
 block discarded – undo
24 24
 class Extensions extends ArrayCollection
25 25
 {
26 26
 
27
-    /**
28
-     * Check whether a given URI has a specific extension.
29
-     *
30
-     * @since 0.1.0
31
-     *
32
-     * @param string $uri       URI to check the extension of.
33
-     * @param string $extension Extension to check for.
34
-     *
35
-     * @return bool
36
-     */
37
-    public static function hasExtension(string $uri, string $extension): bool
38
-    {
39
-        $uriLength       = mb_strlen($uri);
40
-        $extensionLength = mb_strlen($extension);
41
-        if ($extensionLength > $uriLength) {
42
-            return false;
43
-        }
27
+	/**
28
+	 * Check whether a given URI has a specific extension.
29
+	 *
30
+	 * @since 0.1.0
31
+	 *
32
+	 * @param string $uri       URI to check the extension of.
33
+	 * @param string $extension Extension to check for.
34
+	 *
35
+	 * @return bool
36
+	 */
37
+	public static function hasExtension(string $uri, string $extension): bool
38
+	{
39
+		$uriLength       = mb_strlen($uri);
40
+		$extensionLength = mb_strlen($extension);
41
+		if ($extensionLength > $uriLength) {
42
+			return false;
43
+		}
44 44
 
45
-        return substr_compare($uri, $extension, $uriLength - $extensionLength, $extensionLength) === 0;
46
-    }
45
+		return substr_compare($uri, $extension, $uriLength - $extensionLength, $extensionLength) === 0;
46
+	}
47 47
 }
Please login to merge, or discard this patch.
src/View/View/BaseView.php 1 patch
Indentation   +13 added lines, -13 removed lines patch added patch discarded remove patch
@@ -22,17 +22,17 @@
 block discarded – undo
22 22
 class BaseView extends AbstractView
23 23
 {
24 24
 
25
-    /**
26
-     * Check whether the Findable can handle an individual criterion.
27
-     *
28
-     * @since 0.1.0
29
-     *
30
-     * @param mixed $criterion Criterion to check.
31
-     *
32
-     * @return bool Whether the Findable can handle the criterion.
33
-     */
34
-    public function canHandle($criterion): bool
35
-    {
36
-        return true;
37
-    }
25
+	/**
26
+	 * Check whether the Findable can handle an individual criterion.
27
+	 *
28
+	 * @since 0.1.0
29
+	 *
30
+	 * @param mixed $criterion Criterion to check.
31
+	 *
32
+	 * @return bool Whether the Findable can handle the criterion.
33
+	 */
34
+	public function canHandle($criterion): bool
35
+	{
36
+		return true;
37
+	}
38 38
 }
Please login to merge, or discard this patch.