<?php

/**
 * Helper class to wrap an object with a modified interface created by
 * a partial application of its existing methods.
 *
 * @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
 */ 
class Services_Twilio_PartialApplicationHelper {

	private $callbacks;

	public function __construct() {
		$this->callbacks = array();
	}

	public function set( $method, $callback, array $args) {
		if (!is_callable($callback)) {
			return false;
		}
		$this->callbacks[$method] = array($callback, $args);
	}

	public function __call( $method, $args) {
		if (!isset($this->callbacks[$method])) {
			throw new Exception("Method not found: $method");
		}
		list($callback, $cb_args) = $this->callbacks[$method];
		return call_user_func_array(
			$callback,
			array_merge($cb_args, $args)
		);
	}
}
