Skip to content

Commit 202423e

Browse files
committed
FileSystem::mirror, Dates::setMaxTime, Dates::setMinTime
1 parent 7dae3f7 commit 202423e

File tree

4 files changed

+72
-4
lines changed

4 files changed

+72
-4
lines changed

src/Dates.php

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,45 @@ public static function today(bool $maximumTime = false): DateTime
2828
{
2929
$today = Dates::now();
3030
if ($maximumTime) {
31-
$today->setTime(23, 59, 59);
31+
self::setMaxTime($today);
3232
} else {
33-
$today->setTime(0, 0);
33+
self::setMinTime($today);
3434
}
3535
return $today;
3636
}
3737

38+
/**
39+
* @param DateTime $dateTime
40+
* @param bool $useAsReference
41+
* @return DateTime
42+
*/
43+
public static function setMaxTime(DateTime $dateTime, bool $useAsReference = true): DateTime
44+
{
45+
$subject = $useAsReference ? $dateTime : clone $dateTime;
46+
if (version_compare(phpversion(), "7.1.0", ">=")) {
47+
$subject->setTime(23, 59, 59, 999999);
48+
} else {
49+
$subject->setTime(23, 59, 59);
50+
}
51+
return $subject;
52+
}
53+
54+
/**
55+
* @param DateTime $dateTime
56+
* @param bool $useAsReference
57+
* @return DateTime
58+
*/
59+
public static function setMinTime(DateTime $dateTime, bool $useAsReference = true): DateTime
60+
{
61+
$subject = $useAsReference ? $dateTime : clone $dateTime;
62+
if (version_compare(phpversion(), "7.1.0", ">=")) {
63+
$subject->setTime(0, 0, 0, 0);
64+
} else {
65+
$subject->setTime(0, 0, 0);
66+
}
67+
return $subject;
68+
}
69+
3870
/**
3971
* @return DateTime
4072
*/

src/FileSystem.php

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66

77
use DirectoryIterator;
8+
use Exception;
89
use FilesystemIterator;
910
use Generator;
1011
use InvalidArgumentException;
@@ -69,6 +70,21 @@ public static function copy(string $source, string $destination, bool $overwrite
6970
}
7071
}
7172

73+
/**
74+
* @param string $source
75+
* @param string $destination
76+
*/
77+
public static function mirror(string $source, string $destination): void
78+
{
79+
if ($source === $destination) {
80+
throw new InvalidArgumentException('Values passed to arguments $source and $destination are same.');
81+
}
82+
if (FileSystem::exists($destination)) {
83+
FileSystem::delete($destination);
84+
}
85+
FileSystem::copy($source, $destination);
86+
}
87+
7288
/**
7389
* @param string $filename
7490
* @return bool
@@ -104,7 +120,7 @@ public static function createDirectory(string $directory, int $mode = 0777): voi
104120
}
105121

106122
/**
107-
* @param string[] ...$paths
123+
* @param string ...$paths
108124
* @return string
109125
*/
110126
public static function combinePath(...$paths): string

tests/DatesTest.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public function testNow()
2727
public function testToday()
2828
{
2929
self::assertEquals((new DateTime())->setTime(0, 0), Dates::today());
30-
self::assertEquals((new DateTime())->setTime(23, 59, 59), Dates::today(true));
30+
self::assertEquals((new DateTime())->setTime(23, 59, 59,999999), Dates::today(true));
3131
}
3232

3333
public function testDatabaseNow()
@@ -91,4 +91,16 @@ public function testTryParse()
9191
self::assertSame(false, Dates::tryParse("adfafdadf", $result));
9292
self::assertSame(true, Dates::tryParse("2000-01-01", $result));
9393
}
94+
95+
public function testSetMinTime()
96+
{
97+
$date = Dates::parse("2020-01-01 15:18");
98+
self::assertSame(Dates::setMinTime($date)->format("H:i:s"), "00:00:00");
99+
}
100+
101+
public function testSetMaxTime()
102+
{
103+
$date = Dates::parse("2020-01-01 15:18");
104+
self::assertSame(Dates::setMaxTime($date)->format("H:i:s"), "23:59:59");
105+
}
94106
}

tests/FileSystemTest.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,14 @@ public function testCopy()
127127
self::assertException(function () { FileSystem::copy($this->baseDir . "/var/directory_4", ""); }, InvalidArgumentException::class);
128128
}
129129

130+
public function testMirror()
131+
{
132+
$source = $this->baseDir . "/var/directory_1";
133+
$destination = $this->baseDir . "/var/copied_directory_1";
134+
FileSystem::mirror($source, $destination);
135+
self::assertSameSize(FileSystem::scanDirectory($source, FileSystem::SCAN_ALL, true), FileSystem::scanDirectory($destination, FileSystem::SCAN_ALL, true));
136+
}
137+
130138
public function testAppend()
131139
{
132140
$filename = $this->baseDir . "/var/directory_1/file_2.txt";

0 commit comments

Comments
 (0)