Completed
Pull Request — master (#2)
by James Ekow Abaka
01:17
created

Filesystem::checkNotExists()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 6
c 0
b 0
f 0
ccs 4
cts 4
cp 1
rs 9.4285
cc 2
eloc 3
nc 2
nop 1
crap 2
1
<?php
2
/*
3
 * Ntentan Framework
4
 * Copyright (c) 2008-2015 James Ekow Abaka Ainooson
5
 * 
6
 * Permission is hereby granted, free of charge, to any person obtaining
7
 * a copy of this software and associated documentation files (the
8
 * "Software"), to deal in the Software without restriction, including
9
 * without limitation the rights to use, copy, modify, merge, publish,
10
 * distribute, sublicense, and/or sell copies of the Software, and to
11
 * permit persons to whom the Software is furnished to do so, subject to
12
 * the following conditions:
13
 * 
14
 * The above copyright notice and this permission notice shall be
15
 * included in all copies or substantial portions of the Software.
16
 * 
17
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 
24
 * 
25
 */
26
27
namespace ntentan\utils;
28
use ntentan\utils\filesystem\FileInterface;
29
30
/**
31
 * A collection of filesystem utilities.
32
 * 
33
 */
34
class Filesystem
35
{
36
    /**
37
     * Checks if a file is writeable.
38
     * In cases where the file cannot be written to an exception is thrown.
39
     *
40
     * @param string $path The path to the file to be checked.
41
     * @throws exceptions\FileNotWriteableException
42
     */
43 11
    public static function checkWritable(string $path) : void
44
    {
45 11
        if (!is_writable($path)) {
46 2
            throw new exceptions\FileNotWriteableException("File $path is not writeable");
47
        }
48 9
    }
49
50
    /**
51
     * Check if a file is readable.
52
     * In cases where the file cannot be read, an exception is thrown.
53
     *
54
     * @param string $path The path to the file to be checked.
55
     * @throws exceptions\FileNotReadableException
56
     */
57 11
    public static function checkReadable(string $path) : void
58
    {
59 11
        if (!is_readable($path)) {
60 2
            throw new exceptions\FileNotReadableException("File $path is not readable");
61
        }
62 9
    }
63
64
    /**
65
     * Checks if a file exists and throws an exception if not.
66
     *
67
     * @param $path
68
     * @throws exceptions\FileNotFoundException
69
     */
70 14
    public static function checkExists(string $path) : void
71
    {
72 14
        if (!file_exists($path)) {
73 5
            throw new exceptions\FileNotFoundException("File '$path' does not exist");
74
        }
75 11
    }
76
77
    /**
78
     * Checks if a file exists and throws an exception if it does.
79
     *
80
     * @param string $path
81
     * @throws exceptions\FileAlreadyExistsException
82
     */
83 3
    public static function checkNotExists(string $path) : void
84
    {
85 3
        if(file_exists($path)) {
86 1
            throw new exceptions\FileAlreadyExistsException("File '$path' already exists");
87
        }
88 2
    }
89
90
    /**
91
     * Checks if a file exists and is writeable and throws a relevant exception if either condition is not met.
92
     *
93
     * @param $path
94
     * @throws exceptions\FileNotFoundException
95
     * @throws exceptions\FileNotWriteableException
96
     */
97 7
    public static function checkWriteSafety($path)
98
    {
99 7
        Filesystem::checkExists($path);
100 6
        Filesystem::checkWritable($path);
101 5
    }
102
103
    /**
104
     * Checks if a file exists and is readable and throws a relevant excetion if either condition is not met.
105
     *
106
     * @param $path
107
     * @throws exceptions\FileNotFoundException
108
     * @throws exceptions\FileNotReadableException
109
     */
110 3
    public static function checkReadSafety($path)
111
    {
112 3
        Filesystem::checkExists($path);
113 2
        Filesystem::checkReadable($path);
114 1
    }
115
116
    /**
117
     * Return an instance of the relevant FileInterface (File or Directory) for a file in a given path.
118
     *
119
     * @param string $path
120
     * @return FileInterface
121
     */
122 6
    public static function get($path)
123
    {
124 6
        if (is_dir($path)) {
125 6
            return new filesystem\Directory($path);
126
        }
127 6
        return new filesystem\File($path);
128
    }
129
}
130