From e2c4b65b46d11aba4c2292fd90eae5a65f5bab33 Mon Sep 17 00:00:00 2001
From: Bart Jaskulski <bjaskulski@protonmail.com>
Date: Mon, 16 Oct 2023 22:00:01 +0200
Subject: [PATCH] refactor: add deprecations

Signed-off-by: Bart Jaskulski <bjaskulski@protonmail.com>
---
 src/Renderer/Renderer.php    |  2 ++
 src/Resolver/DirResolver.php | 13 +++++++++++--
 src/Resolver/Resolver.php    |  6 +++---
 3 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/src/Renderer/Renderer.php b/src/Renderer/Renderer.php
index e106044..926a418 100644
--- a/src/Renderer/Renderer.php
+++ b/src/Renderer/Renderer.php
@@ -13,6 +13,8 @@ interface Renderer
      * Set the resolver used to map a template name to a resource the renderer may consume.
      *
      * @param  Resolver $resolver
+	 *
+	 * @deprecated Setting resolver doesn't concern renderer. Pass it with setter method, or by constructor, but it shouldn't be included in interface declaration.
      */
     public function set_resolver(Resolver $resolver);
 
diff --git a/src/Resolver/DirResolver.php b/src/Resolver/DirResolver.php
index 69f1b6c..098f164 100644
--- a/src/Resolver/DirResolver.php
+++ b/src/Resolver/DirResolver.php
@@ -7,7 +7,7 @@ use WPDesk\View\Renderer\Renderer;
 use WPDesk\View\Resolver\Exception\CanNotResolve;
 
 /**
- * Class should resolve name by serching in provided dir. If empty then current dir
+ * Class should resolve name by serching in provided dir.
  *
  * @package WPDesk\View\Resolver
  */
@@ -21,10 +21,14 @@ class DirResolver implements Resolver
     /**
      * Base path for templates ie. subdir
      *
-     * @param $dir
+     * @param string $dir
      */
     public function __construct($dir)
     {
+		if ( empty( $dir ) ) {
+			trigger_error( "DirResolver requires templates' base path.", E_USER_DEPRECATED );
+		}
+
         $this->dir = $dir;
     }
 
@@ -39,6 +43,11 @@ class DirResolver implements Resolver
     public function resolve($name, Renderer $renderer = null)
     {
         $dir = rtrim($this->dir, '/');
+
+		if ( empty( $dir ) || $dir === '/' ) {
+			throw new CanNotResolve("Denying to search in system's root path.");
+		}
+
         $fullName = $dir . '/' . $name;
         if (file_exists($fullName)) {
             return $fullName;
diff --git a/src/Resolver/Resolver.php b/src/Resolver/Resolver.php
index ac50959..3bc575a 100644
--- a/src/Resolver/Resolver.php
+++ b/src/Resolver/Resolver.php
@@ -5,14 +5,14 @@ namespace WPDesk\View\Resolver;
 use WPDesk\View\Renderer\Renderer;
 
 /**
- * Can resolve template name to a file
+ * Can resolve template name to a file.
  */
 interface Resolver {
 	/**
-	 * Resolve a template/pattern name to a resource the renderer can consume
+	 * Resolve a template/pattern name to a resource the renderer can consume.
 	 *
 	 * @param  string $name
-	 * @param  null|Resolver $renderer
+	 * @param  null|Resolver $renderer Deprecated.
 	 *
 	 * @return string
 	 */
-- 
GitLab