# File lib/plucky/normalizers/criteria_hash_value.rb, line 22
      def call(parent_key, key, value)
        case value
          when Array, Set
            if object_id?(parent_key)
              value = value.map { |v| to_object_id(v) }
            end

            if nesting_operator?(key)
              value.map  { |v| criteria_hash_class.new(v, options).to_hash }
            elsif parent_key == key && !modifier?(key) && !value.empty?
              # we're not nested and not the value for a symbol operator
              {:$in => value.to_a}
            else
              # we are a value for a symbol operator or nested hash
              value.to_a
            end
          when Time
            value.utc
          when String
            if object_id?(key)
              return to_object_id(value)
            end
            value
          when Hash
            value.each { |k, v| value[k] = call(key, k, v) }
            value
          when Regexp
            Regexp.new(value)
          else
            value
        end
      end