IndexControllerProvider   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 40
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 4

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 4
lcom 0
cbo 4
dl 0
loc 40
ccs 10
cts 10
cp 1
rs 10
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
B connect() 0 34 4
1
<?php
2
namespace Resourceful;
3
4
use Silex\Api\ControllerProviderInterface;
5
use Silex\Application;
6
use Symfony\Component\HttpFoundation\Request;
7
8
/**
9
 * TODO: this class colud be extended to allow sub indexed.
10
 */
11
class IndexControllerProvider implements ControllerProviderInterface
12
{
13
	/**
14
	 * N.B. the same 'index' string is used to name different concepts-
15
	 */
16 4
    public function connect(Application $app)
17
    {	
18 4
		$controllers = $app["controllers_factory"];
19
		
20
		// ensure IndexControllerProvider is called once
21 4
		if( isset($app['index.controller'])){
22 1
			$app->abort(501, 'Sorry, only one index admited.');
23
		} else {
24
			$app['index.controller'] = function(){
25
				return new ReadResourceController('index'); // here 'index' is a schema id
26
			};
27
		}
28
		
29 4
        $controllers->get("/", 'index.controller:read')->bind('index') // here 'index is the route name
30 4
			->before(function (Request $request, Application $app){
31
				// Generate the default index resource on the fly       	
32
				assert(isset($app['twig']));
33
				assert(isset($app['data.store']));
34
35
				$datastore=$app['data.store'];
36
				
37
				if($app["createDefault"]){
38
		            $resource = $app["url_generator"]->generate('index').'/index'; // first 'index' is the route name, the last is the the resource basename
39
		            if (!$datastore->contains($resource)) {
40
		                $datastore->save($resource, json_decode($app["twig"]->render("index.json.twig")));
41
		            }
42
				}
43 4
	        })
44 4
			->before(new SchemaHandler('index')) // here 'index' is a schema id
45 4
			->after( new DescribedBySchemaHandler('index')) // here 'index' is a schema id
46
        ;
47
			
48 4
        return $controllers;
49
    }
50
}
51