CSC/ECE 517 Spring 2022 - E2217: Refactor questionnaires controller
This page describes the changes made for the Spring 2022 OSS Project E2217: Refactoring Questionnaires Controller
Description
This project focused on sanding down the rough edges of questionnaires_controller.rb
through the removal of the unused create_questionnaire method, breaking up the exceedingly long create method, transfer of hardcoded values in the add_new_questions method, and general code cleanup.
Problems and Solutions
Problem: The create_questionnaire
method is not used.create_questionnaire
has no immediate apparent calls, and appears to have the same functionality as create
.
- Solution:
Problem: The create
method is 49 lines long, and needs to be broken up
- Solution:
Problem: There are three checks for whether a question is a QuizQuestionnaire
. These checks are likely unnecessary, and testing the class of an object carries potential problems.
- Solution:
Problem: There are assignment values hardwired into the code in add_new_questions
. Although these fields are okay to default to the given values, these should be defined constants
- Solution: As these values related to
ScoredQuestion
items, constants were created inscored_question.rb
.add_new_questions
now uses these class constants when assigning default values for fields. These values are all changeable in the UI after initialization.
Addition of constants to scored_question.rb
:
Problem: Several methods have a questionnaire_id
as a parameter, this may be unnecessary in several situations where params[:id]
would suffice
- Solution: Where applicable,
questionnaire_id
was changed toparams[:id]
. This was done in methods whereparams[:id].nil?
was not called, and in methods wherequestionnaire_id = params[:id]
was called
Change of questionnaire_id
to params[:id]
in save_all_questions
:
Problem: Several bad if statements exist
- Solution: Line 96:
if @questionnaire.type != "QuizQuestionnaire"
checking if it is a QuizQuestionnaire is not necessary so this line has been removed because the QuizQuestionnaire is same as the other questionnaire types.
Line 244 & 266 : if @questionnaire.type != "QuizQuestionnaire"
checking if it is a QuizQuestionnaire is not necessary so this line has been removed because the for saving a new question there is no need to check for the QuizQuestionnaire and weights used in this check are not used anywhere.
Modified Files
(Add modified files and list of changes here)
Testing
Running Tests
rspec ./spec/controllers/questionnaires_controller_spec.rb
Future Improvements
Pull Request
GitHub link: https://github.com/expertiza/expertiza/pull/2320