AbstractSearch::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
eloc 3
c 1
b 0
f 1
nc 1
nop 1
dl 0
loc 5
ccs 4
cts 4
cp 1
crap 1
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace App\Model;
6
7
use Nymfonya\Component\Container;
8
9
/**
10
 * Class App\Model\AbstractSearch
11
 *
12
 * is abstract search class from csv based file
13
 *
14
 */
15
abstract class AbstractSearch
16
{
17
18
    /**
19
     * filename to read from
20
     *
21
     * @var String
22
     */
23
    protected $filename;
24
25
    /**
26
     * stack
27
     *
28
     * @var array
29
     */
30
    protected $datas;
31
32
    /**
33
     * filter
34
     *
35
     * @var String
36
     */
37
    protected $filter;
38
39
    /**
40
     * field separator
41
     *
42
     * @var String
43
     */
44
    protected $separator;
45
46
    /**
47
     * container
48
     *
49
     * @var Container
50
     */
51
    protected $container;
52
53
    /**
54
     * instanciate
55
     *
56
     * @param Container $container
57
     */
58 8
    public function __construct(Container $container)
59
    {
60 8
        $this->container = $container;
61 8
        $this->datas = [];
62 8
        return $this;
63
    }
64
65
    /**
66
     * return service for serviceName
67
     *
68
     * @param string $serviceName
69
     * @return mixed
70
     */
71 12
    public function getService(string $serviceName)
72
    {
73 12
        return $this->container->getService($serviceName);
74
    }
75
76
    /**
77
     * set file name
78
     *
79
     * @param string $filename
80
     * @return AbstractSearch
81
     */
82 13
    public function setFilename(string $filename): AbstractSearch
83
    {
84 13
        $this->filename = $filename;
85 13
        return $this;
86
    }
87
88
    /**
89
     * set regex filter
90
     *
91
     * @param string $filter
92
     * @return AbstractSearch
93
     */
94 13
    public function setFilter(string $filter): AbstractSearch
95
    {
96 13
        $this->filter = $filter;
97 13
        return $this;
98
    }
99
100
    /**
101
     * set field separator
102
     *
103
     * @param string $separator
104
     * @return AbstractSearch
105
     */
106 13
    public function setSeparator(string $separator): AbstractSearch
107
    {
108 13
        $this->separator = $separator;
109 13
        return $this;
110
    }
111
112
    /**
113
     * stack items from streamed asset file
114
     *
115
     * @return AbstractSearch
116
     */
117 7
    public function readFromStream(): AbstractSearch
118
    {
119 7
        $stream = new \SplFileObject($this->filename);
120 6
        $lines = new \RegexIterator($stream, $this->filter);
121 6
        foreach ($lines as $line) {
122 5
            $data = explode($this->separator, $line);
123 5
            $this->setItem($data);
124
        }
125 6
        unset($lines, $stream);
126 6
        return $this;
127
    }
128
129
    /**
130
     * returns unfiltered datas
131
     *
132
     * @return array
133
     */
134 7
    public function get(): array
135
    {
136 7
        return $this->datas;
137
    }
138
139
    /**
140
     * add route item to stack from dat
141
     *
142
     * @param array $data
143
     * @return AbstractSearch
144
     */
145
    abstract protected function setItem(array $data): AbstractSearch;
146
}
147