Expose source path on LogFileInterface
Add LogFileInterface::getPath(): ?string so detectors can dispatch on a filename hint when the original path is known. Default implementation on the abstract LogFile base returns null; PathLogFile records its constructor argument. StringLogFile and StreamLogFile inherit the null default. Tests cover both the path and null-fallback cases.
This commit is contained in:
@@ -10,6 +10,7 @@ namespace IndifferentKetchup\Codex\Log\File;
|
|||||||
abstract class LogFile implements LogFileInterface
|
abstract class LogFile implements LogFileInterface
|
||||||
{
|
{
|
||||||
protected ?string $content = null;
|
protected ?string $content = null;
|
||||||
|
protected ?string $path = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the log file content
|
* Get the log file content
|
||||||
@@ -20,4 +21,14 @@ abstract class LogFile implements LogFileInterface
|
|||||||
{
|
{
|
||||||
return $this->content;
|
return $this->content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the source path of the log file when one is known
|
||||||
|
*
|
||||||
|
* @return string|null
|
||||||
|
*/
|
||||||
|
public function getPath(): ?string
|
||||||
|
{
|
||||||
|
return $this->path;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -15,4 +15,15 @@ interface LogFileInterface
|
|||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getContent(): string;
|
public function getContent(): string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the source path of the log file when one is known
|
||||||
|
*
|
||||||
|
* Returns null for log files without a filesystem origin (string content,
|
||||||
|
* arbitrary streams). Concrete implementations should return the path used
|
||||||
|
* to construct them when applicable.
|
||||||
|
*
|
||||||
|
* @return string|null
|
||||||
|
*/
|
||||||
|
public function getPath(): ?string;
|
||||||
}
|
}
|
||||||
@@ -22,6 +22,7 @@ class PathLogFile extends LogFile
|
|||||||
throw new InvalidArgumentException("File '" . $path . "' not found.");
|
throw new InvalidArgumentException("File '" . $path . "' not found.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->path = $path;
|
||||||
$this->content = file_get_contents($path);
|
$this->content = file_get_contents($path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,4 +14,12 @@ class PathLogFileTest extends TestCase
|
|||||||
|
|
||||||
$this->assertStringEqualsFile($path, $logFile->getContent());
|
$this->assertStringEqualsFile($path, $logFile->getContent());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testGetPathReturnsConstructorArgument(): void
|
||||||
|
{
|
||||||
|
$path = __DIR__ . "/../../../data/simple.log";
|
||||||
|
$logFile = new PathLogFile($path);
|
||||||
|
|
||||||
|
$this->assertSame($path, $logFile->getPath());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,4 +14,11 @@ class StringLogFileTest extends TestCase
|
|||||||
|
|
||||||
$this->assertEquals($content, $logFile->getContent());
|
$this->assertEquals($content, $logFile->getContent());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testGetPathReturnsNull(): void
|
||||||
|
{
|
||||||
|
$logFile = new StringLogFile("anything");
|
||||||
|
|
||||||
|
$this->assertNull($logFile->getPath());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user