class JMESPath::Nodes::SortByFunction
Public Instance Methods
call(args)
click to toggle source
# File lib/jmespath/nodes/function.rb, line 459 def call(args) if args.count == 2 if get_type(args[0]) == ARRAY_TYPE && get_type(args[1]) == EXPRESSION_TYPE values = args[0] expression = args[1] array_type = get_type(expression.eval(values[0])) if array_type == STRING_TYPE || array_type == NUMBER_TYPE || values.size == 0 # stable sort the list n = 0 values.sort_by do |value| value = expression.eval(value) value_type = get_type(value) if value_type != array_type msg = "function sort() expects values to be an array of only numbers, or only integers" return maybe_raise Errors::InvalidTypeError, msg end n += 1 [value, n] end else return maybe_raise Errors::InvalidTypeError, "function sort() expects values to be an array of numbers or integers" end else return maybe_raise Errors::InvalidTypeError, "function sort_by() expects an array and an expression" end else return maybe_raise Errors::InvalidArityError, "function sort_by() expects two arguments" end end