CsvAutoDelimiterFormatFactory   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 29
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 1

Test Coverage

Coverage 91.67%

Importance

Changes 0
Metric Value
wmc 3
lcom 0
cbo 1
dl 0
loc 29
ccs 11
cts 12
cp 0.9167
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A factor() 0 7 1
A guessDelimiter() 0 15 2
1
<?php
2
3
namespace Mathielen\ImportEngine\Storage\Format\Factory;
4
5
use Mathielen\ImportEngine\Storage\Format\CsvFormat;
6
7
class CsvAutoDelimiterFormatFactory implements FormatFactoryInterface
8
{
9
    /**
10
     * @return \Mathielen\ImportEngine\Storage\Format\Format
11
     */
12 1
    public function factor($uri)
13
    {
14 1
        $file = new \SplFileObject($uri);
15 1
        $delimiter = $this->guessDelimiter(utf8_encode($file->getCurrentLine()));
16
17 1
        return new CsvFormat($delimiter);
18
    }
19
20 6
    public function guessDelimiter($line)
21
    {
22 6
        $specialCharString = preg_replace('/[a-z0-9éâëïüÿçêîôûéäöüß\n\r "]/iu', '', $line);
23
24 6
        $charStats = count_chars($specialCharString, 1);
25
26 6
        if (empty($charStats)) {
27
            throw new \LogicException('Could not discover CSV-delimiter!');
28
        }
29
30 6
        arsort($charStats);
31 6
        $delimiter = chr(key($charStats));
32
33 6
        return $delimiter;
34
    }
35
}
36