Passed
Push — main ( 241083...5efb85 )
by Sebastian
04:13
created

InDirectory::__construct()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 2
nc 2
nop 2
dl 0
loc 4
ccs 3
cts 3
cp 1
crap 2
rs 10
c 1
b 0
f 0
1
<?php
2
3
/**
4
 * This file is part of CaptainHook
5
 *
6
 * (c) Sebastian Feldmann <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace CaptainHook\App\Hook\Condition\File;
13
14
use CaptainHook\App\Console\IO;
15
use CaptainHook\App\Git\Diff\FilterUtil;
16
use CaptainHook\App\Hook\Condition;
17
use SebastianFeldmann\Git\Repository;
18
19
/**
20
 * Class InDirectory
21
 *
22
 * All FileStaged conditions are only applicable for `pre-commit` hooks.
23
 *
24
 * Example configuration:
25
 *
26
 * <code>
27
 * {
28
 *   "action": "some-action"
29
 *   "conditions": [
30
 *     {
31
 *       "exec": "CaptainHook.FileStaged.InDirectory",
32
 *       "args": ["src"]
33
 *     }
34
 *   ]
35
 * }
36
 * </code>
37
 *
38
 * @package CaptainHook
39
 * @author  Sebastian Feldmann <[email protected]>
40
 * @link    https://github.com/captainhook-git/captainhook
41
 * @since   Class available since Release 5.6.1
42
 */
43
abstract class InDirectory extends Condition\File
44
{
45
    /**
46
     * Directory path to check e.g. 'src/' or 'path/To/Custom/Directory/'
47
     *
48
     * @var array<int, string>
49
     */
50
    protected array $directories;
51
52
    /**
53
     * --diff-filter options
54
     *
55
     * @var array<int, string>
56
     */
57
    protected array $diffFilter;
58
59
    /**
60
     * InDirectory constructor
61
     *
62
     * @param array<int, string>|string $directories
63
     * @param array<int, string>|string $diffFilter
64
     */
65 4
    public function __construct(array|string $directories, array|string $diffFilter = [])
66
    {
67 4
        $this->directories = is_array($directories) ? $directories : [$directories];
0 ignored issues
show
introduced by
The condition is_array($directories) is always true.
Loading history...
68 4
        $this->diffFilter  = FilterUtil::filterFromConfigValue($diffFilter);
69
    }
70
71
    /**
72
     * Evaluates the condition
73
     *
74
     * @param  \CaptainHook\App\Console\IO       $io
75
     * @param  \SebastianFeldmann\Git\Repository $repository
76
     * @return bool
77
     */
78 4
    public function isTrue(IO $io, Repository $repository): bool
79
    {
80 4
        $files    = $this->getFiles($io, $repository, $this->diffFilter);
81 4
        $filtered = $this->filterFilesByDirectory($files, $this->directories);
82 4
        return count($filtered) > 0;
83
    }
84
}
85