FeatureManager   A
last analyzed

Complexity

Total Complexity 11

Size/Duplication

Total Lines 78
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Importance

Changes 0
Metric Value
dl 0
loc 78
rs 10
c 0
b 0
f 0
wmc 11
lcom 1
cbo 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A enabled() 0 18 5
A feature() 0 4 1
A setMasterSwitch() 0 4 1
A runningTests() 0 4 3
1
<?php
2
3
namespace M1guelpf\Feature;
4
5
class FeatureManager
6
{
7
    /** @var bool|null */
8
    protected static $masterSwitch = null;
9
10
    /**
11
     * Create a new FeatureManager Instance.
12
     *
13
     * @param array $features Features to load
14
     *
15
     * @return void
0 ignored issues
show
Comprehensibility Best Practice introduced by
Adding a @return annotation to constructors is generally not recommended as a constructor does not have a meaningful return value.

Adding a @return annotation to a constructor is not recommended, since a constructor does not have a meaningful return value.

Please refer to the PHP core documentation on constructors.

Loading history...
16
     */
17
    public function __construct(array $features = [])
18
    {
19
        $this->features = $features;
0 ignored issues
show
Bug introduced by
The property features does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
20
    }
21
22
    /**
23
     * Check if a feature is enabled.
24
     *
25
     * @param string $name Name of the feature to check
26
     * @param string $function Check for a specific function
27
     *
28
     * @return bool
29
     */
30
    public function enabled(string $name, string $function = '') : bool
31
    {
32
        if (! is_null(static::$masterSwitch)) {
33
            return static::$masterSwitch;
34
        }
35
36
        if ($this->runningTests()) {
37
            return true;
38
        }
39
40
        $feature = $this->feature($name);
41
42
        if (! empty(trim($function))) {
43
            return is_array($feature) ? value(array_get($feature, $function, false)) : (bool) value($feature);
0 ignored issues
show
Deprecated Code introduced by
The function array_get() has been deprecated with message: Arr::get() should be used directly instead. Will be removed in Laravel 5.9.

This function has been deprecated. The supplier of the file has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed from the class and what other function to use instead.

Loading history...
44
        }
45
46
        return (bool) value($feature);
47
    }
48
49
    /**
50
     * Get feature options.
51
     *
52
     * @param string $name Name of the feature to check
53
     *
54
     * @return bool
55
     */
56
    public function feature(string $name)
57
    {
58
        return array_get($this->features, $name, false);
0 ignored issues
show
Deprecated Code introduced by
The function array_get() has been deprecated with message: Arr::get() should be used directly instead. Will be removed in Laravel 5.9.

This function has been deprecated. The supplier of the file has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed from the class and what other function to use instead.

Loading history...
59
    }
60
61
    /**
62
     * Set the master switch.
63
     *
64
     * @param bool $value Value to set the master switch to
65
     *
66
     * @return void
67
     */
68
    public static function setMasterSwitch(bool $value)
69
    {
70
        static::$masterSwitch = $value;
71
    }
72
73
    /**
74
     * Check if the current app instance is running unit tests.
75
     *
76
     * @return bool
77
     */
78
    public function runningTests()
79
    {
80
        return function_exists('app') && method_exists($app = app(), 'runningUnitTests') && $app->runningUnitTests();
81
    }
82
}
83