Completed
Pull Request — master (#193)
by
unknown
07:18 queued 05:55
created

LoadBalancer::create()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 27
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 27
rs 8.8571
c 0
b 0
f 0
cc 1
eloc 21
nc 1
nop 8

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
3
/*
4
 * This file is part of the DigitalOceanV2 library.
5
 *
6
 * (c) Antoine Corcy <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace DigitalOceanV2\Api;
13
14
use DigitalOceanV2\Entity\AbstractEntity;
15
use DigitalOceanV2\Entity\ForwardingRule as ForwardRuleEntity;
16
use DigitalOceanV2\Entity\HealthCheck as HealthCheckEntity;
17
use DigitalOceanV2\Entity\LoadBalancer as LoadBalancerEntity;
18
use DigitalOceanV2\Exception\HttpException;
19
20
/**
21
 * @author Jacob Holmes <[email protected]>
22
 */
23
class LoadBalancer extends AbstractApi
24
{
25
    /**
26
     * @return LoadBalancerEntity[]
27
     */
28
    public function getAll()
29
    {
30
        $loadBalancers = $this->adapter->get(sprintf('%s/load_balancers', $this->endpoint));
31
32
        $loadBalancers = json_decode($loadBalancers);
33
34
        $this->extractMeta($loadBalancers);
35
36
        return array_map(function ($key) {
37
            return new LoadBalancerEntity($key);
38
        }, $loadBalancers->load_balancers);
39
    }
40
41
    /**
42
     * @param string $id
43
     *
44
     * @throws HttpException
45
     *
46
     * @return LoadBalancerEntity
47
     */
48
    public function getById($id)
49
    {
50
        $loadBalancer = $this->adapter->get(sprintf('%s/load_balancers/%s', $this->endpoint, $id));
51
52
        $loadBalancer = json_decode($loadBalancer);
53
54
        return new LoadBalancerEntity($loadBalancer->load_balancer);
55
    }
56
57
    /**
58
     * @param string                      $name
59
     * @param string                      $region
60
     * @param array|ForwardRuleEntity[]   $forwardRules
61
     * @param string                      $algorithm
62
     * @param array|HealthCheckEntity[]   $healthCheck
63
     * @param array|StickySessionEntity[] $stickySessions
64
     * @param array                       $dropletIds
65
     * @param bool                        $httpsRedirect
66
     *
67
     * @throws HttpException
68
     *
69
     * @return LoadBalancerEntity
70
     */
71
    public function create(
72
        $name,
73
        $region,
74
        $forwardRules = null,
75
        $algorithm = 'round_robin',
76
        $healthCheck = [],
77
        $stickySessions = [],
78
        $dropletIds = [],
79
        $httpsRedirect = false
80
    ) {
81
        $data = [
82
            'name' => $name,
83
            'algorithm' => $algorithm,
84
            'region' => $region,
85
            'forwarding_rules' => $this->formatForwardRules($forwardRules),
86
            'health_check' => $this->formatConfigurationOptions($healthCheck),
87
            'sticky_sessions' => $this->formatConfigurationOptions($stickySessions),
88
            'droplet_ids' => $dropletIds,
89
            'redirect_http_to_https' => $httpsRedirect,
90
        ];
91
92
        $loadBalancer = $this->adapter->post(sprintf('%s/load_balancers', $this->endpoint), $data);
93
94
        $loadBalancer = json_decode($loadBalancer);
95
96
        return new LoadBalancerEntity($loadBalancer->load_balancer);
97
    }
98
99
    /**
100
     * @param string                      $name
101
     * @param string                      $region
102
     * @param array|ForwardRuleEntity[]   $forwardRules
103
     * @param string                      $algorithm
104
     * @param array|HealthCheckEntity[]   $healthCheck
105
     * @param array|StickySessionEntity[] $stickySessions
106
     * @param bool                        $httpsRedirect
107
     * @param array                       $tags
108
     *
109
     * @throws HttpException
110
     *
111
     * @return LoadBalancerEntity
112
     */
113
    public function createTag(
114
        $name,
115
        $region,
116
        $forwardRules = null,
117
        $algorithm = 'round_robin',
118
        $healthCheck = [],
119
        $stickySessions = [],
120
        $httpsRedirect = false
121
        $tag = '',
0 ignored issues
show
Bug introduced by
This code did not parse for me. Apparently, there is an error somewhere around this line:

Syntax error, unexpected T_VARIABLE, expecting ')'
Loading history...
122
    ) {
123
        $data = [
124
            'name' => $name,
125
            'algorithm' => $algorithm,
126
            'region' => $region,
127
            'forwarding_rules' => $this->formatForwardRules($forwardRules),
128
            'health_check' => $this->formatConfigurationOptions($healthCheck),
129
            'sticky_sessions' => $this->formatConfigurationOptions($stickySessions),
130
            'redirect_http_to_https' => $httpsRedirect,
131
            'tag' => $tag,
132
        ];
133
134
        $loadBalancer = $this->adapter->post(sprintf('%s/load_balancers', $this->endpoint), $data);
135
136
        $loadBalancer = json_decode($loadBalancer);
137
138
        return new LoadBalancerEntity($loadBalancer->load_balancer);
139
    }
140
    
141
    /**
142
     * @param string                   $id
143
     * @param array|LoadBalancerEntity $loadBalancerSpec
144
     *
145
     * @throws HttpException
146
     *
147
     * @return LoadBalancerEntity
148
     */
149
    public function update($id, $loadBalancerSpec)
150
    {
151
        $data = $this->formatConfigurationOptions($loadBalancerSpec);
152
153
        $loadBalancer = $this->adapter->put(sprintf('%s/load_balancers/%s', $this->endpoint, $id), $data);
154
155
        $loadBalancer = json_decode($loadBalancer);
156
157
        return new LoadBalancerEntity($loadBalancer->load_balancer);
158
    }
159
160
    /**
161
     * @param string $id
162
     *
163
     * @throws HttpException
164
     */
165
    public function delete($id)
166
    {
167
        $this->adapter->delete(sprintf('%s/load_balancers/%s', $this->endpoint, $id));
168
    }
169
170
    /**
171
     * @param array|AbstractEntity $forwardRules
172
     *
173
     * @return array
174
     */
175
    private function formatForwardRules($forwardRules)
176
    {
177
        if (isset($forwardRules)) {
178
            return array_map(function ($rule) {
179
                return $this->formatConfigurationOptions($rule);
180
            }, $forwardRules);
181
        } else {
182
            return [
183
                (new ForwardRuleEntity())->setStandardHttpRules()->toArray(),
184
                (new ForwardRuleEntity())->setStandardHttpsRules()->toArray(),
185
            ];
186
        }
187
    }
188
189
    /**
190
     * @param array|AbstractEntity $config
191
     *
192
     * @return array|AbstractEntity
193
     */
194
    private function formatConfigurationOptions($config)
195
    {
196
        return $config instanceof AbstractEntity ? $config->toArray() : $config;
197
    }
198
}
199