Skip to content

Commit 677ffef

Browse files
authored
Merge pull request #67 from seregazhuk/extract-interface-for-fs-watching
Extract interface for fs watching
2 parents 7f1aab4 + f85b744 commit 677ffef

File tree

6 files changed

+53
-34
lines changed

6 files changed

+53
-34
lines changed

src/Filesystem/ChangesListener.php

Lines changed: 5 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,13 @@
1-
<?php declare(strict_types=1);
1+
<?php
22

3+
declare(strict_types=1);
34
namespace seregazhuk\PhpWatcher\Filesystem;
45

5-
use Evenement\EventEmitter;
6-
use React\ChildProcess\Process;
7-
use React\EventLoop\LoopInterface;
8-
use RuntimeException;
96
use seregazhuk\PhpWatcher\Config\WatchList;
107

11-
final class ChangesListener extends EventEmitter
8+
interface ChangesListener
129
{
13-
private const INTERVAL = 0.15;
10+
public function start(WatchList $watchList): void;
1411

15-
private $loop;
16-
17-
public function __construct(LoopInterface $loop)
18-
{
19-
$this->loop = $loop;
20-
}
21-
22-
public function start(WatchList $watchList): void
23-
{
24-
$watcher = ResourceWatcherBuilder::create($watchList);
25-
26-
$this->loop->addPeriodicTimer(
27-
self::INTERVAL,
28-
function () use ($watcher) {
29-
if ($watcher->findChanges()->hasChanges()) {
30-
$this->emit('change');
31-
}
32-
}
33-
);
34-
}
12+
public function onChange(callable $callback): void;
3513
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace seregazhuk\PhpWatcher\Filesystem\ResourceWatcherBased;
4+
5+
use Evenement\EventEmitter;
6+
use React\EventLoop\LoopInterface;
7+
use seregazhuk\PhpWatcher\Config\WatchList;
8+
9+
final class ChangesListener extends EventEmitter implements
10+
\seregazhuk\PhpWatcher\Filesystem\ChangesListener
11+
{
12+
private const INTERVAL = 0.15;
13+
14+
private $loop;
15+
16+
public function __construct(LoopInterface $loop)
17+
{
18+
$this->loop = $loop;
19+
}
20+
21+
public function start(WatchList $watchList): void
22+
{
23+
$watcher = ResourceWatcherBuilder::create($watchList);
24+
25+
$this->loop->addPeriodicTimer(
26+
self::INTERVAL,
27+
function () use ($watcher) {
28+
if ($watcher->findChanges()->hasChanges()) {
29+
$this->emit('change');
30+
}
31+
}
32+
);
33+
}
34+
35+
public function onChange(callable $callback): void
36+
{
37+
$this->on('change', $callback);
38+
}
39+
}

src/Filesystem/ResourceWatcherBuilder.php renamed to src/Filesystem/ResourceWatcherBased/ResourceWatcherBuilder.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
<?php declare(strict_types=1);
22

3-
namespace seregazhuk\PhpWatcher\Filesystem;
3+
namespace seregazhuk\PhpWatcher\Filesystem\ResourceWatcherBased;
44

55
use seregazhuk\PhpWatcher\Config\WatchList;
6+
use seregazhuk\PhpWatcher\Filesystem\WatchPath;
67
use Symfony\Component\Finder\Finder;
78
use Yosymfony\ResourceWatcher\Crc32ContentHash;
89
use Yosymfony\ResourceWatcher\ResourceCacheMemory;

src/Watcher.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
<?php
2+
23
declare(strict_types=1);
34

45
namespace seregazhuk\PhpWatcher;
56

67
use React\EventLoop\LoopInterface;
78
use seregazhuk\PhpWatcher\Config\WatchList;
8-
use seregazhuk\PhpWatcher\Filesystem\ChangesListener;
9+
use seregazhuk\PhpWatcher\Filesystem\ResourceWatcherBased\ChangesListener;
910

1011
final class Watcher
1112
{
@@ -28,8 +29,7 @@ public function startWatching(
2829
$processRunner->start();
2930

3031
$this->filesystemListener->start($watchList);
31-
$this->filesystemListener->on(
32-
'change',
32+
$this->filesystemListener->onChange(
3333
static function () use ($processRunner, $signal, $delayToRestart) {
3434
$processRunner->stop($signal);
3535
$processRunner->restart($delayToRestart);

src/WatcherCommand.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
use seregazhuk\PhpWatcher\Config\Builder;
1010
use seregazhuk\PhpWatcher\Config\Config;
1111
use seregazhuk\PhpWatcher\Config\InputExtractor;
12-
use seregazhuk\PhpWatcher\Filesystem\ChangesListener;
12+
use seregazhuk\PhpWatcher\Filesystem\ResourceWatcherBased\ChangesListener;
1313
use seregazhuk\PhpWatcher\Screen\Screen;
1414
use seregazhuk\PhpWatcher\Screen\SpinnerFactory;
1515
use Symfony\Component\Console\Command\Command as BaseCommand;

tests/Feature/ChangesListenerTest.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@
55
use PHPUnit\Framework\TestCase;
66
use React\EventLoop\Factory;
77
use seregazhuk\PhpWatcher\Config\WatchList;
8-
use seregazhuk\PhpWatcher\Filesystem\ChangesListener;
8+
use seregazhuk\PhpWatcher\Filesystem\ResourceWatcherBased\ChangesListener;
99
use seregazhuk\PhpWatcher\Tests\Feature\Helper\Filesystem;
1010
use seregazhuk\PhpWatcher\Tests\Feature\Helper\WithFilesystem;
11-
use function \Clue\React\Block\sleep;
11+
12+
use function Clue\React\Block\sleep;
1213

1314
final class ChangesListenerTest extends TestCase
1415
{

0 commit comments

Comments
 (0)