| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 | 
							- <?php
 
- /**
 
-  * Abstraction of a Twilio resource.
 
-  *
 
-  * @category Services
 
-  * @package  Services_Twilio
 
-  * @author   Neuman Vong <neuman@twilio.com>
 
-  * @license  http://creativecommons.org/licenses/MIT/ MIT
 
-  * @link     http://pear.php.net/package/Services_Twilio
 
-  */
 
- abstract class Services_Twilio_Resource {
 
-     protected $subresources;
 
-     public function __construct($client, $uri, $params = array())
 
-     {
 
-         $this->subresources = array();
 
-         $this->client = $client;
 
-         foreach ($params as $name => $param) {
 
-             $this->$name = $param;
 
-         }
 
-         $this->uri = $uri;
 
-         $this->init($client, $uri);
 
-     }
 
-     protected function init($client, $uri)
 
-     {
 
-         // Left empty for derived classes to implement
 
-     }
 
-     public function getSubresources($name = null) {
 
-         if (isset($name)) {
 
-             return isset($this->subresources[$name])
 
-                 ? $this->subresources[$name]
 
-                 : null;
 
-         }
 
-         return $this->subresources;
 
-     }
 
-     protected function setupSubresources()
 
-     {
 
-         foreach (func_get_args() as $name) {
 
-             $constantized = ucfirst(self::camelize($name));
 
-             $type = "Services_Twilio_Rest_" . $constantized;
 
-             $this->subresources[$name] = new $type(
 
-                 $this->client, $this->uri . "/$constantized"
 
-             );
 
-         }
 
-     }
 
-     /*
 
-      * Get the resource name from the classname
 
-      *
 
-      * Ex: Services_Twilio_Rest_Accounts -> Accounts
 
-      *
 
-      * @param boolean $camelized Whether to return camel case or not
 
-      */
 
-     public function getResourceName($camelized = false)
 
-     {
 
-         $name = get_class($this);
 
-         $parts = explode('_', $name);
 
-         $basename = end($parts);
 
-         if ($camelized) {
 
-             return $basename;
 
-         } else {
 
-             return self::decamelize($basename);
 
-         }
 
-     }
 
-     public static function decamelize($word)
 
-     {
 
-         $callback = create_function('$matches',
 
-             'return strtolower(strlen("$matches[1]") ? "$matches[1]_$matches[2]" : "$matches[2]");');
 
-         return preg_replace_callback(
 
-             '/(^|[a-z])([A-Z])/',
 
-             $callback,
 
-             $word
 
-         );
 
-     }
 
-     /**
 
-      * Return camelized version of a word
 
-      * Examples: sms_messages => SMSMessages, calls => Calls,
 
-      * incoming_phone_numbers => IncomingPhoneNumbers
 
-      *
 
-      * @param string $word The word to camelize
 
-      * @return string
 
-      */
 
-     public static function camelize($word) {
 
-         $callback = create_function('$matches', 'return strtoupper("$matches[2]");');
 
-         return preg_replace_callback('/(^|_)([a-z])/',
 
-             $callback,
 
-             $word);
 
-     }
 
-     /**
 
-      * Get the value of a property on this resource.
 
-      *
 
-      * @param string $key The property name
 
-      * @return mixed Could be anything.
 
-      */
 
-     public function __get($key) {
 
-         if ($subresource = $this->getSubresources($key)) {
 
-             return $subresource;
 
-         }
 
-         return $this->$key;
 
-     }
 
-     /**
 
-      * Print a JSON representation of this object. Strips the HTTP client
 
-      * before returning.
 
-      *
 
-      * Note, this should mainly be used for debugging, and is not guaranteed
 
-      * to correspond 1:1 with the JSON API output.
 
-      *
 
-      * Note that echoing an object before an HTTP request has been made to
 
-      * "fill in" its properties may return an empty object
 
-      */
 
-     public function __toString() {
 
-         $out = array();
 
-         foreach ($this as $key => $value) {
 
-             if ($key !== 'client' && $key !== 'subresources') {
 
-                 $out[$key] = $value;
 
-             }
 
-         }
 
-         return json_encode($out, true);
 
-     }
 
- }
 
 
  |