CSC/ECE 517 Spring 2022 - E2217: Refactor questionnaires controller: Difference between revisions

From Expertiza_Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 4: Line 4:
This project focused on sanding down the rough edges of <code>questionnaires_controller.rb</code> 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.
This project focused on sanding down the rough edges of <code>questionnaires_controller.rb</code> 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 ===
== Problems and Solutions ==
*'''Problem''': The <code>create_questionnaire</code> method is not used.<code>create_questionnaire</code> has no immediate apparent calls, and appears to have the same functionality as <code>create</code>.  
===='''Problem''': The <code>create_questionnaire</code> method is not used.<code>create_questionnaire</code> has no immediate apparent calls, and appears to have the same functionality as <code>create</code>.====
**'''Solution''':
*'''Solution''':


* '''Problem''': The <code>create</code> method is 49 lines long, and needs to be broken up
==== '''Problem''': The <code>create</code> method is 49 lines long, and needs to be broken up====
**'''Solution''':
*'''Solution''':


*'''Problem''': There are three checks for whether a question is a <code>QuizQuestionnaire</code>. These checks are likely unnecessary, and testing the class of an object carries potential problems.
===='''Problem''': There are three checks for whether a question is a <code>QuizQuestionnaire</code>. These checks are likely unnecessary, and testing the class of an object carries potential problems.====
**'''Solution''':
*'''Solution''':


*'''Problem''': There are assignment values hardwired into the code in <code>add_new_questions</code>. Although these fields are okay to default to the given values, these should be defined constants
===='''Problem''': There are assignment values hardwired into the code in <code>add_new_questions</code>. Although these fields are okay to default to the given values, these should be defined constants====
**'''Solution''': As these values related to <code>ScoredQuestion</code> items, constants were created in <code>scored_question.rb</code>. <code>add_new_questions</code> now uses these class constants when assigning default values for fields. These values are all changeable in the UI after initialization.
*'''Solution''': As these values related to <code>ScoredQuestion</code> items, constants were created in <code>scored_question.rb</code>. <code>add_new_questions</code> 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 <code>scored_question.rb</code>:
Addition of constants to <code>scored_question.rb</code>:
[[File:Scored_question_changes.png|upright]]
[[File:Scored_question_changes.png]]


*'''Problem''': Several methods have a <code>questionnaire_id</code> as a parameter, this may be unnecessary in several situations where <code>params[:id]</code> would suffice
===='''Problem''': Several methods have a <code>questionnaire_id</code> as a parameter, this may be unnecessary in several situations where <code>params[:id]</code> would suffice====
**'''Solution''':  
*'''Solution''':  


[[File:save_all_questions_changes.png|upright=0.5|left|alt=Change of <code>questionnaire_id</code> to <code>params[:id]</code> in <code>save_all_questions</code>]]
Change of <code>questionnaire_id</code> to <code>params[:id]</code> in <code>save_all_questions</code>:
[[File:save_all_questions_changes.png]]


*'''Problem''': Several bad <var>if</var> statements exist
===='''Problem''': Several bad <var>if</var> statements exist====
**'''Solution''':
*'''Solution''':


== Modified Files ==
== Modified Files ==

Revision as of 20:08, 17 March 2022

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 in scored_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:

Change of questionnaire_id to params[:id] in save_all_questions:

Problem: Several bad if statements exist

  • Solution:

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