module OData::AbstractSchema::Comparable
Public Instance Methods
compare(a, b, property_order_pairs = [])
click to toggle source
# File lib/o_data/abstract_schema/comparable.rb, line 4 def compare(a, b, property_order_pairs = []) _pairs = [] + property_order_pairs _compare(a, b, _pairs.shift, _pairs) end
sort(many, property_order_pairs = [])
click to toggle source
# File lib/o_data/abstract_schema/comparable.rb, line 9 def sort(many, property_order_pairs = []) [many].compact.flatten.sort { |a, b| compare(a, b, property_order_pairs) } end
Protected Instance Methods
_compare(a, b, head, rest)
click to toggle source
# File lib/o_data/abstract_schema/comparable.rb, line 15 def _compare(a, b, head, rest) return 0 if head.blank? property, asc_or_desc = head asc_or_desc ||= :asc if b.blank? (asc_or_desc == :asc) ? 1 : -1 else a_value = property.value_for(a) b_value = property.value_for(b) if a_value.blank? (asc_or_desc == :asc) ? -1 : 1 elsif b_value.blank? (asc_or_desc == :asc) ? 1 : -1 elsif (c = a_value <=> b_value) != 0 (asc_or_desc == :asc) ? c : c * -1 else _compare(a, b, rest.shift, rest) end end end