Completed
Push — master ( 2e7016...cf482f )
by Freek
02:00
created

DirectoryCleaner::policy()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 7
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
namespace Spatie\DirectoryCleanup;
4
5
use Carbon\Carbon;
6
use Illuminate\Support\Collection;
7
use Illuminate\Filesystem\Filesystem;
8
use Spatie\DirectoryCleanup\Policies\Policy;
9
10
class DirectoryCleaner
11
{
12
    /** @var \Illuminate\Filesystem\Filesystem */
13
    protected $filesystem;
14
15
    /** @var string */
16
    protected $directory;
17
18
    /**
19
     * @param \Illuminate\Filesystem\Filesystem $filesystem
20
     */
21
    public function __construct(Filesystem $filesystem)
22
    {
23
        $this->filesystem = $filesystem;
24
    }
25
26
    /**
27
     * @param string $directory
28
     *
29
     * @return $this
30
     */
31
    public function setDirectory(string $directory)
32
    {
33
        $this->directory = $directory;
34
35
        return $this;
36
    }
37
38
    /**
39
     * @param int $minutes
40
     *
41
     * @return \Illuminate\Support\Collection
42
     */
43
    public function deleteFilesOlderThanMinutes(int $minutes) : Collection
44
    {
45
        $timeInPast = Carbon::now()->subMinutes($minutes);
46
47
        return collect($this->filesystem->allFiles($this->directory))
48
            ->filter(function ($file) use ($timeInPast) {
49
                return Carbon::createFromTimestamp(filemtime($file))
50
                    ->lt($timeInPast);
51
            })
52
            ->filter(function ($file) {
53
                return $this->policy()->allow($file);
54
            })
55
            ->each(function ($file) {
56
                $this->filesystem->delete($file);
57
            });
58
    }
59
60
    /**
61
     * @return \Spatie\DirectoryCleanup\Policies\Policy
62
     */
63
    protected function policy() : Policy
64
    {
65
        return resolve(config(
66
            'laravel-directory-cleanup.cleanup_policy',
67
            \Spatie\DirectoryCleanup\Policies\Basic::class
68
        ));
69
    }
70
}
71