From 9b256de4a9bb94279b8f9c47a4137d16e34c18cc Mon Sep 17 00:00:00 2001 From: Chris Hill-Scott Date: Thu, 8 Apr 2021 13:18:56 +0100 Subject: [PATCH] Refactor to reduce duplication MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit > Rule of three ("Three strikes and you refactor") is a code refactoring > rule of thumb to decide when similar pieces of code should be > refactored to avoid duplication. It states that two instances of > similar code don't require refactoring, but when similar code is used > three times, it should be extracted into a new procedure – https://en.wikipedia.org/wiki/Rule_of_three_(computer_programming) --- app/main/views/broadcast.py | 41 ++++++++++++------------------------- 1 file changed, 13 insertions(+), 28 deletions(-) diff --git a/app/main/views/broadcast.py b/app/main/views/broadcast.py index 7299281e0..6618a3e16 100644 --- a/app/main/views/broadcast.py +++ b/app/main/views/broadcast.py @@ -373,35 +373,20 @@ def view_broadcast(service_id, broadcast_message_id): if broadcast_message.status == 'draft': abort(404) - if ( - broadcast_message.status in {'completed', 'cancelled'} - and request.endpoint != 'main.view_previous_broadcast' + for statuses, endpoint in ( + ({'completed', 'cancelled'}, 'main.view_previous_broadcast'), + ({'broadcasting', 'pending-approval'}, 'main.view_current_broadcast'), + ({'rejected'}, 'main.view_rejected_broadcast'), ): - return redirect(url_for( - '.view_previous_broadcast', - service_id=current_service.id, - broadcast_message_id=broadcast_message.id, - )) - - if ( - broadcast_message.status in {'broadcasting', 'pending-approval'} - and request.endpoint != 'main.view_current_broadcast' - ): - return redirect(url_for( - '.view_current_broadcast', - service_id=current_service.id, - broadcast_message_id=broadcast_message.id, - )) - - if ( - broadcast_message.status in {'rejected'} - and request.endpoint != 'main.view_rejected_broadcast' - ): - return redirect(url_for( - '.view_rejected_broadcast', - service_id=current_service.id, - broadcast_message_id=broadcast_message.id, - )) + if ( + broadcast_message.status in statuses + and request.endpoint != endpoint + ): + return redirect(url_for( + endpoint, + service_id=current_service.id, + broadcast_message_id=broadcast_message.id, + )) back_link_endpoint = { 'main.view_current_broadcast': '.broadcast_dashboard',