fix Render

This commit is contained in:
Nikita
2013-07-04 03:13:29 +04:00
parent 30e492ee09
commit c283154fe4

View File

@@ -8,19 +8,21 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Fenom; namespace Fenom;
use Fenom; use Fenom;
/** /**
* Primitive template * Primitive template
* @author Ivan Shalganov <a.cobest@gmail.com> * @author Ivan Shalganov <a.cobest@gmail.com>
*/ */
class Render extends \ArrayObject { class Render extends \ArrayObject
{
private static $_props = array( private static $_props = array(
"name" => "runtime", "name" => "runtime",
"base_name" => "", "base_name" => "",
"scm" => false, "scm" => false,
"time" => 0, "time" => 0,
"depends" => array() "depends" => array()
); );
/** /**
* @var \Closure * @var \Closure
@@ -50,17 +52,14 @@ class Render extends \ArrayObject {
* @var float * @var float
*/ */
protected $_time = 0.0; protected $_time = 0.0;
/** /**
* @var array depends list * @var array depends list
*/ */
protected $_depends = array(); protected $_depends = array();
/** /**
* @var int tempalte options (see Fenom options) * @var int tempalte options (see Fenom options)
*/ */
protected $_options = 0; protected $_options = 0;
/** /**
* Template provider * Template provider
* @var ProviderInterface * @var ProviderInterface
@@ -68,53 +67,61 @@ class Render extends \ArrayObject {
protected $_provider; protected $_provider;
/** /**
* @param Fenom $fenom * @param Fenom $fenom
* @param callable $code template body * @param callable $code template body
* @param array $props * @param array $props
*/ */
public function __construct(Fenom $fenom, \Closure $code, $props = array()) { public function __construct(Fenom $fenom, \Closure $code, $props = array())
{
$this->_fenom = $fenom; $this->_fenom = $fenom;
$props += self::$_props; $props += self::$_props;
$this->_name = $props["name"]; $this->_name = $props["name"];
$this->_provider = $this->_fenom->getProvider($props["scm"]); $this->_provider = $this->_fenom->getProvider($props["scm"]);
$this->_scm = $props["scm"]; $this->_scm = $props["scm"];
$this->_time = $props["time"]; $this->_time = $props["time"];
$this->_depends = $props["depends"]; $this->_depends = $props["depends"];
$this->_code = $code; $this->_code = $code;
} }
/** /**
* Get template storage * Get template storage
* @return Fenom * @return Fenom
*/ */
public function getStorage() { public function getStorage()
{
return $this->_fenom; return $this->_fenom;
} }
public function getDepends() { public function getDepends()
{
return $this->_depends; return $this->_depends;
} }
public function getScm() { public function getScm()
{
return $this->_scm; return $this->_scm;
} }
public function getProvider() { public function getProvider()
{
return $this->_provider; return $this->_provider;
} }
public function getBaseName() { public function getBaseName()
{
return $this->_base_name; return $this->_base_name;
} }
public function getOptions() { public function getOptions()
{
return $this->_options; return $this->_options;
} }
/** /**
* @return string * @return string
*/ */
public function __toString() { public function __toString()
{
return $this->_name; return $this->_name;
} }
@@ -122,29 +129,32 @@ class Render extends \ArrayObject {
* Get template name * Get template name
* @return string * @return string
*/ */
public function getName() { public function getName()
{
return $this->_name; return $this->_name;
} }
public function getTime() { public function getTime()
{
return $this->_time; return $this->_time;
} }
/** /**
* Validate template * Validate template
* @return bool * @return bool
*/ */
public function isValid() { public function isValid()
{
$provider = $this->_fenom->getProvider(strstr($this->_name, ":"), true); $provider = $this->_fenom->getProvider(strstr($this->_name, ":"), true);
if($provider->getLastModified($this->_name) >= $this->_time) { if ($provider->getLastModified($this->_name) >= $this->_time) {
return false; return false;
} }
foreach($this->_depends as $tpl => $time) { foreach ($this->_depends as $tpl => $time) {
if($this->_fenom->getTemplate($tpl)->getTime() !== $time) { if ($this->_fenom->getTemplate($tpl)->getTime() !== $time) {
return false; return false;
} }
} }
return true; return true;
} }
@@ -153,9 +163,11 @@ class Render extends \ArrayObject {
* @param array $values for template * @param array $values for template
* @return Render * @return Render
*/ */
public function display(array $values) { public function display(array $values)
{
$this->exchangeArray($values); $this->exchangeArray($values);
$this->_code->__invoke($this); $this->_code->__invoke($this);
return $this; return $this;
} }
@@ -165,10 +177,12 @@ class Render extends \ArrayObject {
* @return string * @return string
* @throws \Exception * @throws \Exception
*/ */
public function fetch(array $values) { public function fetch(array $values)
{
ob_start(); ob_start();
try { try {
$this->display($values); $this->display($values);
return ob_get_clean(); return ob_get_clean();
} catch (\Exception $e) { } catch (\Exception $e) {
ob_end_clean(); ob_end_clean();
@@ -182,7 +196,8 @@ class Render extends \ArrayObject {
* @param $args * @param $args
* @throws \BadMethodCallException * @throws \BadMethodCallException
*/ */
public function __call($method, $args) { public function __call($method, $args)
throw new \BadMethodCallException("Unknown method ".$method); {
throw new \BadMethodCallException("Unknown method " . $method);
} }
} }