Passed
Push — master ( 7ad56b...6137ca )
by Kevin
03:11
created

DBALObjectRepository::queryBuilderForSpecification()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 2
c 0
b 0
f 0
nc 1
nop 1
dl 0
loc 5
rs 10
ccs 3
cts 3
cp 1
crap 1
1
<?php
2
3
namespace Zenstruck\Porpaginas\Doctrine\Repository;
4
5
use Doctrine\DBAL\Connection;
6
use Doctrine\DBAL\Query\QueryBuilder;
7
use Zenstruck\Porpaginas\Doctrine\DBALQueryBuilderResult;
8
use Zenstruck\Porpaginas\Factory\FactoryResult;
9
use Zenstruck\Porpaginas\Repository;
10
use Zenstruck\Porpaginas\Result;
11
12
/**
13
 * @author Kevin Bond <[email protected]>
14
 */
15
abstract class DBALObjectRepository implements Repository
16
{
17 2
    public function getIterator(): \Traversable
18
    {
19 2
        return static::createResult($this->qb());
20
    }
21
22 1
    public function count(): int
23
    {
24 1
        return \count(static::createResult($this->qb()));
25
    }
26
27
    abstract protected static function createObject(array $data): object;
28
29
    abstract protected static function tableName(): string;
30
31
    abstract protected function connection(): Connection;
32
33 2
    final protected static function createResult(QueryBuilder $qb): Result
34
    {
35 2
        return new FactoryResult(
36
            static function(array $data) {
37 2
                return static::createObject($data);
38 2
            },
39 2
            static::createDBALQueryBuilderResult($qb)
40
        );
41
    }
42
43 2
    protected static function createDBALQueryBuilderResult(QueryBuilder $qb): DBALQueryBuilderResult
44
    {
45 2
        return new DBALQueryBuilderResult($qb);
46
    }
47
48 2
    protected function qb(): QueryBuilder
49
    {
50 2
        return $this->connection()->createQueryBuilder()->select('*')->from(static::tableName());
51
    }
52
}
53