Since this method is complex enough to have specs and isn't dependent on a request, it belongs in a model or context.