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

eliashaeussler / version-bumper / 12732622834

12 Jan 2025 10:18AM UTC coverage: 89.29% (+0.5%) from 88.745%
12732622834

Pull #17

github

web-flow
Merge 43d7c218e into 0b06fcb19
Pull Request #17: [!!!][FEATURE] Introduce config presets

100 of 110 new or added lines in 6 files covered. (90.91%)

4 existing lines in 1 file now uncovered.

717 of 803 relevant lines covered (89.29%)

3.89 hits per line

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

58.06
/src/Config/VersionBumperConfig.php
1
<?php
2

3
declare(strict_types=1);
4

5
/*
6
 * This file is part of the Composer package "eliashaeussler/version-bumper".
7
 *
8
 * Copyright (C) 2024-2025 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\VersionBumper\Config;
25

26
use ReflectionObject;
27

28
use function array_merge;
29
use function is_array;
30

31
/**
32
 * VersionBumperConfig.
33
 *
34
 * @author Elias Häußler <elias@haeussler.dev>
35
 * @license GPL-3.0-or-later
36
 */
37
final class VersionBumperConfig
38
{
39
    /**
40
     * @param list<FileToModify>          $filesToModify
41
     * @param list<VersionRangeIndicator> $versionRangeIndicators
42
     * @param list<Preset\Preset>         $presets
43
     */
44
    public function __construct(
3✔
45
        private readonly array $presets = [],
46
        private readonly array $filesToModify = [],
47
        private ?string $rootPath = null,
48
        private readonly ReleaseOptions $releaseOptions = new ReleaseOptions(),
49
        private readonly array $versionRangeIndicators = [],
50
    ) {}
3✔
51

52
    /**
53
     * @return list<Preset\Preset>
54
     */
NEW
55
    public function presets(): array
×
56
    {
NEW
57
        return $this->presets;
×
58
    }
59

60
    /**
61
     * @return list<FileToModify>
62
     */
63
    public function filesToModify(): array
×
64
    {
65
        return $this->filesToModify;
×
66
    }
67

68
    public function rootPath(): ?string
×
69
    {
70
        return $this->rootPath;
×
71
    }
72

73
    public function setRootPath(string $rootPath): self
×
74
    {
75
        $this->rootPath = $rootPath;
×
76

77
        return $this;
×
78
    }
79

80
    public function releaseOptions(): ReleaseOptions
×
81
    {
82
        return $this->releaseOptions;
×
83
    }
84

85
    /**
86
     * @return list<VersionRangeIndicator>
87
     */
88
    public function versionRangeIndicators(): array
×
89
    {
90
        return $this->versionRangeIndicators;
×
91
    }
92

93
    /**
94
     * @impure
95
     *
96
     * @internal
97
     */
98
    public function merge(self $other): self
3✔
99
    {
100
        $shell = new self();
3✔
101
        $reflection = new ReflectionObject($other);
3✔
102
        $parameters = $reflection->getConstructor()?->getParameters() ?? [];
3✔
103
        $properties = [];
3✔
104

105
        foreach ($parameters as $parameter) {
3✔
106
            $property = $reflection->getProperty($parameter->getName());
3✔
107
            $thisValue = $property->getValue($this);
3✔
108
            $otherValue = $property->getValue($other);
3✔
109

110
            /* @phpstan-ignore notEqual.notAllowed (Loose comparison is intended as we compare objects) */
111
            if ($property->getValue($shell) != $otherValue) {
3✔
112
                $thisValue = is_array($thisValue) && is_array($otherValue)
2✔
113
                    ? array_merge($thisValue, $otherValue)
1✔
114
                    : $otherValue
1✔
115
                ;
2✔
116
            }
117

118
            $properties[] = $thisValue;
3✔
119
        }
120

121
        /* @phpstan-ignore argument.type */
122
        return new self(...$properties);
3✔
123
    }
124
}
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