Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Merge branch 'release/0.2.5'

  • Loading branch information...
commit 88a93f1188f5f934bd1547a2bff4c00bf1d5f24f 2 parents f6c4473 + 1621880
@bobthecow authored
View
2  Mustache.php
@@ -597,7 +597,7 @@ protected function _getPartial($tag_name) {
* @return bool
*/
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))));
}
}
View
2  examples/pragma_unescaped/PragmaUnescaped.php
@@ -1,5 +1,5 @@
<?php
class PragmaUnescaped extends Mustache {
- protected $vs = 'Bear > Shark';
+ public $vs = 'Bear > Shark';
}
View
40 examples/section_iterator_objects/SectionIteratorObject.php
@@ -0,0 +1,40 @@
+<?php
+
+class SectionIteratorObject 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]);
+ }
+}
View
5 examples/section_iterator_objects/section_iterator_object.mustache
@@ -0,0 +1,5 @@
+* {{ start }}
+{{# middle }}
+* {{ item }}
+{{/ middle }}
+* {{ final }}
View
4 examples/section_iterator_objects/section_iterator_object.txt
@@ -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.
View
26 examples/section_magic_objects/SectionMagicObject.php
@@ -0,0 +1,26 @@
+<?php
+
+class SectionMagicObject 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]);
+ }
+}
View
6 examples/section_magic_objects/section_magic_object.mustache
@@ -0,0 +1,6 @@
+* {{ start }}
+{{# middle }}
+* {{ foo }}
+* {{ bar }}
+{{/ middle }}
+* {{ final }}
View
4 examples/section_magic_objects/section_magic_object.txt
@@ -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.
View
16 examples/section_objects/SectionObjects.php
@@ -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.';
+}
View
6 examples/section_objects/section_objects.mustache
@@ -0,0 +1,6 @@
+* {{ start }}
+{{# middle }}
+* {{ foo }}
+* {{ bar }}
+{{/ middle }}
+* {{ final }}
View
4 examples/section_objects/section_objects.txt
@@ -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.
View
56 test/MustacheObjectSectionTest.php
@@ -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();
+ }
+}
View
1  test/MustachePragmaDotNotationTest.php
@@ -1,7 +1,6 @@
<?php
require_once '../Mustache.php';
-require_once 'PHPUnit/Framework.php';
class MustachePragmaDotNotationTest extends PHPUnit_Framework_TestCase {
View
1  test/MustachePragmaTest.php
@@ -1,7 +1,6 @@
<?php
require_once '../Mustache.php';
-require_once 'PHPUnit/Framework.php';
class MustachePragmaTest extends PHPUnit_Framework_TestCase {
View
1  test/MustachePragmaUnescapedTest.php
@@ -1,7 +1,6 @@
<?php
require_once '../Mustache.php';
-require_once 'PHPUnit/Framework.php';
class MustachePragmaUnescapedTest extends PHPUnit_Framework_TestCase {
View
35 test/MustacheTest.php
@@ -1,7 +1,6 @@
<?php
require_once '../Mustache.php';
-require_once 'PHPUnit/Framework.php';
/**
* A PHPUnit test case for Mustache.php.
@@ -263,26 +262,30 @@ public function getExamples() {
foreach ($children as $file) {
if (!$file->isFile()) continue;
- $filename = $file->getPathInfo();
+ $filename = $file->getPathname();
$info = pathinfo($filename);
- switch($info['extension']) {
- case 'php':
- $class = $info['filename'];
- include_once($filename);
- break;
-
- case 'mustache':
- $template = file_get_contents($filename);
- break;
-
- case 'txt':
- $output = file_get_contents($filename);
- break;
+ if (isset($info['extension'])) {
+ switch($info['extension']) {
+ case 'php':
+ $class = $info['filename'];
+ include_once($filename);
+ break;
+
+ case 'mustache':
+ $template = file_get_contents($filename);
+ break;
+
+ case 'txt':
+ $output = file_get_contents($filename);
+ break;
+ }
}
}
- $ret[$example] = array($class, $template, $output);
+ if (!empty($class)) {
+ $ret[$example] = array($class, $template, $output);
+ }
}
$files->next();

1 comment on commit 88a93f1

@bobthecow
Owner
  • Fix object sections: Iterable (and Traversable) objects referenced by section tags are properly treated as lists and iterated. All other objects are used for section context, but not iterated.
  • Update tests for PHPUnit 3.5+
  • Make 'examples' test script more robust, fix it for PHP 5.2.
Please sign in to comment.
Something went wrong with that request. Please try again.