소스 검색

Store user in a temporary property instead of hacking it into the record

Jordi Boggiano 12 년 전
부모
커밋
e2e041eded
2개의 변경된 파일19개의 추가작업 그리고 5개의 파일을 삭제
  1. 6 3
      src/Monolog/Handler/PushoverHandler.php
  2. 13 2
      tests/Monolog/Handler/PushoverHandlerTest.php

+ 6 - 3
src/Monolog/Handler/PushoverHandler.php

@@ -24,13 +24,14 @@ class PushoverHandler extends SocketHandler
     private $token;
     private $users;
     private $title;
+    private $user;
 
     private $highPriorityLevel;
     private $emergencyLevel;
 
     /**
      * @param string  $token  Pushover api token
-     * @param string  $user   Pushover user ids the message will be sent to
+     * @param string|array $users   Pushover user id or array of ids the message will be sent to
      * @param string  $title  Title sent to the Pushover API
      * @param integer $level  The minimum logging level at which this handler will be triggered
      * @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not
@@ -69,7 +70,7 @@ class PushoverHandler extends SocketHandler
 
         $dataArray = array(
             'token' => $this->token,
-            'user' => $record['extra']['user'],
+            'user' => $this->user,
             'message' => $message,
             'title' => $this->title,
             'timestamp' => $timestamp
@@ -98,11 +99,13 @@ class PushoverHandler extends SocketHandler
     public function write(array $record)
     {
         foreach ($this->users as $user) {
-            $record['extra']['user'] = $user;
+            $this->user = $user;
 
             parent::write($record);
             $this->closeSocket();
         }
+
+        $this->user = null;
     }
 
     public function setHighPriorityLevel($value) {

+ 13 - 2
tests/Monolog/Handler/PushoverHandlerTest.php

@@ -82,7 +82,7 @@ class PushoverHandlerTest extends TestCase
         $this->assertRegexp('/message=' . $expectedMessage . '&title/', $content);
     }
 
-    public function testWriteWithHighPriority() 
+    public function testWriteWithHighPriority()
     {
         $this->createHandler();
         $this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1'));
@@ -92,7 +92,7 @@ class PushoverHandlerTest extends TestCase
         $this->assertRegexp('/token=myToken&user=myUser&message=test1&title=Monolog&timestamp=\d{10}&priority=1$/', $content);
     }
 
-    public function testWriteWithEmergencyPriority() 
+    public function testWriteWithEmergencyPriority()
     {
         $this->createHandler();
         $this->handler->handle($this->getRecord(Logger::EMERGENCY, 'test1'));
@@ -102,6 +102,17 @@ class PushoverHandlerTest extends TestCase
         $this->assertRegexp('/token=myToken&user=myUser&message=test1&title=Monolog&timestamp=\d{10}&priority=2$/', $content);
     }
 
+    public function testWriteToMultipleUsers()
+    {
+        $this->createHandler('myToken', array('userA', 'userB'));
+        $this->handler->handle($this->getRecord(Logger::EMERGENCY, 'test1'));
+        fseek($this->res, 0);
+        $content = fread($this->res, 1024);
+
+        $this->assertRegexp('/token=myToken&user=userA&message=test1&title=Monolog&timestamp=\d{10}&priority=2POST/', $content);
+        $this->assertRegexp('/token=myToken&user=userB&message=test1&title=Monolog&timestamp=\d{10}&priority=2$/', $content);
+    }
+
     private function createHandler($token = 'myToken', $user = 'myUser', $title = 'Monolog')
     {
         $constructorArgs = array($token, $user, $title);