path = $path; $this->filesystem = $filesystem; } /** * Check whether the entree is a directory. * * @return bool */ public function isDir() { return $this->getType() === 'dir'; } /** * Check whether the entree is a file. * * @return bool */ public function isFile() { return $this->getType() === 'file'; } /** * Retrieve the entree type (file|dir). * * @return string file or dir */ public function getType() { $metadata = $this->filesystem->getMetadata($this->path); return $metadata ? $metadata['type'] : 'dir'; } /** * Set the Filesystem object. * * @param FilesystemInterface $filesystem * * @return $this */ public function setFilesystem(FilesystemInterface $filesystem) { $this->filesystem = $filesystem; return $this; } /** * Retrieve the Filesystem object. * * @return FilesystemInterface */ public function getFilesystem() { return $this->filesystem; } /** * Set the entree path. * * @param string $path * * @return $this */ public function setPath($path) { $this->path = $path; return $this; } /** * Retrieve the entree path. * * @return string path */ public function getPath() { return $this->path; } /** * Plugins pass-through. * * @param string $method * @param array $arguments * * @return mixed */ public function __call($method, array $arguments) { array_unshift($arguments, $this->path); $callback = [$this->filesystem, $method]; try { return call_user_func_array($callback, $arguments); } catch (BadMethodCallException $e) { throw new BadMethodCallException( 'Call to undefined method ' . get_called_class() . '::' . $method ); } } }