CSC/ECE 517 Fall 2019 - E1942. Refactor stage deadlines in assignment.rb

From Expertiza_Wiki
Revision as of 02:59, 29 October 2019 by Onkashid (talk | contribs)
Jump to navigation Jump to search

Expertiza Background

Expertiza is an assignment portal developed by faculties and students at NCSU. It provides a platform for the faculties to create assignments for students. Faculties can have assignments with staged deadlines. Expertiza has support to create teams for students, track the team members and provide review for the work done by team members. Students can also provide reviews for peer team's assignment submission. Expertiza has been developed on Ruby on Rails and is available on github.

Problem Description

Following is an OSS project which deals with refactoring of stage deadlines in assignment.rb file. An assignment can have incremental deadlines for different topics in a single assignment. This project involves refactoring the functions in assignment.rb file related to stage deadlines. There were five functions to check what kind of stage an assignment is in. However, the names of these functions were ambiguous and functionalities implemented in some of them overlapped with each other. By the end of this project we have refactored these deadline functions.


Current Scenario

The assignment.rb file has the following functions implemented :
1. current_stage_name(topic_id = nil)
2. find_current_stage(topic_id = nil)
3. get_current_stage(topic_id = nil)
4. link_for_current_stage(topic_id = nil)
5. stage_deadline(topic_id = nil)

We have found the following issues with the code with respect to Ruby conventions :

Added new function next_due_date(topic_id = nil)
Function get_next_due_date was called on DueDate model, numerous times in the file assignment.rb. A new private function next_due_date has been added which returns the next due date of the current assignment (if any), or else return null. The function call DueDate.get_next_due_date(self.id, topic_id) was replaced by a call to private method next_due_date(topic_id). The following function has been added : New code introduced is as follows.
File:app/models/assignment.rb
Code:

 def next_due_date(topic_id = nil)
   DueDate.get_next_due_date(self.id, topic_id)
 end

Added new function finished?(topic_id)
In many parts of the code, whether the assignment is finished or not is checked by comparing the return value with 'Finished'. A new private function has been added which returns true if the next_due_date is not nil. Otherwise, it returns false. File:app/models/assignment.rb
Code:

def finished?( topic_id = nil )
   next_due_date(topic_id).nil?
 end

Added new function topic_missing?(topic_id)
The topic_id for a staggered assignment has been checked with nil and 'Unknown' is returned. This does not follow the DRY principle. A new method to check whether the topic is missing, was added. File:app/models/assignment.rb
Code:

 def topic_missing?( topic_id = nil)
   topic_id.nil? and self.staggered_deadline?
 end

Important Links

1. VCL Link for expertiza deployed with changes
2. OSS documentation