lib/mongoid/criteria/translator.rb
# frozen_string_literal: true
# rubocop:todo all
module Mongoid
class Criteria
# This is a helper module for translating atomic and composite
# Ruby values into corresponding query and option components.
# Originally implemented as patches to core classes, that approach
# has generally fallen into disfavor, as it bleeds too much into
# the public namespace.
#
# @api private
module Translator
extend self
# Converts the given value to a direction specification for use in
# sorting.
#
# @example Convert the value to a direction.
# Translator.to_direction(:desc)
# Translator.to_direction("1")
# Translator.to_direction(-1)
# Translator.to_direction(score: { "$meta": "textScore" })
#
# @param [ Hash | Numeric | String | Symbol ] value The value to convert.
#
# @return [ Hash | Numeric ] The direction.
def to_direction(value)
case value
when Hash then
value
when Numeric then
value
when String then
value =~ /desc/i ? -1 : 1
when Symbol then
to_direction(value.to_s)
else
raise ArgumentError, "cannot translate #{value.inspect} (#{value.class}) to a direction specification"
end
end
end
end
end