From c45550e9e5924da6471781d267a06b26d66cd064 Mon Sep 17 00:00:00 2001 From: Jeremy Bush Date: Mon, 5 Jul 2010 20:20:41 -0500 Subject: [PATCH] Fixing #3, Transversable objects should be iterated over. --- Mustache.php | 2 +- .../Sections_Iterator_Object.php | 41 +++++++++++++++++++ .../sections.mustache | 5 +++ .../sections_iterator_object/sections.txt | 4 ++ 4 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 examples/sections_iterator_object/Sections_Iterator_Object.php create mode 100644 examples/sections_iterator_object/sections.mustache create mode 100644 examples/sections_iterator_object/sections.txt diff --git a/Mustache.php b/Mustache.php index 88727c5..f06edca 100644 --- a/Mustache.php +++ b/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)))); } } diff --git a/examples/sections_iterator_object/Sections_Iterator_Object.php b/examples/sections_iterator_object/Sections_Iterator_Object.php new file mode 100644 index 0000000..e517fe0 --- /dev/null +++ b/examples/sections_iterator_object/Sections_Iterator_Object.php @@ -0,0 +1,41 @@ + '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]); + } +} \ No newline at end of file diff --git a/examples/sections_iterator_object/sections.mustache b/examples/sections_iterator_object/sections.mustache new file mode 100644 index 0000000..44dfce4 --- /dev/null +++ b/examples/sections_iterator_object/sections.mustache @@ -0,0 +1,5 @@ +* {{ start }} +{{# middle }} +* {{ item }} +{{/ middle }} +* {{ final }} \ No newline at end of file diff --git a/examples/sections_iterator_object/sections.txt b/examples/sections_iterator_object/sections.txt new file mode 100644 index 0000000..e6b2d7a --- /dev/null +++ b/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. \ No newline at end of file