module JMESPath::Nodes::CompareBy
Public Instance Methods
compare_by(mode, *args)
click to toggle source
# File lib/jmespath/nodes/function.rb, line 493 def compare_by(mode, *args) if args.count == 2 values = args[0] expression = args[1] if get_type(values) == ARRAY_TYPE && get_type(expression) == EXPRESSION_TYPE type = get_type(expression.eval(values.first)) if type != NUMBER_TYPE && type != STRING_TYPE msg = "function #{mode}() expects values to be strings or numbers" return maybe_raise Errors::InvalidTypeError, msg end values.send(mode) do |entry| value = expression.eval(entry) value_type = get_type(value) if value_type != type msg = "function #{mode}() encountered a type mismatch in " msg << "sequence: #{type}, #{value_type}" return maybe_raise Errors::InvalidTypeError, msg end value end else msg = "function #{mode}() expects an array and an expression" return maybe_raise Errors::InvalidTypeError, msg end else msg = "function #{mode}() expects two arguments" return maybe_raise Errors::InvalidArityError, msg end end