Explorar el Código

Merge branch 'rebase' into feature/test-coverage

Justin Hileman hace 15 años
padre
commit
3ab2529b3e

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

+ 17 - 0
examples/sections_iterable_object/Sections_Iterable_Object.php

@@ -0,0 +1,17 @@
+<?php
+
+class Sections_Iterable_Object extends Mustache {
+	public $start = "It worked the first time.";
+
+	public function middle() {
+		return new Iterable_Object;
+	}
+
+	public $final = "Then, surprisingly, it worked the final time.";
+}
+
+class Iterable_Object
+{
+	public $foo = 'And it worked the second time.';
+	public $bar = 'As well as the third.';
+}

+ 6 - 0
examples/sections_iterable_object/sections.mustache

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

+ 4 - 0
examples/sections_iterable_object/sections.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.

+ 41 - 0
examples/sections_iterator_object/Sections_Iterator_Object.php

@@ -0,0 +1,41 @@
+<?php
+
+class Sections_Iterator_Object extends Mustache {
+	public $start = "It worked the first time.";
+
+	public function middle() {
+		return new Iterator_Object;
+	}
+
+	public $final = "Then, surprisingly, it worked the final time.";
+}
+
+class Iterator_Object 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/sections_iterator_object/sections.mustache

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

+ 4 - 0
examples/sections_iterator_object/sections.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.

+ 29 - 0
examples/sections_noniterable_object/Sections_Noniterable_Object.php

@@ -0,0 +1,29 @@
+<?php
+
+class Sections_NonIterable_Object extends Mustache {
+	public $start = "It worked the first time.";
+
+	public function middle() {
+		return new Non_Iterable_Object;
+	}
+
+	public $final = "Then, surprisingly, it worked the final time.";
+}
+
+class Non_Iterable_Object
+{
+	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/sections_noniterable_object/sections.mustache

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

+ 4 - 0
examples/sections_noniterable_object/sections.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.