Merge branch 'dev' into feature/implicit-iterator

This commit is contained in:
Justin Hileman
2010-07-11 22:35:38 -04:00
12 changed files with 185 additions and 14 deletions
+1 -1
View File
@@ -615,7 +615,7 @@ class Mustache {
* @return bool * @return bool
*/ */
protected function _varIsIterable($var) { protected function _varIsIterable($var) {
return is_object($var) || (is_array($var) && !array_diff_key($var, array_keys(array_keys($var)))); return $var instanceof Traversable || (is_array($var) && !array_diff_key($var, array_keys(array_keys($var))));
} }
} }
@@ -0,0 +1,40 @@
<?php
class SectionIteratorObjects extends Mustache {
public $start = "It worked the first time.";
public function middle() {
return new IteratorObject();
}
public $final = "Then, surprisingly, it worked the final time.";
}
class IteratorObject implements Iterator {
protected $_position = 0;
protected $_data = array(
array('item' => 'And it worked the second time.'),
array('item' => 'As well as the third.'),
);
public function rewind() {
$this->_position = 0;
}
public function current() {
return $this->_data[$this->_position];
}
public function key() {
return $this->_position;
}
public function next() {
++$this->_position;
}
public function valid() {
return isset($this->_data[$this->_position]);
}
}
@@ -0,0 +1,5 @@
* {{ start }}
{{# middle }}
* {{ item }}
{{/ middle }}
* {{ final }}
@@ -0,0 +1,4 @@
* It worked the first time.
* And it worked the second time.
* As well as the third.
* Then, surprisingly, it worked the final time.
@@ -0,0 +1,26 @@
<?php
class SectionMagicObjects extends Mustache {
public $start = "It worked the first time.";
public function middle() {
return new MagicObject();
}
public $final = "Then, surprisingly, it worked the final time.";
}
class MagicObject {
protected $_data = array(
'foo' => 'And it worked the second time.',
'bar' => 'As well as the third.'
);
public function __get($key) {
return isset($this->_data[$key]) ? $this->_data[$key] : NULL;
}
public function __isset($key) {
return isset($this->_data[$key]);
}
}
@@ -0,0 +1,6 @@
* {{ start }}
{{# middle }}
* {{ foo }}
* {{ bar }}
{{/ middle }}
* {{ final }}
@@ -0,0 +1,4 @@
* It worked the first time.
* And it worked the second time.
* As well as the third.
* Then, surprisingly, it worked the final time.
@@ -0,0 +1,16 @@
<?php
class SectionObjects extends Mustache {
public $start = "It worked the first time.";
public function middle() {
return new SectionObject;
}
public $final = "Then, surprisingly, it worked the final time.";
}
class SectionObject {
public $foo = 'And it worked the second time.';
public $bar = 'As well as the third.';
}
@@ -0,0 +1,6 @@
* {{ start }}
{{# middle }}
* {{ foo }}
* {{ bar }}
{{/ middle }}
* {{ final }}
@@ -0,0 +1,4 @@
* It worked the first time.
* And it worked the second time.
* As well as the third.
* Then, surprisingly, it worked the final time.
+56
View File
@@ -0,0 +1,56 @@
<?php
require_once '../Mustache.php';
class MustacheObjectSectionTest extends PHPUnit_Framework_TestCase {
public function testBasicObject() {
$alpha = new Alpha();
$this->assertEquals('Foo', $alpha->render('{{#foo}}{{name}}{{/foo}}'));
}
public function testObjectWithGet() {
$beta = new Beta();
$this->assertEquals('Foo', $beta->render('{{#foo}}{{name}}{{/foo}}'));
}
public function testSectionObjectWithGet() {
$gamma = new Gamma();
$this->assertEquals('Foo', $gamma->render('{{#bar}}{{#foo}}{{name}}{{/foo}}{{/bar}}'));
}
}
class Alpha extends Mustache {
public $foo;
public function __construct() {
$this->foo = new StdClass();
$this->foo->name = 'Foo';
$this->foo->number = 1;
}
}
class Beta extends Mustache {
protected $_data = array();
public function __construct() {
$this->_data['foo'] = new StdClass();
$this->_data['foo']->name = 'Foo';
$this->_data['foo']->number = 1;
}
public function __isset($name) {
return array_key_exists($name, $this->_data);
}
public function __get($name) {
return $this->_data[$name];
}
}
class Gamma extends Mustache {
public $bar;
public function __construct() {
$this->bar = new Beta();
}
}
+17 -13
View File
@@ -262,26 +262,30 @@ class MustacheTest extends PHPUnit_Framework_TestCase {
foreach ($children as $file) { foreach ($children as $file) {
if (!$file->isFile()) continue; if (!$file->isFile()) continue;
$filename = $file->getPathInfo(); $filename = $file->getPathname();
$info = pathinfo($filename); $info = pathinfo($filename);
switch($info['extension']) { if (isset($info['extension'])) {
case 'php': switch($info['extension']) {
$class = $info['filename']; case 'php':
include_once($filename); $class = $info['filename'];
break; include_once($filename);
break;
case 'mustache': case 'mustache':
$template = file_get_contents($filename); $template = file_get_contents($filename);
break; break;
case 'txt': case 'txt':
$output = file_get_contents($filename); $output = file_get_contents($filename);
break; break;
}
} }
} }
$ret[$example] = array($class, $template, $output); if (!empty($class)) {
$ret[$example] = array($class, $template, $output);
}
} }
$files->next(); $files->next();