ExperimentMetricResults::__construct()   C
last analyzed

Complexity

Conditions 15
Paths 15

Size

Total Lines 27

Duplication

Lines 7
Ratio 25.93 %

Code Coverage

Tests 17
CRAP Score 15.7593

Importance

Changes 0
Metric Value
cc 15
nc 15
nop 1
dl 7
loc 27
rs 5.9166
c 0
b 0
f 0
ccs 17
cts 20
cp 0.85
crap 15.7593

How to fix   Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
/**
3
 * @author Oleg Krivtsov <[email protected]>
4
 * @date 12 October 2016
5
 * @copyright (c) 2016, Web Marketing ROI
6
 */
7
namespace WebMarketingROI\OptimizelyPHP\Resource\v2;
8
9
use WebMarketingROI\OptimizelyPHP\Exception;
10
use WebMarketingROI\OptimizelyPHP\Resource\v2\VariantResults;
11
12
/**
13
 * Optimizely experiment metric results.
14
 */
15
class ExperimentMetricResults
16
{
17
    /**
18
     * The aggregation function for the numerator of the metric. 'unique' measures 
19
     * the number of unique visitors/sessions that include the specified Event. 
20
     * 'count' measures the total number of occurrences of Event for the scope 
21
     * (visitor/session). 'sum' is the sum of the 'field' value. 'exit' measures 
22
     * the ratio of sessions with last activation occurring on the target page to 
23
     * the sessions that activated the target page at least once during the session. 
24
     * 'bounce' measures the ratio of sessions that with first and last activation 
25
     * occurring on the target page to the sessions with first activation on the 
26
     * target page. For both 'exit' and 'bounce', the eventId must be the ID of a Page.
27
     * 
28
     * @var string 
29
     */
30
    private $aggregator;
31
    
32
    /**
33
     * 
34
     * @var string
35
     */
36
    private $eventId;
37
    
38
    /**
39
     *
40
     * @var string
41
     */
42
    private $eventName;
43
    
44
    /**
45
     *
46
     * @var type 
47
     */
48
    private $field;
49
    
50
    /**
51
     * Conversions indicate the total number of visitors or sessions where the 
52
     * event happened. Impressions indicate the total number of times the event 
53
     * happened (possibly multiple per visitor or session). Revenue indicates 
54
     * the sum of all revenue sent from all events in the Experiment.
55
     * Can be 'conversions', 'impressions' or 'revenue'.
56
     * @var string
57
     */
58
    private $measure;
59
        
60
    /**
61
     *
62
     * @var string
63
     */
64
    private $metricId;
65
    
66
    /**
67
     *
68
     * @var integer
69
     */
70
    private $priority;
71
    
72
    /**
73
     * Can be 'session', 'visitor' or 'event'
74
     * @var string
75
     */
76
    private $unit;
77
    
78
    /**
79
     * 
80
     * @var string 
81
     */
82
    private $name;
83
    
84
    /**
85
     * A map of results for each variation in the Experiment keyed by variation ID. 
86
     * For Personalization Campaigns, the special variant 'baseline' represents 
87
     * visitors that have been held back from any change in experience for the Experiment
88
     * 
89
     * @var object[VariantResults]
90
     */
91
    private $results;
92
    
93
    /**
94
     *
95
     * @var string 
96
     */
97
    private $scope;
98
    
99
    /**
100
     *
101
     * @var type 
102
     */
103
    private $winningDirection;
104
    
105
    /**
106
     * Constructor.
107
     */
108 3
    public function __construct($options = array())
109
    {
110 3
        foreach ($options as $name=>$value) {
111
            switch ($name) {                
112 3
                case 'aggregator': $this->setAggregator($value); break;
113 3
                case 'event_id': $this->setEventId($value); break;
114 3
                case 'event_name': $this->setEventName($value); break;
115 3
                case 'field': $this->setField($value); break;
116 3
                case 'measure': $this->setMeasure($value); break;
117 3
                case 'metric_id': $this->setMetricId($value); break;
118 3
                case 'priority': $this->setPriority($value); break;
119 3
                case 'unit': $this->setUnit($value); break;
120 3 View Code Duplication
                case 'results': {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
121 3
                    $results = [];
122 3
                    foreach ($value as $key=>$result) {
123 3
                        $results[$key] = new VariantResults($result);
124
                    }
125 3
                    $this->setResults($results); break;
126
                }
127
                case 'name': $this->setName($value); break;
128
                case 'scope': $this->setScope($value); break;
129
                case 'winning_direction': $this->setWinningDirection($value); break;
130
                default:
131 3
                    throw new Exception('Unknown option found in the ExperimentMetricResults entity: ' . $name);
132
            }
133
        }
134 3
    }
135
    
136
    /**
137
     * Returns this object as array.
138
     */
139 1
    public function toArray()
140
    {
141
        $options = array(
142 1
            'aggregator' => $this->getAggregator(),
143 1
            'event_id' => $this->getEventId(),
144 1
            'event_name' => $this->getEventName(),
145 1
            'field' => $this->getField(),
146 1
            'measure' => $this->getMeasure(),
147 1
            'metric_id' => $this->getMetricId(),
148 1
            'priority' => $this->getPriority(),
149 1
            'unit' => $this->getUnit(),
150 1
            'name' => $this->getName(),
151 1
            'scope' => $this->getScope(),
152 1
            'winning_direction' => $this->getWinningDirection(),
153
            'results' => array(),
154
        );
155
        
156 1
        foreach ($this->getResults() as $key=>$result) {
157 1
            $options['results'][$key] = $result->toArray();
158
        }
159
        
160
        // Remove options with empty values
161 1
        $cleanedOptions = array();
162 1
        foreach ($options as $name=>$value) {
163 1
            if ($value!==null)
164 1
                $cleanedOptions[$name] = $value;
165
        }
166
        
167 1
        return $cleanedOptions;
168
    }
169
    
170 1
    public function getAggregator()
171
    {
172 1
        return $this->aggregator;
173
    }
174
    
175
    public function setAggregator($aggregator)
176
    {
177
        $this->aggregator = $aggregator;
178
    }
179
    
180 1
    public function getEventId()
181
    {
182 1
        return $this->eventId;
183
    }
184
    
185 3
    public function setEventId($eventId)
186
    {
187 3
        $this->eventId = $eventId;
188 3
    }
189
    
190 1
    public function getEventName()
191
    {
192 1
        return $this->eventName;
193
    }
194
    
195 3
    public function setEventName($eventName)
196
    {
197 3
        $this->eventName = $eventName;
198 3
    }
199
    
200 1
    public function getField()
201
    {
202 1
        return $this->field;
203
    }
204
    
205
    public function setField($field)
206
    {
207
        $this->field = $field;
208
    }
209
    
210 1
    public function getMeasure()
211
    {
212 1
        return $this->measure;
213
    }
214
    
215 3
    public function setMeasure($measure)
216
    {
217 3
        $this->measure = $measure;
218 3
    }
219
    
220 1
    public function getMetricId()
221
    {
222 1
        return $this->metricId;
223
    }
224
    
225 3
    public function setMetricId($metricId)
226
    {
227 3
        $this->metricId = $metricId;
228 3
    }
229
    
230 1
    public function getPriority()
231
    {
232 1
        return $this->priority;
233
    }
234
    
235 3
    public function setPriority($priority)
236
    {
237 3
        $this->priority = $priority;
238 3
    }
239
    
240 1
    public function getUnit()
241
    {
242 1
        return $this->unit;
243
    }
244
    
245 3
    public function setUnit($unit)
246
    {
247 3
        $this->unit = $unit;
248 3
    }
249
    
250 1
    public function getResults()
251
    {
252 1
        return $this->results;
253
    }
254
    
255 3
    public function setResults($results)
256
    {
257 3
        $this->results = $results;
258 3
    }
259
    
260 1
    public function getName()
261
    {
262 1
        return $this->name;
263
    }
264
    
265
    public function setName($name)
266
    {
267
        $this->name = $name;
268
    }
269
    
270 1
    public function getScope()
271
    {
272 1
        return $this->scope;
273
    }
274
    
275
    public function setScope($scope)
276
    {
277
        $this->scope = $scope;
278
    }
279
    
280 1
    public function getWinningDirection()
281
    {
282 1
        return $this->winningDirection;
283
    }
284
    
285
    public function setWinningDirection($winningDirection)
286
    {
287
        $this->winningDirection = $winningDirection;
288
    }
289
}
290
291
292
293
294
295
296
297
298
299
300