Package   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 43
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
wmc 3
lcom 1
cbo 2
dl 0
loc 43
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 8 1
A hasNamespaceThatContainsClassName() 0 6 1
A getNamespaces() 0 15 1
1
<?php
2
3
namespace Facade\Ignition\Support\Packagist;
4
5
use Illuminate\Support\Collection;
6
use Illuminate\Support\Str;
7
8
class Package
9
{
10
    /** @var string */
11
    public $name;
12
13
    /** @var string */
14
    public $url;
15
16
    /** @var string */
17
    public $repository;
18
19
    public function __construct(array $properties)
20
    {
21
        $this->name = $properties['name'];
22
23
        $this->url = $properties['url'];
24
25
        $this->repository = $properties['repository'];
26
    }
27
28
    public function hasNamespaceThatContainsClassName(string $className): bool
29
    {
30
        return $this->getNamespaces()->contains(function ($namespace) use ($className) {
31
            return Str::startsWith(strtolower($className), strtolower($namespace));
32
        });
33
    }
34
35
    protected function getNamespaces(): Collection
36
    {
37
        $details = json_decode(file_get_contents("https://packagist.org/packages/{$this->name}.json"), true);
38
39
        return collect($details['package']['versions'])
40
            ->map(function ($version) {
41
                return collect($version['autoload'] ?? [])
42
                    ->map(function ($autoload) {
43
                        return array_keys($autoload);
44
                    })
45
                    ->flatten();
46
            })
47
            ->flatten()
48
            ->unique();
49
    }
50
}
51