Forráskód Böngészése

Merge branch 'release/0.2.5'

Justin Hileman 15 éve
szülő
commit
18ea4ddd11

+ 1 - 1
Mustache.php

@@ -597,7 +597,7 @@ class Mustache {
 	 * @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))));
 	}
 }
 

+ 1 - 1
examples/pragma_unescaped/PragmaUnescaped.php

@@ -1,5 +1,5 @@
 <?php
 
 class PragmaUnescaped extends Mustache {
-	protected $vs = 'Bear > Shark';
+	public $vs = 'Bear > Shark';
 }

+ 40 - 0
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]);
+	}
+}

+ 5 - 0
examples/section_iterator_objects/section_iterator_object.mustache

@@ -0,0 +1,5 @@
+* {{ start }}
+{{# middle }}
+* {{ item }}
+{{/ middle }}
+* {{ final }}

+ 4 - 0
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.

+ 26 - 0
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]);
+	}
+}

+ 6 - 0
examples/section_magic_objects/section_magic_object.mustache

@@ -0,0 +1,6 @@
+* {{ start }}
+{{# middle }}
+* {{ foo }}
+* {{ bar }}
+{{/ middle }}
+* {{ final }}

+ 4 - 0
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.

+ 16 - 0
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.';
+}

+ 6 - 0
examples/section_objects/section_objects.mustache

@@ -0,0 +1,6 @@
+* {{ start }}
+{{# middle }}
+* {{ foo }}
+* {{ bar }}
+{{/ middle }}
+* {{ final }}

+ 4 - 0
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.

+ 56 - 0
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();
+	}
+}

+ 0 - 1
test/MustachePragmaDotNotationTest.php

@@ -1,7 +1,6 @@
 <?php
 
 require_once '../Mustache.php';
-require_once 'PHPUnit/Framework.php';
 
 class MustachePragmaDotNotationTest extends PHPUnit_Framework_TestCase {
 

+ 0 - 1
test/MustachePragmaTest.php

@@ -1,7 +1,6 @@
 <?php
 
 require_once '../Mustache.php';
-require_once 'PHPUnit/Framework.php';
 
 class MustachePragmaTest extends PHPUnit_Framework_TestCase {
 

+ 0 - 1
test/MustachePragmaUnescapedTest.php

@@ -1,7 +1,6 @@
 <?php
 
 require_once '../Mustache.php';
-require_once 'PHPUnit/Framework.php';
 
 class MustachePragmaUnescapedTest extends PHPUnit_Framework_TestCase {
 

+ 19 - 16
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 @@ class MustacheTest extends PHPUnit_Framework_TestCase {
 				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();