Use item_property
This commit is contained in:
parent
d96f39360b
commit
df3c163eeb
|
@ -193,12 +193,12 @@ module Jekyll
|
||||||
# Sort an array of objects
|
# Sort an array of objects
|
||||||
#
|
#
|
||||||
# input - the object array
|
# input - the object array
|
||||||
# key - key within each object to filter by
|
# property - property within each object to filter by
|
||||||
# nils ('first' | 'last') - nils appear before or after non-nil values
|
# nils ('first' | 'last') - nils appear before or after non-nil values
|
||||||
#
|
#
|
||||||
# Returns the filtered array of objects
|
# Returns the filtered array of objects
|
||||||
def sort(input, key = nil, nils = "first")
|
def sort(input, property = nil, nils = "first")
|
||||||
if key.nil?
|
if property.nil?
|
||||||
input.sort
|
input.sort
|
||||||
else
|
else
|
||||||
case
|
case
|
||||||
|
@ -213,12 +213,15 @@ module Jekyll
|
||||||
end
|
end
|
||||||
|
|
||||||
input.sort { |a, b|
|
input.sort { |a, b|
|
||||||
if !hash_property(a, key).nil? && hash_property(b, key).nil?
|
a_p = item_property(a, property)
|
||||||
|
b_p = item_property(b, property)
|
||||||
|
|
||||||
|
if !a_p.nil? && b_p.nil?
|
||||||
- order
|
- order
|
||||||
elsif hash_property(a, key).nil? && !hash_property(b, key).nil?
|
elsif a_p.nil? && !b_p.nil?
|
||||||
+ order
|
+ order
|
||||||
else
|
else
|
||||||
hash_property(a, key) <=> hash_property(b, key)
|
a_p <=> b_p
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
@ -250,16 +253,5 @@ module Jekyll
|
||||||
item[property.to_s]
|
item[property.to_s]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def hash_property(hash, property)
|
|
||||||
return item_property(hash, property)
|
|
||||||
if hash.respond_to?('[]'.freeze)
|
|
||||||
hash[property]
|
|
||||||
elsif hash.respond_to?(property)
|
|
||||||
hash.send(property)
|
|
||||||
else
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue