• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

eliashaeussler / gitattributes / 11573362694

29 Oct 2024 11:59AM UTC coverage: 25.0%. First build
11573362694

push

github

eliashaeussler
Initial commit

35 of 140 new or added lines in 9 files covered. (25.0%)

35 of 140 relevant lines covered (25.0%)

1.31 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/GitattributesParser.php
1
<?php
2

3
declare(strict_types=1);
4

5
/*
6
 * This file is part of the Composer package "eliashaeussler/gitattributes".
7
 *
8
 * Copyright (C) 2024 Elias Häußler <elias@haeussler.dev>
9
 *
10
 * This program is free software: you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation, either version 3 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program. If not, see <https://www.gnu.org/licenses/>.
22
 */
23

24
namespace EliasHaeussler\Gitattributes;
25

26
use Symfony\Component\Filesystem;
27
use Symfony\Component\Finder;
28

29
use function array_filter;
30
use function array_map;
31
use function array_values;
32
use function file;
33
use function is_readable;
34

35
/**
36
 * GitattributesParser.
37
 *
38
 * @author Elias Häußler <elias@haeussler.dev>
39
 * @license GPL-3.0-or-later
40
 */
41
final class GitattributesParser
42
{
NEW
43
    public function __construct(
×
44
        private readonly string $rootPath,
NEW
45
    ) {}
×
46

47
    /**
48
     * @throws Exception\FileDoesNotExist
49
     * @throws Exception\FileIsNotReadable
50
     */
NEW
51
    public function parse(string $filename): Entity\Ruleset
×
52
    {
NEW
53
        $file = $this->createFileObject($filename);
×
NEW
54
        $path = $file->getPathname();
×
55

NEW
56
        if (!file_exists($path)) {
×
NEW
57
            throw new Exception\FileDoesNotExist($path);
×
58
        }
NEW
59
        if (!is_readable($path)) {
×
NEW
60
            throw new Exception\FileIsNotReadable($path);
×
61
        }
62

NEW
63
        $lines = file($path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
×
64

NEW
65
        if (false === $lines) {
×
NEW
66
            throw new Exception\FileIsNotReadable($path);
×
67
        }
68

NEW
69
        $rules = array_values(
×
NEW
70
            array_filter(
×
NEW
71
                array_map(Entity\Rule::fromString(...), $lines),
×
NEW
72
            ),
×
NEW
73
        );
×
74

NEW
75
        return new Entity\Ruleset($file, $rules);
×
76
    }
77

NEW
78
    private function createFileObject(string $filename): Finder\SplFileInfo
×
79
    {
NEW
80
        $pathname = Filesystem\Path::join($this->rootPath, $filename);
×
81

NEW
82
        return new Finder\SplFileInfo(
×
NEW
83
            $pathname,
×
NEW
84
            Filesystem\Path::makeRelative(Filesystem\Path::getDirectory($pathname), $this->rootPath),
×
NEW
85
            $filename,
×
NEW
86
        );
×
87
    }
88
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc