def convert(klass, args, reject_blank = true)
return args if args.is_a?(BSON::ObjectId) || !klass.using_object_ids?
case args
when ::String
return nil if args.blank?
if args.unconvertable_to_bson?
args
else
BSON::ObjectId.legal?(args) ? BSON::ObjectId.from_string(args) : args
end
when ::Array
args.delete_if { |arg| arg.blank? } if reject_blank
args.replace(args.map { |arg| convert(klass, arg, reject_blank) })
when ::Hash
args.tap do |hash|
hash.each_pair do |key, value|
next unless klass.object_id_field?(key)
hash[key] = convert(klass, value, reject_blank)
end
end
else
args
end
end