Jelajahi Sumber

Remove code duplication, refs #435

Jordi Boggiano 11 tahun lalu
induk
melakukan
3e1b8a7afe

+ 7 - 2
src/Monolog/Formatter/LineFormatter.php

@@ -73,7 +73,7 @@ class LineFormatter extends NormalizerFormatter
 
         foreach ($vars['extra'] as $var => $val) {
             if (false !== strpos($output, '%extra.'.$var.'%')) {
-                $output = str_replace('%extra.'.$var.'%', $this->replaceNewlines($this->convertToString($val)), $output);
+                $output = str_replace('%extra.'.$var.'%', $this->stringify($val), $output);
                 unset($vars['extra'][$var]);
             }
         }
@@ -92,7 +92,7 @@ class LineFormatter extends NormalizerFormatter
 
         foreach ($vars as $var => $val) {
             if (false !== strpos($output, '%'.$var.'%')) {
-                $output = str_replace('%'.$var.'%', $this->replaceNewlines($this->convertToString($val)), $output);
+                $output = str_replace('%'.$var.'%', $this->stringify($val), $output);
             }
         }
 
@@ -109,6 +109,11 @@ class LineFormatter extends NormalizerFormatter
         return $message;
     }
 
+    public function stringify($value)
+    {
+        return $this->replaceNewlines($this->convertToString($value));
+    }
+
     protected function normalizeException(Exception $e)
     {
         $previousText = '';

+ 16 - 58
src/Monolog/Handler/SlackHandler.php

@@ -12,6 +12,7 @@
 namespace Monolog\Handler;
 
 use Monolog\Logger;
+use Monolog\Formatter\LineFormatter;
 
 /**
  * Sends notifications through Slack API
@@ -63,6 +64,11 @@ class SlackHandler extends SocketHandler
      */
     private $includeExtra;
 
+    /**
+     * @var LineFormatter
+     */
+    private $lineFormatter;
+
     /**
      * @param string      $token         Slack API token
      * @param string      $channel       Slack channel (encoded ID or name)
@@ -87,6 +93,9 @@ class SlackHandler extends SocketHandler
         $this->useAttachment = $useAttachment;
         $this->useShortAttachment = $useShortAttachment;
         $this->includeExtra = $includeExtra;
+        if ($this->includeExtra) {
+            $this->lineFormatter = new LineFormatter;
+        }
     }
 
     /**
@@ -118,15 +127,7 @@ class SlackHandler extends SocketHandler
             'attachments' => array()
         );
 
-        $extra = '';
-        foreach ($record['extra'] as $var => $val) {
-            $extra .= $var.': '.$this->replaceNewlines($this->convertToString($val))." | ";
-        }
-
-        $extra = rtrim($extra, " |");
-
         if ($this->useAttachment) {
-
             $attachment = array(
                 'fallback' => $record['message'],
                 'color' => $this->getAttachmentColor($record['level'])
@@ -156,6 +157,13 @@ class SlackHandler extends SocketHandler
             }
 
             if ($this->includeExtra) {
+                $extra = '';
+                foreach ($record['extra'] as $var => $val) {
+                    $extra .= $var.': '.$this->lineFormatter->stringify($val)." | ";
+                }
+
+                $extra = rtrim($extra, " |");
+
                 $attachment['fields'][] = array(
                     'title' => "Extra",
                     'value' => $extra,
@@ -223,54 +231,4 @@ class SlackHandler extends SocketHandler
                 return '#e3e4e6';
         }
     }
-
-    /**
-     * Copy from LineFormater (any better idea?)
-     */
-    protected function convertToString($data)
-    {
-        if (null === $data || is_bool($data)) {
-            return var_export($data, true);
-        }
-
-        if (is_scalar($data)) {
-            return (string) $data;
-        }
-
-        if (version_compare(PHP_VERSION, '5.4.0', '>=')) {
-            return $this->toJson($data, true);
-        }
-
-        return str_replace('\\/', '/', @json_encode($data));
-    }
-
-
-    /**
-     * Copy from LineFormater (any better idea?)
-     */
-    protected function toJson($data, $ignoreErrors = false)
-    {
-        // suppress json_encode errors since it's twitchy with some inputs
-        if ($ignoreErrors) {
-            if (version_compare(PHP_VERSION, '5.4.0', '>=')) {
-                return @json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
-            }
-
-            return @json_encode($data);
-        }
-
-        if (version_compare(PHP_VERSION, '5.4.0', '>=')) {
-            return json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
-        }
-
-        return json_encode($data);
-    }
-
-    /**
-     * Copy from LineFormater (any better idea?)
-     */
-    protected function replaceNewlines($str)
-    {
-        return strtr($str, array("\r\n" => ' ', "\r" => ' ', "\n" => ' '));
-    }
 }

+ 2 - 2
tests/Monolog/Handler/SlackHandlerTest.php

@@ -104,9 +104,9 @@ class SlackHandlerTest extends TestCase
         );
     }
 
-    private function createHandler($token = 'myToken', $channel = 'channel1', $username = 'Monolog', $useAttachment = true, $iconEmoji = null)
+    private function createHandler($token = 'myToken', $channel = 'channel1', $username = 'Monolog', $useAttachment = true, $iconEmoji = null, $useShortAttachment = false, $includeExtra = false)
     {
-        $constructorArgs = array($token, $channel, $username, $useAttachment, $iconEmoji, Logger::DEBUG, true);
+        $constructorArgs = array($token, $channel, $username, $useAttachment, $iconEmoji, Logger::DEBUG, true, $useShortAttachment, $includeExtra);
         $this->res = fopen('php://memory', 'a');
         $this->handler = $this->getMock(
             '\Monolog\Handler\SlackHandler',