Extract the error_get_last() handling into a separate Exception class.
authorGunnar Wrobel <p@rdus.de>
Thu, 11 Feb 2010 08:09:59 +0000 (09:09 +0100)
committerGunnar Wrobel <wrobel@temple.(none)>
Thu, 11 Feb 2010 10:07:57 +0000 (11:07 +0100)
In all cases (Horde_Feed, Horde_Xml_Element, Horde_Yaml, and Horde_Http) where
we throw the result from error_get_last() into the exception class we know
exactly that we are doing so.

Rather than having the Exception class trying to determine what kind of
parameters it might have received we can use a separate class for that.

14 files changed:
framework/Exception/lib/Horde/Exception.php
framework/Exception/lib/Horde/Exception/LastError.php [new file with mode: 0644]
framework/Exception/lib/Horde/Exception/NotFound.php
framework/Exception/lib/Horde/Exception/PermissionDenied.php
framework/Exception/package.xml
framework/Exception/test/Horde/Exception/ExceptionTest.php
framework/Feed/lib/Horde/Feed/Exception.php
framework/Feed/package.xml
framework/Http/lib/Horde/Http/Exception.php
framework/Http/package.xml
framework/Xml_Element/lib/Horde/Xml/Element/Exception.php
framework/Xml_Element/package.xml
framework/Yaml/lib/Horde/Yaml/Exception.php
framework/Yaml/package.xml

index a0248fb..49f4a5c 100644 (file)
@@ -1,7 +1,6 @@
 <?php
 /**
- * Horde base exception class, which includes the ability to take the
- * output of error_get_last() as $code and mask itself as that error.
+ * Horde base exception class.
  *
  * Copyright 2008-2010 The Horde Project (http://www.horde.org/)
  *
@@ -16,47 +15,24 @@ class Horde_Exception extends Exception
     /**
      * Exception constructor
      *
-     * If $code_or_lasterror is passed the return value of
-     * error_get_last() (or a matching format), the exception will be
-     * rewritten to have its file and line parameters match that of
-     * the array, and any message in the array will be appended to
-     * $message.
-     *
-     * @param mixed $message            The exception message, a PEAR_Error
-     *                                  object, or an Exception object.
-     * @param mixed $code_or_lasterror  Either a numeric error code, or
-     *                                  an array from error_get_last().
+     * @param mixed $message The exception message, a PEAR_Error
+     *                       object, or an Exception object.
+     * @param mixed $code    A numeric error code.
      */
-    public function __construct($message = null, $code_or_lasterror = null)
+    public function __construct($message = null, $code = null)
     {
         if (is_object($message) &&
             method_exists($message, 'getMessage')) {
-            if (is_null($code_or_lasterror) &&
+            if (is_null($code) &&
                 method_exists($message, 'getCode')) {
-                $code_or_lasterror = $message->getCode();
+                $code = $message->getCode();
             }
             $message = $message->getMessage();
         }
 
-        if (is_null($code_or_lasterror)) {
-            $code_or_lasterror = 0;
-        }
-
-        if (is_array($code_or_lasterror)) {
-            if ($message) {
-                $message .= $code_or_lasterror['message'];
-            } else {
-                $message = $code_or_lasterror['message'];
-            }
-
-            $this->file = $code_or_lasterror['file'];
-            $this->line = $code_or_lasterror['line'];
-            $code = $code_or_lasterror['type'];
-        } else {
-            $code = $code_or_lasterror;
-        }
-
-        if (is_string($code)) {
+        if (is_null($code)) {
+            $code = 0;
+        } else if (is_string($code)) {
             $code = null;
         }
 
diff --git a/framework/Exception/lib/Horde/Exception/LastError.php b/framework/Exception/lib/Horde/Exception/LastError.php
new file mode 100644 (file)
index 0000000..cb30d67
--- /dev/null
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Horde exception class that accepts output of error_get_last() as $code and
+ * mask itself as that error.
+ *
+ * Copyright 2008-2010 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @category Horde
+ * @package  Horde_Exception
+ */
+class Horde_Exception_LastError extends Horde_Exception
+{
+    /**
+     * Exception constructor
+     *
+     * If $lasterror is passed the return value of error_get_last() (or a
+     * matching format), the exception will be rewritten to have its file and
+     * line parameters match that of the array, and any message in the array
+     * will be appended to $message.
+     *
+     * @param mixed $message             The exception message, a PEAR_Error
+     *                                   object, or an Exception object.
+     * @param mixed  $code_or_lasterror  Either a numeric error code, or
+     *                                   an array from error_get_last().
+     */
+    public function __construct($message = null, $code_or_lasterror = null)
+    {
+        if (is_array($code_or_lasterror)) {
+            if ($message) {
+                $message .= $code_or_lasterror['message'];
+            } else {
+                $message = $code_or_lasterror['message'];
+            }
+            parent::__construct($message, $code_or_lasterror['type']);
+            $this->file = $code_or_lasterror['file'];
+            $this->line = $code_or_lasterror['line'];
+        } else {
+            parent::__construct($message, $code_or_lasterror);
+        }
+    }
+
+}
index 2c90627..8deeabf 100644 (file)
@@ -17,16 +17,15 @@ class Horde_Exception_NotFound extends Horde_Exception
      *
      * @see Horde_Exception::__construct()
      *
-     * @param mixed $message            The exception message, a PEAR_Error
-     *                                  object, or an Exception object.
-     * @param mixed $code_or_lasterror  Either a numeric error code, or
-     *                                  an array from error_get_last().
+     * @param mixed $message The exception message, a PEAR_Error
+     *                       object, or an Exception object.
+     * @param mixed $code    A numeric error code.
      */
-    public function __construct($message = null, $code_or_lasterror = null)
+    public function __construct($message = null, $code = null)
     {
         if (is_null($message)) {
             $message = _("Not Found");
         }
-        parent::__construct($message, $code_or_lasterror);
+        parent::__construct($message, $code);
     }
 }
\ No newline at end of file
index b27037e..547f606 100644 (file)
@@ -17,16 +17,15 @@ class Horde_Exception_PermissionDenied extends Horde_Exception
      *
      * @see Horde_Exception::__construct()
      *
-     * @param mixed $message            The exception message, a PEAR_Error
-     *                                  object, or an Exception object.
-     * @param mixed $code_or_lasterror  Either a numeric error code, or
-     *                                  an array from error_get_last().
+     * @param mixed $message The exception message, a PEAR_Error
+     *                       object, or an Exception object.
+     * @param mixed $code    A numeric error code.
      */
-    public function __construct($message = null, $code_or_lasterror = null)
+    public function __construct($message = null, $code = null)
     {
         if (is_null($message)) {
             $message = _("Permission Denied");
         }
-        parent::__construct($message, $code_or_lasterror);
+        parent::__construct($message, $code);
     }
 }
\ No newline at end of file
index 030cf66..7123f91 100644 (file)
@@ -43,6 +43,7 @@ http://pear.php.net/dtd/package-2.0.xsd">
    <dir name="lib">
     <dir name="Horde">
      <dir name="Exception">
+      <file name="LastError.php" role="php" />
       <file name="NotFound.php" role="php" />
       <file name="PermissionDenied.php" role="php" />
      </dir> <!-- /lib/Exception -->
@@ -64,6 +65,7 @@ http://pear.php.net/dtd/package-2.0.xsd">
  <phprelease>
   <filelist>
    <install name="lib/Horde/Exception.php" as="Horde/Exception.php" />
+   <install name="lib/Horde/Exception/LastError.php" as="Horde/Exception/LastError.php" />
    <install name="lib/Horde/Exception/NotFound.php" as="Horde/Exception/NotFound.php" />
    <install name="lib/Horde/Exception/PermissionDenied.php" as="Horde/Exception/PermissionDenied.php" />
   </filelist>
index 40dfae8..6667fab 100644 (file)
  */
 
 /**
- * Require the tested class.
+ * Require the tested classes.
  */
 require_once 'Horde/Exception.php';
+require_once 'Horde/Exception/LastError.php';
 
 /**
  * Test for the Horde_Exception:: class.
@@ -63,31 +64,31 @@ class Horde_Exception_ExceptionTest extends  PHPUnit_Framework_TestCase
 
     public function testConstructionWithGetlasterrorarrayYieldsMessageFromArray()
     {
-        $e = new Horde_Exception(null, $this->_getLastError());
+        $e = new Horde_Exception_LastError(null, $this->_getLastError());
         $this->assertSame('get_last_error', $e->getMessage());
     }
 
     public function testConstructionWithGetlasterrorarrayYieldsCodeFromArray()
     {
-        $e = new Horde_Exception(null, $this->_getLastError());
+        $e = new Horde_Exception_LastError(null, $this->_getLastError());
         $this->assertSame(666, $e->getCode());
     }
 
     public function testConstructionWithGetlasterrorarrayYieldsFileFromArray()
     {
-        $e = new Horde_Exception(null, $this->_getLastError());
+        $e = new Horde_Exception_LastError(null, $this->_getLastError());
         $this->assertSame('/some/file.php', $e->getFile());
     }
 
     public function testConstructionWithGetlasterrorarrayYieldsLineFromArray()
     {
-        $e = new Horde_Exception(null, $this->_getLastError());
+        $e = new Horde_Exception_LastError(null, $this->_getLastError());
         $this->assertSame(99, $e->getLine());
     }
 
     public function testConstructionWithGetlasterrorarrayConcatenatesMessagesFromConstructorAndErrorarray()
     {
-        $e = new Horde_Exception('An error occurred: ', $this->_getLastError());
+        $e = new Horde_Exception_LastError('An error occurred: ', $this->_getLastError());
         $this->assertSame('An error occurred: get_last_error', $e->getMessage());
     }
 
index 44969cd..2a81639 100644 (file)
@@ -8,25 +8,5 @@
  * @category Horde
  * @package Horde_Feed
  */
-class Horde_Feed_Exception extends Exception {
-
-    public function __construct($message = null, $code_or_lasterror = 0)
-    {
-        if (is_array($code_or_lasterror)) {
-            if ($message) {
-                $message .= $code_or_lasterror['message'];
-            } else {
-                $message = $code_or_lasterror['message'];
-            }
-
-            $this->file = $code_or_lasterror['file'];
-            $this->line = $code_or_lasterror['line'];
-            $code = $code_or_lasterror['type'];
-        } else {
-            $code = $code_or_lasterror;
-        }
-
-        parent::__construct($message, $code);
-    }
-
+class Horde_Feed_Exception extends Horde_Exception_LastError {
 }
index 14c5831..1d591c0 100644 (file)
@@ -66,6 +66,10 @@ http://pear.php.net/dtd/package-2.0.xsd">
     <channel>pear.horde.org</channel>
     <min>0.4.0</min>
    </package>
+   <package>
+    <name>Exception</name>
+    <channel>pear.horde.org</channel>
+   </package>
   </required>
  </dependencies>
  <phprelease>
index f3fb349..54d47c4 100644 (file)
  * @category Horde
  * @package  Horde_Http
  */
-class Horde_Http_Exception extends Exception
+class Horde_Http_Exception extends Horde_Exception_LastError
 {
-    /**
-     * Constructor
-     */
-    public function __construct($message = null, $code_or_lasterror = 0)
-    {
-        if (is_array($code_or_lasterror)) {
-            if ($message) {
-                $message .= $code_or_lasterror['message'];
-            } else {
-                $message = $code_or_lasterror['message'];
-            }
-
-            $this->file = $code_or_lasterror['file'];
-            $this->line = $code_or_lasterror['line'];
-            $code = $code_or_lasterror['type'];
-        } else {
-            $code = $code_or_lasterror;
-        }
-
-        parent::__construct($message, $code);
-    }
-
 }
index 7924dde..c710c14 100644 (file)
@@ -64,6 +64,10 @@ http://pear.php.net/dtd/package-2.0.xsd">
     <min>1.5.0</min>
    </pearinstaller>
    <package>
+    <name>Exception</name>
+    <channel>pear.horde.org</channel>
+   </package>
+   <package>
     <name>Support</name>
     <channel>pear.horde.org</channel>
    </package>
index 500679f..924c635 100644 (file)
  * @category Horde
  * @package  Horde_Xml_Element
  */
-class Horde_Xml_Element_Exception extends Exception
+class Horde_Xml_Element_Exception extends Horde_Exception_LastError
 {
-    /**
-     * Create an exception, filling in some details from the result of
-     * error_get_last if they are passed in $code_or_lasterror.
-     */
-    public function __construct($message = null, $code_or_lasterror = 0)
-    {
-        if (is_array($code_or_lasterror)) {
-            if ($message) {
-                $message .= $code_or_lasterror['message'];
-            } else {
-                $message = $code_or_lasterror['message'];
-            }
-
-            $this->file = $code_or_lasterror['file'];
-            $this->line = $code_or_lasterror['line'];
-            $code = $code_or_lasterror['type'];
-        } else {
-            $code = $code_or_lasterror;
-        }
-
-        parent::__construct($message, $code);
-    }
-
 }
index b97142e..d833eab 100644 (file)
@@ -59,6 +59,10 @@ http://pear.php.net/dtd/package-2.0.xsd">
    <pearinstaller>
     <min>1.5.0</min>
    </pearinstaller>
+   <package>
+    <name>Exception</name>
+    <channel>pear.horde.org</channel>
+   </package>
   </required>
  </dependencies>
  <phprelease>
index b53159b..58296ac 100644 (file)
  * @category Horde
  * @package  Horde_Yaml
  */
-class Horde_Yaml_Exception extends Exception
+class Horde_Yaml_Exception extends Horde_Exception_LastError
 {
-
-    public function __construct($message = null, $code_or_lasterror = 0)
-    {
-        if (is_array($code_or_lasterror)) {
-            if ($message) {
-                $message .= $code_or_lasterror['message'];
-            } else {
-                $message = $code_or_lasterror['message'];
-            }
-
-            $this->file = $code_or_lasterror['file'];
-            $this->line = $code_or_lasterror['line'];
-            $code = $code_or_lasterror['type'];
-        } else {
-            $code = $code_or_lasterror;
-        }
-
-        parent::__construct($message, $code);
-    }
-
 }
index 123fddf..ee5b4b8 100644 (file)
@@ -60,6 +60,10 @@ http://pear.php.net/dtd/package-2.0.xsd">
    <pearinstaller>
     <min>1.4.0b1</min>
    </pearinstaller>
+   <package>
+    <name>Exception</name>
+    <channel>pear.horde.org</channel>
+   </package>
   </required>
  </dependencies>
  <phprelease>