class JMESPath::Nodes::SortFunction

Public Instance Methods

call(args) click to toggle source
# File lib/jmespath/nodes/function.rb, line 424
def call(args)
  if args.count == 1
    value = args.first
    if Array === value
      # every element in the list must be of the same type
      array_type = get_type(value[0])
      if array_type == STRING_TYPE || array_type == NUMBER_TYPE || value.size == 0
        # stable sort
        n = 0
        value.sort_by do |v|
          value_type = get_type(v)
          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
          [v, 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() expects values to be an array of numbers or integers"
    end
  else
    return maybe_raise Errors::InvalidArityError, "function sort() expects one argument"
  end
end