CSC/ECE 517 Fall 2024 - E2472. Reimplement responses controller.rb

From Expertiza_Wiki
Revision as of 03:57, 30 October 2024 by Leyusufo (talk | contribs)
Jump to navigation Jump to search

Introduction

Background

Expertiza has Response objects, which represent a response that is created by a user. An instructor, TA, or student can perform several kinds of operations on Responses, such as, ”Delete a response”, “Update a response”, and “Create a response”. These operations can be done on each of the items of a rubric, survey, or quiz.When creating the answer blanks, it needs to cycle through the Questions on the Questionnaire in the order specified by their sequence numbers.

Motivation

This project in particular intends that the students collaborate with each other and work on making enhancements to the code base by applying the concepts of Rails,RSpec, DRY code,Test driven development etc. This provides an opportunity for students to contribute to an open source project and learn further about software deployment.

Currently, the Responses controller holds methods that perform multiple tasks and others with a few lines of code. Its Edit and New methods, in particular, could be rewritten to make the code more DRY.

Tasks Identified

  • Reimplement the edit and delete method
  • Reimplement the assign_action_parameters and set_content methods
  • Reduce the multiple calls to the sort_questions method
  • Changing methods to accept parameters

Classes

  • controllers/Responses_controller.rb
  • models/Response.rb

Modules

  • helpers/response_helper.rb

Reimplementing the Edit and Delete method

The edit function contains many functionalities that need to be rewritten into separate functions because these functionalities do not apply to the action of editing.

BLOCK 1:

 The following block contains functionality for sorting reviews.  
 


 This part of the code is moved into the response model as a separate function:
 

BLOCK 2:

 The following block contains functionality for checking if a reviewer is a team: 

   if @map.team_reviewing_enabled
     ...
   end


 This part of the code is moved into the application_controller.rb file as a separate method:
   def map_team_reviewing_enabled?(map_team_reviewing_enabled)
     map_team_reviewing_enabled == true
   end


There is redundant code for locking a response in the edit and delete methods:

   if @map.team_reviewing_enabled
     @response = Lock.get_lock(@response, current_user, Lock::DEFAULT_TIMEOUT)
     if @response.nil?
       response_lock_action
       return
     end
   end


This redundant code is removed from both methods and reimplemented as a separate method and placed in the respnse_helper.rb Module:

     # locks a response based on an authenticated user
     def lock_response(map,curr_response)
       if map_team_reviewing_enabled?(map.team_reviewing_enabled)
         this_response = Lock.get_lock(curr_response, current_user, Lock::DEFAULT_TIMEOUT)
         if this_response.nil?
           response_lock_action
         end
         return this_response
       end
       return curr_response
     end

Reimplement the assign_action_parameters and set_content methods

Reduce the multiple calls to the sort_questions method

Change to new redirect method rather using controller and action explicitly.

Changing methods to accept parameters using the DRY principle

Impact Analysis

Affected Classes

Changed existent classes

  • controllers/responses_controller.rb
  • controllers/application_controller.rb
  • models/responses.rb

Changed existent Modules

  • response_helper.rb

Running the Project Locally

The project could be run locally by cloning the Github repository expertiza and then running the following commands sequentially.

bundle install
rake db:create:all
rake db:migrate
rails s

Testing using Selenium IDE

Testing Instructions

Future Work