С датой немного сложно работать, вы должны использовать Время. Попробуйте преобразовать даты в времена:
require 'time'
foo_time = Time.parse(foo.to_s)
bar_time = Time.parse(bar.to_s)
Преобразование их в метки времени, затем вычисление среднего значения и преобразование обратно во время:
avg = Time.at((foo_time.to_f + bar_time.to_f) / 2)
Вы можете преобразовать это обратно в дату:
avg_date = Date.parse(avg.to_s)