W swoim projekcie uzywam rubocopa do statycznej analizy kodu. Projekt jest juz calkiem spory i zwykle nie ma problemu z poprawieniem bledow, ale przy tej metodzie kompletnie brak mi pomyslu, zeby to poprawianie nie bylo sztuka dla sztuki.
Dla rubocopa taka metoda jest o 1 linijke za dluga, a complexity jest miedzy 18, a 19, podczas gdy w projekcie mam ustawiony standardowy prog na 15.
Jak sobie z tym poradzic?
def accept
membership = Member.new(user: current_user, group: @invitation.group)
respond_to do |format|
if membership.save
@invitation.accepted!
format.html { redirect_to after_invitation_accept_path, notice: 'Zaproszenie zaakceptowane' }
format.json { render :show, status: :ok, location: @invitation }
else
format.html { redirect_to after_invitation_accept_path, alert: 'Już jestes czlonkiem tej grupy' }
format.json { render json: membership.errors, status: :unprocessable_entity }
end
end
end
Chetnie sie zapoznam z tym narzedziem, nie mialem okazji wczesniej uzywac.
Tutaj jednak chodzi o jedna metode, ktora nie robi naprawde nic wielkiego. Nie chce podwyzszac progow, ani tworzyc na ten controller wyjatku (chyba ze mozna wykluczyc jedna metode przy sprawdzaniu? czegos takiego jednak nie znalazlem).
Jasne, zgadzam sie z Toba w 100%. Ale teraz mam taka sytuacje, ze codeship sprawdza rubocopa, brakemana, puszcza testy i instaluje aplikacje. Oczywiscie rubocop zglasza blad, wiec aplikacja sie nie zainstaluje.
Pytanie jest bardziej, jakbyscie rozwiazali taka sytuacje? Wyjac caly controller spod sprawdzania?
ja bym zawartość if/else przeniósł do dwoch metod prywatnych w controlerze invitation_accepted(format, membership) i invitation_denied(format, membership) Nazwa oczywiście może być inna.
if membership.save
invitation_accepted(format, membership)
else
invitation_dedied(format, membership)
end
Z tego co widzę, to invitation_accepted nie musisz przyjmowac membership
BTW teksty alert/notice powinny byc w jakims osobnym pliku. Nie używacie i18n, czy czegos takiego?
Otóż to. Niektórzy myślą, że jak im rubocop czy inne automatyczne narzędzie rzuci błędem to kod jest “zły”, a jak nie rzuci to wręcz odwrotnie wszystko “cacy”.
Można wyłączyć daną regułę bądź zmienić jej konfigurację (np. podnieść limit dla ABC complexity itp.) w pliku .rubocop.yml. Reguły można także wyłączać per plik/metoda poprzez komentarze. Narzędzia typu codeship powinny odpalać rubocopa w katalogu z projektem, więc te reguły powinny być normalnie respektowane.