super.tap
- это не что иное, как метод tap
, вызываемый при любом возвращении super
.Пользователь dmnd уже хорошо объяснил, что делает tap
(почему downwote?).super
вызывает метод из класса предков, который вы переопределяете.
Итак, вставленный вами код эквивалентен следующему:
original_result = super
if @user && @user.new_record?
@omniauth = original_result.session[:session]
original_result.session[:omniauth] = nil unless @user.new_record?
end
return original_result
По существу, можно использовать super.tap
для переноса метода из унаследованного класса, добавления некоторых функций, но сохранения результата.