SearchBuilderAttributeTrait   A
last analyzed

Complexity

Total Complexity 14

Size/Duplication

Total Lines 100
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 14
lcom 1
cbo 1
dl 0
loc 100
ccs 0
cts 61
cp 0
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A getSearch() 0 15 3
A setSearch() 0 12 2
A populateSearch() 0 15 4
A normalizeSearchConfig() 0 12 3
A createSearchBuilder() 0 15 2
1
<?php
2
3
/**
4
 * @copyright  Copyright (c) Flipbox Digital Limited
5
 * @license    https://github.com/flipbox/salesforce/blob/master/LICENSE.md
6
 * @link       https://github.com/flipbox/salesforce
7
 */
8
9
namespace Flipbox\Salesforce\Search;
10
11
/**
12
 * @author Flipbox Factory <[email protected]>
13
 * @since 3.0.0
14
 */
15
trait SearchBuilderAttributeTrait
16
{
17
    /**
18
     * @var SearchBuilderInterface|string
19
     */
20
    private $search = '';
21
22
    /**
23
     * @param array $config
24
     * @return SearchBuilderInterface
25
     */
26
    public function getSearch(array $config = []): SearchBuilderInterface
27
    {
28
        if (!$this->search instanceof SearchBuilderInterface) {
29
            $this->search = $this->createSearchBuilder($this->search);
30
        }
31
32
        if (!empty($config)) {
33
            $this->populateSearch(
34
                $this->search,
35
                $config
36
            );
37
        };
38
39
        return $this->search;
40
    }
41
42
    /**
43
     * @param $search
44
     */
45
    public function setSearch($search)
46
    {
47
        if ($search instanceof SearchBuilderInterface) {
48
            $this->search = $search;
49
            return;
50
        }
51
52
        $this->populateSearch(
53
            $this->getSearch(),
54
            $this->normalizeSearchConfig($search)
55
        );
56
    }
57
58
    /**
59
     * @param SearchBuilderInterface $search
60
     * @param array $config
61
     */
62
    private function populateSearch(SearchBuilderInterface $search, array $config = [])
63
    {
64
        foreach ($config as $name => $value) {
65
            $setter = 'set' . $name;
66
            if (method_exists($this, $setter)) {
67
                $this->$setter($value);
68
                continue;
69
            }
70
71
            if (property_exists($search, $name)) {
72
                $search->{$name} = $value;
73
                continue;
74
            }
75
        }
76
    }
77
78
    /**
79
     * @param $config
80
     * @return array
81
     */
82
    private function normalizeSearchConfig($config): array
83
    {
84
        if (!is_array($config)) {
85
            if (is_string($config)) {
86
                $config = ['soql' => $config];
87
            } else {
88
                $config = [$config];
89
            }
90
        }
91
92
        return $config;
93
    }
94
95
    /**
96
     * @param $search
97
     * @return SearchBuilderInterface
98
     */
99
    protected function createSearchBuilder($search): SearchBuilderInterface
100
    {
101
        if ($search instanceof SearchBuilderInterface) {
102
            return $search;
103
        }
104
105
        $builder = new DynamicSearchBuilder();
106
107
        $this->populateSearch(
108
            $builder,
109
            $this->normalizeSearchConfig($search)
110
        );
111
112
        return $builder;
113
    }
114
}
115