Extract some boilerplate into an each_tap method