added Traversable objects support for the join filter
authorFabien Potencier <fabien.potencier@gmail.com>
Mon, 2 Jan 2012 12:10:08 +0000 (13:10 +0100)
committerFabien Potencier <fabien.potencier@gmail.com>
Mon, 2 Jan 2012 12:10:08 +0000 (13:10 +0100)
CHANGELOG
lib/Twig/Extension/Core.php
test/Twig/Tests/Fixtures/filters/join.test [new file with mode: 0644]
test/Twig/Tests/integrationTest.php

index d4e1e69..360eaf7 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,7 @@
+* 1.5.0
+
+ * added Traversable objects support for the join filter
+
 * 1.5.0-RC2 (2011-12-30)
 
  * added a way to set the default global date interval format
index 5083412..a042c37 100644 (file)
@@ -488,6 +488,14 @@ function twig_array_merge($arr1, $arr2)
  */
 function twig_join_filter($value, $glue = '')
 {
+    if ($value instanceof Traversable) {
+        $values = array();
+        foreach ($value as $v) {
+            $values[] = $v;
+        }
+        $value = $values;
+    }
+
     return implode($glue, (array) $value);
 }
 
diff --git a/test/Twig/Tests/Fixtures/filters/join.test b/test/Twig/Tests/Fixtures/filters/join.test
new file mode 100644 (file)
index 0000000..244fa10
--- /dev/null
@@ -0,0 +1,10 @@
+--TEST--
+"join" filter
+--TEMPLATE--
+{{ ["foo", "bar"]|join(', ') }}
+{{ foo|join(', ') }}
+--DATA--
+return array('foo' => new Foo())
+--EXPECT--
+foo, bar
+1, 2
\ No newline at end of file
index bf8cc8f..6d36d6d 100644 (file)
@@ -114,7 +114,7 @@ function test_foo($value = 'foo')
     return $value;
 }
 
-class Foo
+class Foo implements IteratorAggregate
 {
     const BAR_NAME = 'bar';
 
@@ -123,6 +123,11 @@ class Foo
         return 'bar'.($param1 ? '_'.$param1 : '').($param2 ? '-'.$param2 : '');
     }
 
+    public function getIterator()
+    {
+        return new ArrayObject(array(1, 2));
+    }
+
     public function getFoo()
     {
         return 'foo';