diff --git a/lib/jekyll/filters.rb b/lib/jekyll/filters.rb index cd928891..424815f9 100644 --- a/lib/jekyll/filters.rb +++ b/lib/jekyll/filters.rb @@ -327,7 +327,12 @@ module Jekyll end def as_liquid(item) - item.respond_to?(:to_liquid) ? item.to_liquid : item + case item + when Array + item.map{ |i| as_liquid(i) } + else + item.respond_to?(:to_liquid) ? item.to_liquid : item + end end end end diff --git a/test/test_filters.rb b/test/test_filters.rb index d7457cdd..f12fc171 100644 --- a/test/test_filters.rb +++ b/test/test_filters.rb @@ -147,6 +147,15 @@ class TestFilters < Test::Unit::TestCase assert_equal "[1,2]", @filter.jsonify([1, 2]) assert_equal "[{\"name\":\"Jack\"},{\"name\":\"Smith\"}]", @filter.jsonify([{:name => 'Jack'}, {:name => 'Smith'}]) end + + should "call #to_liquid " do + class AThing < Struct.new(:name) + def to_liquid + { "name" => name, :v => 1 } + end + end + assert_equal "[{\"name\":\"Jeremiah\",\"v\":1},{\"name\":\"Smathers\",\"v\":1}]", @filter.jsonify([AThing.new("Jeremiah"), AThing.new("Smathers")]) + end end context "group_by filter" do