Can process_queue just yield the `new_queue`, `temp_queue`, and `requeue_queue` in the block? That way you can DRY up knowing how to construct the new/temp/requeuing queues in both places, and also lower the arg count on `process_queue`.