From 3e8f0ecb3639084e6dc645d168ed27c7d0f34837 Mon Sep 17 00:00:00 2001 From: Austin Hyde Date: Sat, 20 Jun 2015 19:36:57 -0400 Subject: [PATCH] Replace boilerplate with magic methods --- src/Monolog/Handler/TestHandler.php | 180 +++++++--------------- tests/Monolog/Handler/TestHandlerTest.php | 6 + 2 files changed, 64 insertions(+), 122 deletions(-) diff --git a/src/Monolog/Handler/TestHandler.php b/src/Monolog/Handler/TestHandler.php index f431db94..fc2a5e3a 100644 --- a/src/Monolog/Handler/TestHandler.php +++ b/src/Monolog/Handler/TestHandler.php @@ -19,6 +19,42 @@ use Monolog\Logger; * It records all records and gives you access to them for verification. * * @author Jordi Boggiano + * + * @method boolean hasEmergency($record) + * @method boolean hasAlert($record) + * @method boolean hasCritical($record) + * @method boolean hasError($record) + * @method boolean hasWarning($record) + * @method boolean hasNotice($record) + * @method boolean hasInfo($record) + * @method boolean hasDebug($record) + * + * @method boolean hasEmergencyRecords() + * @method boolean hasAlertRecords() + * @method boolean hasCriticalRecords() + * @method boolean hasErrorRecords() + * @method boolean hasWarningRecords() + * @method boolean hasNoticeRecords() + * @method boolean hasInfoRecords() + * @method boolean hasDebugRecords() + * + * @method boolean hasEmergencyThatContains($message) + * @method boolean hasAlertThatContains($message) + * @method boolean hasCriticalThatContains($message) + * @method boolean hasErrorThatContains($message) + * @method boolean hasWarningThatContains($message) + * @method boolean hasNoticeThatContains($message) + * @method boolean hasInfoThatContains($message) + * @method boolean hasDebugThatContains($message) + * + * @method boolean hasEmergencyThatPasses($message) + * @method boolean hasAlertThatPasses($message) + * @method boolean hasCriticalThatPasses($message) + * @method boolean hasErrorThatPasses($message) + * @method boolean hasWarningThatPasses($message) + * @method boolean hasNoticeThatPasses($message) + * @method boolean hasInfoThatPasses($message) + * @method boolean hasDebugThatPasses($message) */ class TestHandler extends AbstractProcessingHandler { @@ -30,84 +66,9 @@ class TestHandler extends AbstractProcessingHandler return $this->records; } - public function hasEmergency($record) + protected function hasRecordRecords($level) { - return $this->hasRecord($record, Logger::EMERGENCY); - } - - public function hasAlert($record) - { - return $this->hasRecord($record, Logger::ALERT); - } - - public function hasCritical($record) - { - return $this->hasRecord($record, Logger::CRITICAL); - } - - public function hasError($record) - { - return $this->hasRecord($record, Logger::ERROR); - } - - public function hasWarning($record) - { - return $this->hasRecord($record, Logger::WARNING); - } - - public function hasNotice($record) - { - return $this->hasRecord($record, Logger::NOTICE); - } - - public function hasInfo($record) - { - return $this->hasRecord($record, Logger::INFO); - } - - public function hasDebug($record) - { - return $this->hasRecord($record, Logger::DEBUG); - } - - public function hasEmergencyRecords() - { - return isset($this->recordsByLevel[Logger::EMERGENCY]); - } - - public function hasAlertRecords() - { - return isset($this->recordsByLevel[Logger::ALERT]); - } - - public function hasCriticalRecords() - { - return isset($this->recordsByLevel[Logger::CRITICAL]); - } - - public function hasErrorRecords() - { - return isset($this->recordsByLevel[Logger::ERROR]); - } - - public function hasWarningRecords() - { - return isset($this->recordsByLevel[Logger::WARNING]); - } - - public function hasNoticeRecords() - { - return isset($this->recordsByLevel[Logger::NOTICE]); - } - - public function hasInfoRecords() - { - return isset($this->recordsByLevel[Logger::INFO]); - } - - public function hasDebugRecords() - { - return isset($this->recordsByLevel[Logger::DEBUG]); + return isset($this->recordsByLevel[$level]); } protected function hasRecord($record, $level) @@ -116,59 +77,19 @@ class TestHandler extends AbstractProcessingHandler $record = $record['message']; } - return $this->hasRecordThatPasses($level, function($rec) use ($record) { + return $this->hasRecordThatPasses(function($rec) use ($record) { return $rec['message'] === $record; - }); - } - - public function hasEmergencyThatContains($message) - { - return $this->hasRecordThatContains($message, Logger::EMERGENCY); - } - - public function hasAlertThatContains($message) - { - return $this->hasRecordThatContains($message, Logger::ALERT); - } - - public function hasCriticalThatContains($message) - { - return $this->hasRecordThatContains($message, Logger::CRITICAL); - } - - public function hasErrorThatContains($message) - { - return $this->hasRecordThatContains($message, Logger::ERROR); - } - - public function hasWarningThatContains($message) - { - return $this->hasRecordThatContains($message, Logger::WARNING); - } - - public function hasNoticeThatContains($message) - { - return $this->hasRecordThatContains($message, Logger::NOTICE); - } - - public function hasInfoThatContains($message) - { - return $this->hasRecordThatContains($message, Logger::INFO); - } - - public function hasDebugThatContains($message) - { - return $this->hasRecordThatContains($message, Logger::DEBUG); + }, $level); } public function hasRecordThatContains($message, $level) { - return $this->hasRecordThatPasses($level, function($rec) use ($message) { + return $this->hasRecordThatPasses(function($rec) use ($message) { return strpos($rec['message'], $message) !== false; - }); + }, $level); } - public function hasRecordThatPasses($level, $predicate) + public function hasRecordThatPasses($predicate, $level) { if (!is_callable($predicate)) { throw new \InvalidArgumentException("Expected a callable for hasRecordThatSucceeds"); @@ -195,4 +116,19 @@ class TestHandler extends AbstractProcessingHandler $this->recordsByLevel[$record['level']][] = $record; $this->records[] = $record; } + + + public function __call($method, $args) + { + if (preg_match('/(.*)(Debug|Info|Notice|Warning|Error|Critical|Alert|Emergency)(.*)/', $method, $matches) > 0) { + $genericMethod = $matches[1] . 'Record' . $matches[3]; + $level = constant('Monolog\Logger::' . strtoupper($matches[2])); + if (method_exists($this, $genericMethod)) { + $args[] = $level; + return call_user_func_array(array($this, $genericMethod), $args); + } + } + + throw new \BadMethodCallException('Call to undefined method ' . get_class($this) . '::' . $method . '()'); + } } diff --git a/tests/Monolog/Handler/TestHandlerTest.php b/tests/Monolog/Handler/TestHandlerTest.php index 5aa2a254..3ff3d62c 100644 --- a/tests/Monolog/Handler/TestHandlerTest.php +++ b/tests/Monolog/Handler/TestHandlerTest.php @@ -28,6 +28,9 @@ class TestHandlerTest extends TestCase $record = $this->getRecord($level, 'test'.$method); $this->assertFalse($handler->{'has'.$method}($record), 'has'.$method); $this->assertFalse($handler->{'has'.$method.'ThatContains'}('test'), 'has'.$method.'ThatContains'); + $this->assertFalse($handler->{'has'.$method.'ThatPasses'}(function($rec){ + return true; + }), 'has'.$method.'ThatPasses'); $this->assertFalse($handler->{'has'.$method.'Records'}(), 'has'.$method.'Records'); $handler->handle($record); @@ -35,6 +38,9 @@ class TestHandlerTest extends TestCase $this->assertTrue($handler->{'has'.$method}($record), 'has'.$method); $this->assertTrue($handler->{'has'.$method}('test'.$method), 'has'.$method); $this->assertTrue($handler->{'has'.$method.'ThatContains'}('test'), 'has'.$method.'ThatContains'); + $this->assertTrue($handler->{'has'.$method.'ThatPasses'}(function($rec){ + return true; + }), 'has'.$method.'ThatPasses'); $this->assertTrue($handler->{'has'.$method.'Records'}(), 'has'.$method.'Records'); $records = $handler->getRecords();