Completed
Push — master ( 06fdcb...b3189d )
by Alex
50s
created

MetadataProvider::boot()   F

Complexity

Conditions 16
Paths 291

Size

Total Lines 85
Code Lines 56

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 214.9543

Importance

Changes 8
Bugs 0 Features 0
Metric Value
c 8
b 0
f 0
dl 0
loc 85
ccs 5
cts 62
cp 0.0806
rs 3.7109
cc 16
eloc 56
nc 291
nop 0
crap 214.9543

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace AlgoWeb\PODataLaravel\Providers;
4
5
use Illuminate\Support\ServiceProvider;
6
use Illuminate\Support\Facades\Cache;
7
use POData\Providers\Metadata\SimpleMetadataProvider;
8
use Illuminate\Support\Facades\Route;
9
use Illuminate\Support\Facades\Schema as Schema;
10
11
class MetadataProvider extends ServiceProvider
12
{
13
    protected static $METANAMESPACE = "Data";
14
15
    /**
16
     * Bootstrap the application services.  Post-boot.
17
     *
18
     * @return void
19
     */
20 1
    public function boot()
21
    {
22 1
        self::$METANAMESPACE = env('ODataMetaNamespace', 'Data');
23
        // If we aren't migrated, there's no DB tables to pull metadata _from_, so bail out early
24
        try {
25 1
            if (!Schema::hasTable('migrations')) {
26
                return;
27
            }
28 1
        } catch (\Exception $e) {
29 1
            return;
30
        }
31
32
        self::setupRoute();
33
        $isCaching = env('APP_METADATA_CACHING', false);
34
        $hasCache = Cache::has('metadata');
35
36
        if ($isCaching && $hasCache) {
37
            $meta = Cache::get('metadata');
38
            $this->app->instance('metadata', $meta);
39
            return;
40
        }
41
        $meta = $this->app->make('metadata');
42
43
        $classes = get_declared_classes();
44
        $AutoClass = null;
45
        foreach ($classes as $class) {
46
            if (\Illuminate\Support\Str::startsWith($class, "Composer\\Autoload\\ComposerStaticInit")) {
47
                $AutoClass = $class;
48
            }
49
        }
50
        $ends = array();
51
        $Classes = $AutoClass::$classMap;
52
        foreach ($Classes as $name => $file) {
53
            if (\Illuminate\Support\Str::startsWith($name, "App")) {
54
                if (in_array("AlgoWeb\\PODataLaravel\\Models\\MetadataTrait", class_uses($name))) {
55
                    $ends[] = $name;
56
                }
57
            }
58
        }
59
60
        $EntityTypes = array();
61
        $ResourceSets = array();
62
        $begins = [];
63
        $numEnds = count($ends);
64
65
        for ($i = 0; $i < $numEnds; $i++) {
66
            $bitter = $ends[$i];
67
            $fqModelName = $bitter;
68
69
            $instance = new $fqModelName();
70
            $name = $instance->getEndpointName();
71
            $metaSchema = $instance->getXmlSchema();
72
            // if for whatever reason we don't get an XML schema, move on to next entry and drop current one from
73
            // further processing
74
            if (null == $metaSchema) {
75
                continue;
76
            }
77
            $EntityTypes[$fqModelName] = $metaSchema;
78
            $ResourceSets[$fqModelName] = $meta->addResourceSet(
79
                strtolower($name),
80
                $EntityTypes[$fqModelName]
81
            );
82
            $begins[] = $bitter;
83
        }
84
85
        $ends = $begins;
86
        unset($begins);
87
88
        // now that endpoints are hooked up, tackle the relationships
89
        // if we'd tried earlier, we'd be guaranteed to try to hook a relation up to null, which would be bad
90
        foreach ($ends as $bitter) {
91
            $fqModelName = $bitter;
92
            $instance = new $fqModelName();
93
            $instance->hookUpRelationships($EntityTypes, $ResourceSets);
94
        }
95
        if ($isCaching) {
96
            if (!$hasCache) {
97
                $cacheTime = env('APP_METADATA_CACHE_DURATION', 10);
98
                $cacheTime = !is_numeric($cacheTime) ? 10 : abs($cacheTime);
99
                Cache::put('metadata', $meta, $cacheTime);
100
            }
101
        } else {
102
            Cache::forget('metadata');
103
        }
104
    }
105
106
    private static function setupRoute()
107
    {
108
        $valueArray = [];
0 ignored issues
show
Unused Code introduced by
$valueArray is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
109
110
        Route::any('odata.svc/{section}', 'AlgoWeb\PODataLaravel\Controllers\ODataController@index')
111
            ->where(['section' => '.*']);
112
        Route::any('odata.svc', 'AlgoWeb\PODataLaravel\Controllers\ODataController@index');
113
    }
114
115
    /**
116
     * Register the application services.  Boot-time only.
117
     *
118
     * @return void
119
     */
120
    public function register()
121
    {
122
        $this->app->singleton('metadata', function ($app) {
0 ignored issues
show
Unused Code introduced by
The parameter $app is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
123
            return new SimpleMetadataProvider('Data', self::$METANAMESPACE);
124
        });
125
    }
126
}
127