diff -r 5b37998e522e -r 162c1de6545a web/lib/Zend/Service/StrikeIron/Decorator.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/lib/Zend/Service/StrikeIron/Decorator.php Fri Mar 11 15:05:35 2011 +0100 @@ -0,0 +1,143 @@ +_object = $object; + $this->_name = $name; + } + + /** + * Proxy property access to the decorated object, inflecting + * the property name and decorating any child objects returned. + * If the property is not found in the decorated object, return + * NULL as a convenience feature to avoid notices. + * + * @param string $property Property name to retrieve + * @return mixed Value of property or NULL + */ + public function __get($property) + { + $result = null; + + if (! isset($this->_object->$property)) { + $property = $this->_inflect($property); + } + + if (isset($this->_object->$property)) { + $result = $this->_object->$property; + $result = $this->_decorate($result); + } + return $result; + } + + /** + * Proxy method calls to the decorated object. This will only + * be used when the SOAPClient returns a custom PHP object via + * its classmap option so no inflection is done. + * + * @param string $method Name of method called + * @param array $args Arguments for method + */ + public function __call($method, $args) + { + return call_user_func_array(array($this->_object, $method), $args); + } + + /** + * Inflect a property name from PHP-style to the result object's + * style. The default implementation here only inflects the case + * of the first letter, e.g. from "fooBar" to "FooBar". + * + * @param string $property Property name to inflect + * @return string Inflected property name + */ + protected function _inflect($property) + { + return ucfirst($property); + } + + /** + * Decorate a value returned by the result object. The default + * implementation here only decorates child objects. + * + * @param mixed $result Value to decorate + * @return mixed Decorated result + */ + protected function _decorate($result) + { + if (is_object($result)) { + $result = new self($result); + } + return $result; + } + + /** + * Return the object being decorated + * + * @return object + */ + public function getDecoratedObject() + { + return $this->_object; + } + + /** + * Return the name of the object being decorated + * + * @return null|string + */ + public function getDecoratedObjectName() + { + return $this->_name; + } +}