Passed
Push — release/v2-0-0 ( 69d7e7...5d5324 )
by Martin
01:12
created

SocialPostExtension   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 82
Duplicated Lines 39.02 %

Coupling/Cohesion

Components 1
Dependencies 6

Importance

Changes 0
Metric Value
wmc 12
lcom 1
cbo 6
dl 32
loc 82
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A setFacebookParameters() 0 14 3
A load() 0 12 1
A setLinkedInParameters() 16 16 4
A setTwitterParameters() 16 16 4

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
3
declare(strict_types=1);
4
5
namespace MartinGeorgiev\SocialPost\DependencyInjection;
6
7
use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException;
8
use Symfony\Component\Config\FileLocator;
9
use Symfony\Component\DependencyInjection\ContainerBuilder;
10
use Symfony\Component\DependencyInjection\Extension\Extension;
11
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
12
13
/**
14
 * @since 1.0.0
15
 * @author Martin Georgiev <[email protected]>
16
 * @license https://opensource.org/licenses/MIT MIT
17
 * @link https://github.com/martin-georgiev/social-post-bundle Package's homepage
18
 */
19
class SocialPostExtension extends Extension
20
{
21
    /**
22
     * {@inheritdoc}
23
     */
24
    public function load(array $configs, ContainerBuilder $container)
25
    {
26
        $configuration = $this->processConfiguration(new Configuration(), $configs);
27
        $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
28
        $loader->load('services.yml');
29
30
        $container->setParameter('social_post.configuration.publish_on', $configuration['publish_on']);
31
32
        $this->setFacebookParameters($configuration, $container);
33
        $this->setLinkedInParameters($configuration, $container);
34
        $this->setTwitterParameters($configuration, $container);
35
    }
36
37
    /**
38
     * @param array $configuration
39
     * @param ContainerBuilder $container
40
     * @throws InvalidConfigurationException
41
     */
42
    private function setFacebookParameters(array $configuration, ContainerBuilder $container)
43
    {
44
        if (!in_array('facebook', $configuration['publish_on'])) {
45
            return;
46
        }
47
48
        if (!isset($configuration['providers']['facebook'])) {
49
            throw new InvalidConfigurationException('Found no configuration for the Facebook provider');
50
        }
51
52
        $facebookConfiguration = $configuration['providers']['facebook'];
53
        $container->setParameter('social_post.configuration.facebook', $facebookConfiguration);
54
        $container->setParameter('social_post.configuration.facebook.page_id', $facebookConfiguration['page_id']);
55
    }
56
57
    /**
58
     * @param array $configuration
59
     * @param ContainerBuilder $container
60
     * @throws InvalidConfigurationException
61
     */
62 View Code Duplication
    private function setLinkedInParameters(array $configuration, ContainerBuilder $container)
63
    {
64
        if (!in_array('linkedin', $configuration['publish_on'])) {
65
            return;
66
        }
67
68
        if (!isset($configuration['providers']['linkedin'])) {
69
            throw new InvalidConfigurationException('Found no configuration for the LinkedIn provider');
70
        }
71
72
        $linkedinConfiguration = $configuration['providers']['linkedin'];
73
        $linkedinParameters = ['client_id', 'client_secret', 'access_token', 'company_page_id'];
74
        foreach ($linkedinParameters as $parameter) {
75
            $container->setParameter('social_post.configuration.linkedin.' . $parameter, $linkedinConfiguration[$parameter]);
76
        }
77
    }
78
79
    /**
80
     * @param array $configuration
81
     * @param ContainerBuilder $container
82
     * @throws InvalidConfigurationException
83
     */
84 View Code Duplication
    private function setTwitterParameters(array $configuration, ContainerBuilder $container)
85
    {
86
        if (!in_array('twitter', $configuration['publish_on'])) {
87
            return;
88
        }
89
90
        if (!isset($configuration['providers']['twitter'])) {
91
            throw new InvalidConfigurationException('Found no configuration for the Twitter provider');
92
        }
93
94
        $twitterConfiguration = $configuration['providers']['twitter'];
95
        $twitterParameters = ['consumer_key', 'consumer_secret', 'access_token', 'access_token_secret'];
96
        foreach ($twitterParameters as $parameter) {
97
            $container->setParameter('social_post.configuration.twitter.' . $parameter, $twitterConfiguration[$parameter]);
98
        }
99
    }
100
}
101