History: lazy loading for the history file

Only read it when it's necessary
This commit is contained in:
ArthurHoaro 2017-01-16 12:50:36 +01:00
parent 4306b184c4
commit d16ca2e22f
2 changed files with 32 additions and 3 deletions

View file

@ -70,6 +70,15 @@ public function __construct($historyFilePath, $retentionTime = null)
if ($retentionTime !== null) {
$this->retentionTime = $retentionTime;
}
}
/**
* Initialize: read history file.
*
* Allow lazy loading (don't read the file if it isn't necessary).
*/
protected function initialize()
{
$this->check();
$this->read();
}
@ -120,6 +129,10 @@ public function updateSettings()
*/
protected function addEvent($status, $id = null)
{
if ($this->history === null) {
$this->initialize();
}
$item = [
'event' => $status,
'datetime' => (new DateTime())->format(DateTime::ATOM),
@ -178,6 +191,10 @@ protected function write()
*/
public function getHistory()
{
if ($this->history === null) {
$this->initialize();
}
return $this->history;
}
}

View file

@ -21,9 +21,19 @@ public function tearDown()
/**
* Test that the history file is created if it doesn't exist.
*/
public function testConstructFileCreated()
public function testConstructLazyLoading()
{
new History(self::$historyFilePath);
$this->assertFileNotExists(self::$historyFilePath);
}
/**
* Test that the history file is created if it doesn't exist.
*/
public function testAddEventCreateFile()
{
$history = new History(self::$historyFilePath);
$history->updateSettings();
$this->assertFileExists(self::$historyFilePath);
}
@ -37,7 +47,8 @@ public function testConstructNotWritable()
{
touch(self::$historyFilePath);
chmod(self::$historyFilePath, 0440);
new History(self::$historyFilePath);
$history = new History(self::$historyFilePath);
$history->updateSettings();
}
/**
@ -49,8 +60,9 @@ public function testConstructNotWritable()
public function testConstructNotParsable()
{
file_put_contents(self::$historyFilePath, 'not parsable');
$history = new History(self::$historyFilePath);
// gzinflate generates a warning
@new History(self::$historyFilePath);
@$history->updateSettings();
}
/**