Passed
Push — master ( 0f9932...7bc3f9 )
by Brent
03:42
created

ParserFactory::getParser()   C

Complexity

Conditions 11
Paths 10

Size

Total Lines 25
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

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