• 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/Entity/Rule.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\Entity;
25

26
use Stringable;
27

28
use function array_map;
29
use function array_shift;
30
use function explode;
31
use function implode;
32
use function preg_replace;
33
use function str_starts_with;
34
use function trim;
35

36
/**
37
 * Rule.
38
 *
39
 * @author Elias Häußler <elias@haeussler.dev>
40
 * @license GPL-3.0-or-later
41
 */
42
final class Rule implements Stringable
43
{
44
    /**
45
     * @param list<Attribute\Attribute> $attributes
46
     */
NEW
47
    public function __construct(
×
48
        private readonly FilePattern $pattern,
49
        private readonly array $attributes,
NEW
50
    ) {}
×
51

NEW
52
    public static function fromString(string $entry): ?self
×
53
    {
NEW
54
        $entry = trim($entry);
×
55

56
        // Skip comments
NEW
57
        if (str_starts_with($entry, '#')) {
×
NEW
58
            return null;
×
59
        }
60

NEW
61
        $parts = array_map(trim(...), explode(' ', (string) preg_replace('/\s{2,}/', ' ', $entry.' ')));
×
NEW
62
        $pattern = array_shift($parts);
×
63

NEW
64
        return new self(
×
NEW
65
            new FilePattern($pattern),
×
NEW
66
            array_map(Attribute\Attribute::fromString(...), $parts),
×
NEW
67
        );
×
68
    }
69

NEW
70
    public function pattern(): FilePattern
×
71
    {
NEW
72
        return $this->pattern;
×
73
    }
74

75
    /**
76
     * @return list<Attribute\Attribute>
77
     */
NEW
78
    public function attributes(): array
×
79
    {
NEW
80
        return $this->attributes;
×
81
    }
82

NEW
83
    public function toString(): string
×
84
    {
NEW
85
        return implode(' ', [
×
NEW
86
            $this->pattern->pattern(),
×
NEW
87
            ...array_map('strval', $this->attributes),
×
NEW
88
        ]);
×
89
    }
90

NEW
91
    public function __toString(): string
×
92
    {
NEW
93
        return $this->toString();
×
94
    }
95
}
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