Completed
Push — master ( 2c9601...116879 )
by Дмитрий
04:44
created

CollectionFactory   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 82
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 72%

Importance

Changes 0
Metric Value
wmc 6
lcom 1
cbo 2
dl 0
loc 82
ccs 18
cts 25
cp 0.72
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 2
A has() 0 4 1
B factory() 0 30 3
1
<?php
2
/**
3
 * SocialConnect project
4
 * @author: Patsura Dmitry https://github.com/ovr <[email protected]>
5
 */
6
7
namespace SocialConnect\Auth;
8
9
use LogicException;
10
use SocialConnect\Provider\Consumer;
11
12
/**
13
 * Class Factory
14
 * @package SocialConnect\Auth\Provider
15
 */
16
class CollectionFactory implements FactoryInterface
17
{
18
    /**
19
     * @var array
20
     */
21
    protected $providers = [
22
        'facebook' => \SocialConnect\Auth\Provider\Facebook::class,
23
        'github' => \SocialConnect\Auth\Provider\GitHub::class,
24
        'instagram' => \SocialConnect\Auth\Provider\Instagram::class,
25
        'twitter' => \SocialConnect\Auth\Provider\Twitter::class,
26
        'google' => \SocialConnect\Auth\Provider\Google::class,
27
        'vk' => \SocialConnect\Auth\Provider\Vk::class,
28
        'slack' => \SocialConnect\Auth\Provider\Slack::class,
29
        'twitch' => \SocialConnect\Auth\Provider\Twitch::class,
30
        'px500' => \SocialConnect\Auth\Provider\Px500::class,
31
        'bitbucket' => \SocialConnect\Auth\Provider\Bitbucket::class,
32
        'amazon' => \SocialConnect\Auth\Provider\Amazon::class,
33
        'gitlab' => \SocialConnect\Auth\Provider\GitLab::class,
34
        'vimeo' => \SocialConnect\Auth\Provider\Vimeo::class,
35
        'digital-ocean' => \SocialConnect\Auth\Provider\DigitalOcean::class,
36
        'yandex' => \SocialConnect\Auth\Provider\Yandex::class,
37
        'mail-ru' => \SocialConnect\Auth\Provider\MailRu::class,
38
        'odnoklassniki' => \SocialConnect\Auth\Provider\Odnoklassniki::class,
39
        'steam' => \SocialConnect\Auth\Provider\Steam::class,
40
    ];
41
42
    /**
43
     * @param array $providers
44
     */
45 3
    public function __construct(array $providers = null)
46
    {
47 3
        if ($providers) {
48
            $this->providers = $providers;
49
        }
50 3
    }
51
52
    /**
53
     * @param $id
54
     * @return bool
55
     */
56
    public function has($id)
57
    {
58
        return isset($this->providers[$id]);
59
    }
60
61
    /**
62
     * @param string $id
63
     * @param array $parameters
64
     * @param Service $service
65
     * @return \SocialConnect\Provider\AbstractBaseProvider
66
     */
67 2
    public function factory($id, array $parameters, Service $service)
68
    {
69 2
        $consumer = new Consumer($parameters['applicationId'], $parameters['applicationSecret']);
70
71 2
        if (isset($parameters['applicationPublic'])) {
72
            $consumer->setPublic($parameters['applicationPublic']);
73
        }
74
75 2
        $id = strtolower($id);
76
77 2
        if (!isset($this->providers[$id])) {
78
            throw new LogicException('Provider with $id = ' . $id . ' doest not exist');
79
        }
80
81 2
        $providerClassName = $this->providers[$id];
82
83
        /**
84
         * @var $provider \SocialConnect\Provider\AbstractBaseProvider
85
         */
86 2
        $provider = new $providerClassName(
87 2
            $service->getHttpClient(),
88 2
            $consumer,
89 2
            array_merge(
90 2
                $parameters,
91 2
                $service->getConfig()
92 2
            )
93 2
        );
94
95 2
        return $provider;
96
    }
97
}
98