2017-06-22 6 views
1

habe ich dieses Stück Code, der Leitungslänge Grenze überschreiten Rubocop Straftat erhöhen:Wie eine lange Schlange in Ruby Refactoring

return organisation_path(current_user.organisation) if current_user.organisation 
return session[:previous_url] if session[:previous_url] 
return organisation_path(current_user.pending_organisation_id) if current_user.pending_organisation_id 
root_path 

Ende

Die Grenze in vorletzter Linie überschreitet. Ich versuche, diese Linie umzuformulieren, um die Rubocop-Offensive zu lösen.

Mein erster Versuch war es wie folgt aufgeteilt:

return organisation_path(current_user.pending_organisation_id) if 
    current_user.pending_organisation_id 

Aber es ist nicht lesbar aussehen.

Mein zweiter Versuch war diese Linie ein Verfahren zur ausklammern, so habe ich diese Methode:

def pending_organization_path_for_current_user 
    return organisation_path(current_user.pending_organisation_id) if current_user.pending_organisation_id 
end 

Aber auch hier der Methodenname zu lang ist und damit die Linie

pending_organization_path_for_current_user if current_user.pending_organisation_id 

das übersteigt Leitungslänge und damit ist die Lösung für mich nicht machbar.

Also meine Frage als Anfänger ist, wie sollte ich Refactor solche Fälle betrachten?

+0

Was einfach bre die if-Anweisung in mehrere Zeilen umwandeln? – Severin

+0

Rubocop wird dann Guard-Klausel Offensive erzeugen. – Lokesh

Antwort

3

Wie wäre es, die if-Anweisung einfach in mehrere Zeilen zu zerlegen?

if current_user.pending_organisation_id 
    return organisation_path(current_user.pending_organisation_id) 
end 
+0

Rubocop wird dann Guard-Klausel-Offensive erzeugen. – Lokesh

+0

können Sie den genauen Code hinzufügen, den Sie geschrieben haben, der dieses Vergehen aufwirft? – Severin

+0

Es tut mir leid. Es erhebt keine Schutzklausel, aber ich dachte es würde. – Lokesh

2
return organisation_path(current_user.organisation) if current_user.organisation 
return session[:previous_url] if session[:previous_url] 
return root_path unless current_user.pending_organisation_id 
organisation_path(current_user.pending_organisation_id) 
0

Ich nehme an, Sie wollen nicht Rubocop Einstellungen zwicken den akzeptierten Stil zu ändern, so könnte man es, wie dieses Problem zu beheben:

if current_user.pending_organisation_id 
    organisation_path(current_user.pending_organisation_id) 
end 

Aber manchmal ist es einfacher, nur um akzeptieren, dass dies eine jener Zeiten ist , wo Sie als Rubocop besser wissen, so fügen Sie einfach eine Ausnahme:

# rubocop:disable Style/WhateverLineLengthIsCalled 
return organisation_path(current_user.pending_organisation_id) if current_user.pending_organisation_id 
# rubocop:enable Style/WhateverLineLengthIsCalled