Test Failed
Push — master ( a58c94...1bcec0 )
by Brent
03:26
created

ParserFactory::getParser()   C

Complexity

Conditions 12
Paths 11

Size

Total Lines 29
Code Lines 24

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 12
eloc 24
nc 11
nop 1
dl 0
loc 29
rs 5.1612
c 0
b 0
f 0

How to fix   Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace Brendt\Stitcher\Factory;
4
5
use Brendt\Stitcher\Config;
6
use Brendt\Stitcher\Parser\DefaultParser;
7
use Brendt\Stitcher\Parser\FileParser;
8
use Brendt\Stitcher\Parser\FolderParser;
9
use Brendt\Stitcher\Parser\ImageParser;
10
use Brendt\Stitcher\Parser\JsonParser;
11
use Brendt\Stitcher\Parser\MarkdownParser;
12
use Brendt\Stitcher\Parser\Parser;
13
use Brendt\Stitcher\Parser\SassParser;
14
use Brendt\Stitcher\Parser\YamlParser;
15
16
class ParserFactory {
17
18
    const JSON_PARSER = 'json';
19
20
    const MARKDOWN_PARSER = 'md';
21
22
    const FOLDER_PARSER = '/';
23
24
    const YAML_PARSER = 'yml';
25
26
    const IMAGE_PARSER = 'img';
27
28
    const CSS_PARSER = 'css';
29
30
    const JS_PARSER = 'js';
31
32
    const SASS_PARSER = 'sass';
33
34
    const SCSS_PARSER = 'scss';
35
36
    const DEFAULT_PARSER = 'default';
37
38
    private $parsers = [];
39
40
    private $root;
41
42
    private $publicDir;
43
44
    /**
45
     * ParserFactory constructor.
46
     */
47
    public function __construct() {
48
        $this->root = Config::get('directories.src');
49
        $this->publicDir = Config::get('directories.public');
50
    }
51
52
    /**
53
     * @param $fileName
54
     *
55
     * @return Parser|null
56
     */
57
    public function getParser($fileName) {
58
        if (!is_string($fileName)) {
59
            return null;
60
        }
61
62
        if (strpos($fileName, '/') === strlen($fileName) - 1) {
63
            $parser = $this->getByType(self::FOLDER_PARSER);
64
        } else if (strpos($fileName, '.json') !== false) {
65
            $parser = $this->getByType(self::JSON_PARSER);
66
        } else if (strpos($fileName, '.md') !== false) {
67
            $parser = $this->getByType(self::MARKDOWN_PARSER);
68
        } else if (strpos($fileName, '.yml') !== false) {
69
            $parser = $this->getByType(self::YAML_PARSER);
70
        } else if (strpos($fileName, '.jpg') !== false) {
71
            $parser = $this->getByType(self::IMAGE_PARSER);
72
        } else if (strpos($fileName, '.png') !== false) {
73
            $parser = $this->getByType(self::IMAGE_PARSER);
74
        } else if (strpos($fileName, '.css') !== false) {
75
            $parser = $this->getByType(self::CSS_PARSER);
76
        } else if (strpos($fileName, '.js') !== false) {
77
            $parser = $this->getByType(self::JS_PARSER);
78
        } else if (strpos($fileName, '.scss') !== false || strpos($fileName, '.sass') !== false) {
79
            $parser = $this->getByType(self::SASS_PARSER);
80
        } else {
81
            $parser = $this->getByType(self::DEFAULT_PARSER);
82
        }
83
84
        return $parser;
85
    }
86
87
    /**
88
     * @param string $type
89
     *
90
     * @return Parser|null
91
     */
92
    public function getByType($type) {
93
        if (isset($this->parsers[$type])) {
94
            return $this->parsers[$type];
95
        }
96
97
        switch ($type) {
98
            case self::IMAGE_PARSER:
99
                $parser = new ImageParser();
100
                break;
101
            case self::FOLDER_PARSER:
102
                $parser = new FolderParser();
103
                break;
104
            case self::MARKDOWN_PARSER:
105
                $parser = new MarkdownParser();
106
                break;
107
            case self::JSON_PARSER:
108
                $parser = new JsonParser();
109
                break;
110
            case self::YAML_PARSER:
111
                $parser = new YamlParser();
112
                break;
113
            case self::JS_PARSER:
114
                $parser = new FileParser();
115
                break;
116
            case self::CSS_PARSER:
117
                $parser = new FileParser();
118
                break;
119
            case self::SCSS_PARSER:
120
            case self::SASS_PARSER:
121
                $parser = new SassParser();
122
                break;
123
            case self::DEFAULT_PARSER:
124
            default:
125
                $parser = new DefaultParser();
126
                break;
127
        }
128
129
        if ($parser) {
130
            $this->parsers[$type] = $parser;
131
        }
132
133
        return $parser;
134
    }
135
136
}
137