Completed
Push — master ( 497ab4...9723e6 )
by Stefan
03:44 queued 01:20
created

AbstractEntity::setOptions()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 10
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 5
nc 2
nop 2
1
<?php
2
3
namespace BecosoftApi\Entity;
4
5
use BecosoftApi\Api;
6
7
/**
8
 * Class AbstractEntity
9
 * @package BecosoftApi\Entity
10
 */
11
abstract class AbstractEntity
12
{
13
    const PER_CALL = 50;
14
15
    /**
16
     * @var string
17
     */
18
    protected static $endpoint;
19
20
    /**
21
     * @var Api
22
     */
23
    protected $api;
24
25
    /**
26
     * AbstractEntity constructor.
27
     * @param Api $api
28
     */
29
    public function __construct(Api $api)
30
    {
31
        $this->api = $api;
32
    }
33
34
    /**
35
     * @param array $query
36
     * @param array $options
37
     * @return \Psr\Http\Message\ResponseInterface
38
     */
39
    public function get(array $query = [], array $options = [])
40
    {
41
        if (!empty($query)) {
42
            $options = $this->setOptions($query, $options);
43
        }
44
45
        return $this->api->request('GET', static::$endpoint, $options);
46
    }
47
48
    /**
49
     * @param array $query
50
     * @param array $options
51
     * @return array
52
     */
53
    public function getAll(array $query = [], array $options = [])
54
    {
55
        $options['query']['take'] = self::PER_CALL;
56
57
        if (!empty($query)) {
58
            $options = $this->setOptions($query, $options);
59
        }
60
61
        $entities = [];
62
63
        $skip = 0;
64
        do {
65
            $options['query']['skip'] = $skip;
66
67
            $result = $this->api->request('GET', static::$endpoint, $options);
68
            $decoded = json_decode($result->getBody()->getContents());
69
            $entities = array_merge($entities, $decoded);
70
71
            $skip++;
72
        } while (count($decoded) === self::PER_CALL);
73
74
        return $entities;
75
    }
76
77
    /**
78
     * @param array $query
79
     * @param array $options
80
     * @return array
81
     */
82
    private function setOptions(array $query, array $options)
83
    {
84
        if (array_key_exists('query', $options)) {
85
            $query = array_merge($options['query'], $query);
86
        }
87
88
        $options['query'] = $query;
89
90
        return $options;
91
    }
92
}
93