Resolves #529. Resolves #404. Added natural sorting filter and tests.

This commit is contained in:
Martin Hanzel
2015-05-03 20:55:28 -04:00
parent 251ce7483c
commit 03b3446119
2 changed files with 57 additions and 0 deletions
+21
View File
@@ -122,6 +122,27 @@ module Liquid
end
end
# Sort elements of an array ignoring case if strings
# provide optional property with which to sort an array of hashes or drops
def sort_natural(input, property = nil)
ary = InputIterator.new(input)
# Quick function that returns the downcased object if it has a downcase,
# otherwise it returns the object itself.
insensitive = lambda do |obj|
obj = obj.downcase if obj.respond_to? :downcase
obj
end
if property.nil?
ary.sort {|a,b| insensitive.call(a) <=> insensitive.call(b) }
elsif ary.first.respond_to?(:[]) && !ary.first[property].nil?
ary.sort {|a,b| insensitive.call(a[property]) <=> insensitive.call(b[property]) }
elsif ary.first.respond_to?(property)
ary.sort {|a,b| insensitive.call(a.send(property)) <=> insensitive.call(b.send(property)) }
end
end
# Remove duplicate elements from an array
# provide optional property with which to determine uniqueness
def uniq(input, property = nil)