diff --git a/src/JasonLewis/ResourceWatcher/Watcher.php b/src/JasonLewis/ResourceWatcher/Watcher.php index 249ad86..ac8ed55 100644 --- a/src/JasonLewis/ResourceWatcher/Watcher.php +++ b/src/JasonLewis/ResourceWatcher/Watcher.php @@ -46,19 +46,13 @@ public function __construct(Tracker $tracker, Filesystem $files) /** * Register a resource to be watched. * - * @param string $resource + * @param string|array $resources * @return \JasonLewis\ResourceWatcher\Listener */ - public function watch($resource) + public function watch($resources) { - if (! $this->files->exists($resource)) { - throw new RuntimeException('Resource must exist before you can watch it.'); - } elseif ($this->files->isDirectory($resource)) { - $resource = new DirectoryResource(new SplFileInfo($resource), $this->files); - - $resource->setupDirectory(); - } else { - $resource = new FileResource(new SplFileInfo($resource), $this->files); + if (!is_array($resources)) { + $resources = array($resources); } // The listener gives users the ability to bind listeners on the events @@ -66,7 +60,19 @@ public function watch($resource) // to the tracker so the tracker can fire any bound listeners. $listener = new Listener; - $this->tracker->register($resource, $listener); + foreach ($resources as $resource) { + if (! $this->files->exists($resource)) { + throw new RuntimeException('Resource must exist before you can watch it.'); + } elseif ($this->files->isDirectory($resource)) { + $resource = new DirectoryResource(new SplFileInfo($resource), $this->files); + + $resource->setupDirectory(); + } else { + $resource = new FileResource(new SplFileInfo($resource), $this->files); + } + + $this->tracker->register($resource, $listener); + } return $listener; } diff --git a/tests/WatcherTest.php b/tests/WatcherTest.php index e80c92b..bf13cd1 100644 --- a/tests/WatcherTest.php +++ b/tests/WatcherTest.php @@ -45,6 +45,18 @@ public function testWatchDirectoryResource() $this->assertInstanceOf('JasonLewis\ResourceWatcher\Resource\DirectoryResource', $resource[0]); } + public function testWatchMultipleDirectoryResource() + { + $this->files->shouldReceive('exists')->times(16)->andReturn(true); + $this->files->shouldReceive('isDirectory')->times(2)->andReturn(true); + $this->files->shouldReceive('lastModified')->times(14)->andReturn(time()); + + $this->watcher->watch(array(__DIR__,__DIR__)); + + $tracked = $this->watcher->getTracker()->getTracked(); + $resource = array_pop($tracked); + $this->assertInstanceOf('JasonLewis\ResourceWatcher\Resource\DirectoryResource', $resource[0]); + } public function testWatchFileResource() {