From 6084a37a3ce9e79386b099a34119d6d394dab3e0 Mon Sep 17 00:00:00 2001 From: Jeremy Bush Date: Mon, 5 Jul 2010 17:50:41 -0500 Subject: [PATCH 1/2] Adding examples for object sections --- .../Sections_Iterable_Object.php | 17 +++++++++++ .../sections.mustache | 6 ++++ .../sections_iterable_object/sections.txt | 4 +++ .../Sections_Noniterable_Object.php | 29 +++++++++++++++++++ .../sections.mustache | 6 ++++ .../sections_noniterable_object/sections.txt | 4 +++ 6 files changed, 66 insertions(+) create mode 100644 examples/sections_iterable_object/Sections_Iterable_Object.php create mode 100644 examples/sections_iterable_object/sections.mustache create mode 100644 examples/sections_iterable_object/sections.txt create mode 100644 examples/sections_noniterable_object/Sections_Noniterable_Object.php create mode 100644 examples/sections_noniterable_object/sections.mustache create mode 100644 examples/sections_noniterable_object/sections.txt diff --git a/examples/sections_iterable_object/Sections_Iterable_Object.php b/examples/sections_iterable_object/Sections_Iterable_Object.php new file mode 100644 index 0000000..ee2f661 --- /dev/null +++ b/examples/sections_iterable_object/Sections_Iterable_Object.php @@ -0,0 +1,17 @@ + '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]); + } +} \ No newline at end of file diff --git a/examples/sections_noniterable_object/sections.mustache b/examples/sections_noniterable_object/sections.mustache new file mode 100644 index 0000000..9119608 --- /dev/null +++ b/examples/sections_noniterable_object/sections.mustache @@ -0,0 +1,6 @@ +* {{ start }} +{{# middle }} +* {{ foo }} +* {{ bar }} +{{/ middle }} +* {{ final }} \ No newline at end of file diff --git a/examples/sections_noniterable_object/sections.txt b/examples/sections_noniterable_object/sections.txt new file mode 100644 index 0000000..e6b2d7a --- /dev/null +++ b/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. \ No newline at end of file From c45550e9e5924da6471781d267a06b26d66cd064 Mon Sep 17 00:00:00 2001 From: Jeremy Bush Date: Mon, 5 Jul 2010 20:20:41 -0500 Subject: [PATCH 2/2] 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