add flatten filter

This commit is contained in:
Arthur Neves
2013-08-15 16:06:56 -04:00
parent 994f309465
commit 18e8ce1eb0
2 changed files with 16 additions and 1 deletions

View File

@@ -101,7 +101,7 @@ module Liquid
ary = InputIterator.new(input)
if property.nil?
ary.sort
elsif ary.first.respond_to?('[]'.freeze) and !ary.first[property].nil?
elsif ary.first.respond_to?('[]'.freeze) && !ary.first[property].nil?
ary.sort {|a,b| a[property] <=> b[property] }
elsif ary.first.respond_to?(property)
ary.sort {|a,b| a.send(property) <=> b.send(property) }
@@ -127,6 +127,11 @@ module Liquid
end
end
# flatten the given input
def flatten(input)
Array(input).flatten
end
# Replace occurrences of a string with another
def replace(input, string, replacement = ''.freeze)
input.to_s.gsub(string, replacement.to_s)

View File

@@ -149,6 +149,16 @@ class StandardFiltersTest < Test::Unit::TestCase
"thing" => { "foo" => [ { "bar" => 42 }, { "bar" => 17 } ] }
end
def test_flatten
assert_equal [1,2,3,4], @filters.flatten([1,2,3,4])
assert_equal [1,2,3,4], @filters.flatten([[1,2,3,4]])
assert_equal [1,2,3,4], @filters.flatten([[1],[2],[3],[4]])
assert_equal [1], @filters.flatten(1)
assert_template_result '1234', "{{ ary | flatten | flatten }}",
'ary' => [[1],2,[3],4]
end
def test_sort_calls_to_liquid
t = TestThing.new
Liquid::Template.parse('{{ foo | sort: "whatever" }}').render("foo" => [t])