<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sbhadau</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sbhadau"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Sbhadau"/>
	<updated>2026-05-07T07:16:06Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=123057</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=123057"/>
		<updated>2019-04-02T02:20:19Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project - Fix Code Climate issues in models with names beginning with 'H' thru 'Sc'.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are not in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. Set up CodeClimate locally on our systems by using the following guide.&lt;br /&gt;
&lt;br /&gt;
     https://docs.google.com/document/d/1ZmYdjJ4CeXyBc8-7EFslmCzHw8FF6hsSg3EjL0Vlr8w/edit&lt;br /&gt;
&lt;br /&gt;
2. Use &amp;quot;analyze&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
We have used &amp;quot;analyze&amp;quot; command of Code Climate to find out the code smells.&lt;br /&gt;
&lt;br /&gt;
Analyze command lets you pass file paths as arguments to the codeclimate and also lets you specify engine options with -e or --engine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;codeclimate analyze -e rubocop &amp;lt;file_Name&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. We have also used Rubocop documentation for resolving issues. &lt;br /&gt;
&lt;br /&gt;
RuboCop is a Ruby static code analyzer (a.k.a. linter) and code formatter. &lt;br /&gt;
&lt;br /&gt;
It enforces the guidelines outlined in the community Ruby Style Guide for its best practices.&lt;br /&gt;
&lt;br /&gt;
4. Issue related to method names starting with get_ are ignored because it requires refactoring across multiple files in the project, which would in turn break existing functionalities.&lt;br /&gt;
&lt;br /&gt;
5. some issues are ignored as they were breaking the rspec tests.&lt;br /&gt;
e.g. &lt;br /&gt;
* mass assignment : It is used to create an instance using multiple parameters&lt;br /&gt;
* In some test files instance were created with multiple parameter along with the primary id. But in mass assignment primary id is dangerous if allowed in mass assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
* '''mass assignment'''&lt;br /&gt;
 Mass assignment refers to the act of constructing your object with a parameters hash. &lt;br /&gt;
&lt;br /&gt;
We assign multiple values to attributes via a single assignment operator.&lt;br /&gt;
&lt;br /&gt;
It is implemented using attr_accessible method. It takes a list of attributes that will be accessible. All other attributes will be protected. &lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*  '''Active Record Associations : Adding &amp;quot;inverse_of&amp;quot; option.'''&lt;br /&gt;
&lt;br /&gt;
Associated objects do not point to the same in-memory objects by default.&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading. It lets you reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Inverse_Of.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Add dependent property'''&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :nullify&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dependent_Property.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''useless assignment of a variable'''&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot;  or rather do not assign them to any variable, so that it doesn't get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Useless_Assignment.png]]&lt;br /&gt;
&lt;br /&gt;
*  '''Using snake case for method names''' &lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
* '''Use find_by instead of where.first'''&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Nested ternary operators''' &lt;br /&gt;
Ternary operators must not be nested. Rather we should prefer ''' if-else'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Ternary_Operator.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
&lt;br /&gt;
*  162 issues resolved&lt;br /&gt;
*  42 Files changed&lt;br /&gt;
*  215 additions&lt;br /&gt;
*  163 Deletions&lt;br /&gt;
*  Travis CI build passed&lt;br /&gt;
*  No merge conflicts&lt;br /&gt;
*  coveralls : &lt;br /&gt;
        *  Coverage increased (+10.1%) to 50.97%.&lt;br /&gt;
*  codeclimate bot&lt;br /&gt;
        * Code Climate has analyzed commit 050fa7d and detected 0 issues on this pull request.&lt;br /&gt;
        * The test coverage on the diff in this pull request is 42.3% (50% is the threshold).&lt;br /&gt;
        * This pull request will bring the total coverage in the repository to 29.0% (-21.9% change).&lt;br /&gt;
*  travis-ci&lt;br /&gt;
        * Your changes look good to me! tada&lt;br /&gt;
        * The Travis CI build passed&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/import_error.rb &lt;br /&gt;
* app/models/institution.rb &lt;br /&gt;
* app/models/instructor.rb &lt;br /&gt;
* app/models/invitation.rb &lt;br /&gt;
* app/models/join_team_request.rb &lt;br /&gt;
* app/models/language.rb &lt;br /&gt;
* app/models/late_policy.rb &lt;br /&gt;
* app/models/logger_message.rb &lt;br /&gt;
* app/models/markup_style.rb &lt;br /&gt;
* app/models/menu_item.rb &lt;br /&gt;
* app/models/menu.rb &lt;br /&gt;
* app/models/metareview_questionnaire.rb &lt;br /&gt;
* app/models/metareview_response_map.rb &lt;br /&gt;
* app/models/missing_object_id_error.rb &lt;br /&gt;
* app/models/multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/multiple_choice_radio.rb &lt;br /&gt;
* app/models/node.rb &lt;br /&gt;
* app/models/notification.rb &lt;br /&gt;
* app/models/on_the_fly_calc.rb &lt;br /&gt;
* app/models/participant.rb &lt;br /&gt;
* app/models/password_reset.rb  &lt;br /&gt;
* app/models/path_error.rb&lt;br /&gt;
* app/models/permission.rb &lt;br /&gt;
* app/models/plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/questionnaire_header.rb &lt;br /&gt;
* app/models/questionnaire_node.rb &lt;br /&gt;
* app/models/questionnaire.rb  &lt;br /&gt;
* app/models/questionnaire_type_node.rb &lt;br /&gt;
* app/models/question.rb &lt;br /&gt;
* app/models/quiz_assignment.rb  &lt;br /&gt;
* app/models/quiz_question_choice.rb &lt;br /&gt;
* app/models/quiz_questionnaire.rb  &lt;br /&gt;
* app/models/quiz_question.rb  &lt;br /&gt;
* app/models/quiz_response_map.rb   &lt;br /&gt;
* app/models/quiz_response.rb  &lt;br /&gt;
* app/models/requested_user.rb  &lt;br /&gt;
* app/models/response_map.rb &lt;br /&gt;
* app/models/response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/review_grade.rb  &lt;br /&gt;
* app/models/review_questionnaire.rb   &lt;br /&gt;
* app/models/review_response_map.rb &lt;br /&gt;
* app/models/role.rb  &lt;br /&gt;
* app/models/rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/scale.rb  &lt;br /&gt;
* app/models/scored_question.rb  &lt;br /&gt;
* app/models/score_view.rb&lt;br /&gt;
&lt;br /&gt;
In additions to above files, we have edited the following files as well as they were dependency on those.&lt;br /&gt;
&lt;br /&gt;
* '''ta.rb'''&lt;br /&gt;
&lt;br /&gt;
[[File:ta.png]]&lt;br /&gt;
&lt;br /&gt;
* '''response.html.erb'''&lt;br /&gt;
&lt;br /&gt;
[[File:response.png]]&lt;br /&gt;
&lt;br /&gt;
* '''spec/models/scale_spec.rb'''&lt;br /&gt;
&lt;br /&gt;
[[File:scale_spec.png]]&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;br /&gt;
&lt;br /&gt;
==Important Links ==&lt;br /&gt;
&lt;br /&gt;
*  Pull Request: https://github.com/expertiza/expertiza/pull/1416&lt;br /&gt;
*  Files: https://github.com/expertiza/expertiza/pull/1416/files&lt;br /&gt;
*  Codeclimate analysis: https://codeclimate.com/github/expertiza/expertiza/pull/1416&lt;br /&gt;
*  Travis CI: https://travis-ci.org/expertiza/expertiza/builds/514206631?utm_source=github_status&amp;amp;utm_medium=notification&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019&amp;diff=122865</id>
		<title>CSC/ECE 517 Spring 2019</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019&amp;diff=122865"/>
		<updated>2019-04-01T21:01:14Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[CSC/ECE 517 Spring 2019 - Project E1905. Refactor questionnaires_controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1916. Fix Code Climate issues in controllers with names beginning with A through N]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1906. Refactor stage deadlines in Assignment.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project M1901 Implement missing WebAudio automation support]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1917. Fix Code Climate issues in controllers with names beginning with P through Z]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1921. Write tests for popup controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - M1902 Refactor bluetooth support for better maintainability]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - E1922. Write tests for assessment360 controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1907 Refactor response controller]]&lt;br /&gt;
*[[CSC/ECE_517_Spring_2019_-_Project_E1903._Create_quiz_questionnaires_controller.rb]]&lt;br /&gt;
*[[CSC/ECE_517_Spring_2019_-_Project_E1913. Refactor_review_mapping_helper.rb]]&lt;br /&gt;
*[[CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues]]&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1919_CodeClimate_Issues&amp;diff=122864</id>
		<title>E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1919_CodeClimate_Issues&amp;diff=122864"/>
		<updated>2019-04-01T21:00:41Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: moved E1919 CodeClimate Issues to CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues: Following naming convention&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues]]&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122863</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122863"/>
		<updated>2019-04-01T21:00:41Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: moved E1919 CodeClimate Issues to CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues: Following naming convention&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project - Fix Code Climate issues in models with names beginning with 'H' thru 'Sc'.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are not in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. Set up CodeClimate locally on our systems by using the following guide.&lt;br /&gt;
&lt;br /&gt;
     https://docs.google.com/document/d/1ZmYdjJ4CeXyBc8-7EFslmCzHw8FF6hsSg3EjL0Vlr8w/edit&lt;br /&gt;
&lt;br /&gt;
2. Use &amp;quot;analyze&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
We have used &amp;quot;analyze&amp;quot; command of Code Climate to find out the code smells.&lt;br /&gt;
&lt;br /&gt;
Analyze command lets you pass file paths as arguments to the codeclimate and also lets you specify engine options with -e or --engine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;codeclimate analyze -e rubocop &amp;lt;file_Name&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. We have also used Rubocop documentation for resolving issues. &lt;br /&gt;
&lt;br /&gt;
RuboCop is a Ruby static code analyzer (a.k.a. linter) and code formatter. &lt;br /&gt;
&lt;br /&gt;
It enforces the guidelines outlined in the community Ruby Style Guide for its best practices.&lt;br /&gt;
&lt;br /&gt;
4. Issue related to method names starting with get_ are ignored because it requires refactoring across multiple files in the project, which would in turn break existing functionalities.&lt;br /&gt;
&lt;br /&gt;
5. some issues are ignored as they were breaking the rspec tests.&lt;br /&gt;
	e.g.&lt;br /&gt;
		*  mass assignment : It is used to create an instance using multiple parameters&lt;br /&gt;
		*  In some test files instance were created with multiple parameter along with the primary id.&lt;br /&gt;
		*  but in mass assignment primary id is dangerous if allowed in mass assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
* '''mass assignment'''&lt;br /&gt;
 Mass assignment refers to the act of constructing your object with a parameters hash. &lt;br /&gt;
&lt;br /&gt;
We assign multiple values to attributes via a single assignment operator.&lt;br /&gt;
&lt;br /&gt;
It is implemented using attr_accessible method. It takes a list of attributes that will be accessible. All other attributes will be protected. &lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*  '''Active Record Associations : Adding &amp;quot;inverse_of&amp;quot; option.'''&lt;br /&gt;
&lt;br /&gt;
Associated objects do not point to the same in-memory objects by default.&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading. It lets you reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Inverse_Of.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Add dependent property'''&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :nullify&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dependent_Property.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''useless assignment of a variable'''&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot;  or rather do not assign them to any variable, so that it doesn't get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Useless_Assignment.png]]&lt;br /&gt;
&lt;br /&gt;
*  '''Using snake case for method names''' &lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
* '''Use find_by instead of where.first'''&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Nested ternary operators''' &lt;br /&gt;
Ternary operators must not be nested. Rather we should prefer ''' if-else'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Ternary_Operator.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
&lt;br /&gt;
*  162 issues resolved&lt;br /&gt;
*  42 Files changed&lt;br /&gt;
*  215 additions&lt;br /&gt;
*  163 Deletions&lt;br /&gt;
*  Travis CI build passed&lt;br /&gt;
*  No merge conflicts&lt;br /&gt;
*  coveralls : &lt;br /&gt;
        *  Coverage increased (+10.1%) to 50.97%.&lt;br /&gt;
*  codeclimate bot&lt;br /&gt;
        * Code Climate has analyzed commit 050fa7d and detected 0 issues on this pull request.&lt;br /&gt;
        * The test coverage on the diff in this pull request is 42.3% (50% is the threshold).&lt;br /&gt;
        * This pull request will bring the total coverage in the repository to 29.0% (-21.9% change).&lt;br /&gt;
*  travis-ci&lt;br /&gt;
        * Your changes look good to me! tada&lt;br /&gt;
        * The Travis CI build passed&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/import_error.rb &lt;br /&gt;
* app/models/institution.rb &lt;br /&gt;
* app/models/instructor.rb &lt;br /&gt;
* app/models/invitation.rb &lt;br /&gt;
* app/models/join_team_request.rb &lt;br /&gt;
* app/models/language.rb &lt;br /&gt;
* app/models/late_policy.rb &lt;br /&gt;
* app/models/logger_message.rb &lt;br /&gt;
* app/models/markup_style.rb &lt;br /&gt;
* app/models/menu_item.rb &lt;br /&gt;
* app/models/menu.rb &lt;br /&gt;
* app/models/metareview_questionnaire.rb &lt;br /&gt;
* app/models/metareview_response_map.rb &lt;br /&gt;
* app/models/missing_object_id_error.rb &lt;br /&gt;
* app/models/multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/multiple_choice_radio.rb &lt;br /&gt;
* app/models/node.rb &lt;br /&gt;
* app/models/notification.rb &lt;br /&gt;
* app/models/on_the_fly_calc.rb &lt;br /&gt;
* app/models/participant.rb &lt;br /&gt;
* app/models/password_reset.rb  &lt;br /&gt;
* app/models/path_error.rb&lt;br /&gt;
* app/models/permission.rb &lt;br /&gt;
* app/models/plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/questionnaire_header.rb &lt;br /&gt;
* app/models/questionnaire_node.rb &lt;br /&gt;
* app/models/questionnaire.rb  &lt;br /&gt;
* app/models/questionnaire_type_node.rb &lt;br /&gt;
* app/models/question.rb &lt;br /&gt;
* app/models/quiz_assignment.rb  &lt;br /&gt;
* app/models/quiz_question_choice.rb &lt;br /&gt;
* app/models/quiz_questionnaire.rb  &lt;br /&gt;
* app/models/quiz_question.rb  &lt;br /&gt;
* app/models/quiz_response_map.rb   &lt;br /&gt;
* app/models/quiz_response.rb  &lt;br /&gt;
* app/models/requested_user.rb  &lt;br /&gt;
* app/models/response_map.rb &lt;br /&gt;
* app/models/response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/review_grade.rb  &lt;br /&gt;
* app/models/review_questionnaire.rb   &lt;br /&gt;
* app/models/review_response_map.rb &lt;br /&gt;
* app/models/role.rb  &lt;br /&gt;
* app/models/rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/scale.rb  &lt;br /&gt;
* app/models/scored_question.rb  &lt;br /&gt;
* app/models/score_view.rb&lt;br /&gt;
&lt;br /&gt;
In additions to above files, we have edited the following files as well as they were dependency on those.&lt;br /&gt;
&lt;br /&gt;
* '''ta.rb'''&lt;br /&gt;
&lt;br /&gt;
[[File:ta.png]]&lt;br /&gt;
&lt;br /&gt;
* '''response.html.erb'''&lt;br /&gt;
&lt;br /&gt;
[[File:response.png]]&lt;br /&gt;
&lt;br /&gt;
* '''spec/models/scale_spec.rb'''&lt;br /&gt;
&lt;br /&gt;
[[File:scale_spec.png]]&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;br /&gt;
&lt;br /&gt;
==Important Links ==&lt;br /&gt;
&lt;br /&gt;
*  Pull Request: https://github.com/expertiza/expertiza/pull/1416&lt;br /&gt;
*  Files: https://github.com/expertiza/expertiza/pull/1416/files&lt;br /&gt;
*  Codeclimate analysis: https://codeclimate.com/github/expertiza/expertiza/pull/1416&lt;br /&gt;
*  Travis CI: https://travis-ci.org/expertiza/expertiza/builds/514206631?utm_source=github_status&amp;amp;utm_medium=notification&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019&amp;diff=122858</id>
		<title>CSC/ECE 517 Spring 2019</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019&amp;diff=122858"/>
		<updated>2019-04-01T20:38:38Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[CSC/ECE 517 Spring 2019 - Project E1905. Refactor questionnaires_controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1916. Fix Code Climate issues in controllers with names beginning with A through N]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1906. Refactor stage deadlines in Assignment.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project M1901 Implement missing WebAudio automation support]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1917. Fix Code Climate issues in controllers with names beginning with P through Z]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1921. Write tests for popup controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - M1902 Refactor bluetooth support for better maintainability]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - E1922. Write tests for assessment360 controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1907 Refactor response controller]]&lt;br /&gt;
*[[CSC/ECE_517_Spring_2019_-_Project_E1903._Create_quiz_questionnaires_controller.rb]]&lt;br /&gt;
*[[CSC/ECE_517_Spring_2019_-_Project_E1913. Refactor_review_mapping_helper.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues]]&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019&amp;diff=122852</id>
		<title>CSC/ECE 517 Spring 2019</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019&amp;diff=122852"/>
		<updated>2019-04-01T19:49:26Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[CSC/ECE 517 Spring 2019 - Project E1905. Refactor questionnaires_controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1916. Fix Code Climate issues in controllers with names beginning with A through N]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1906. Refactor stage deadlines in Assignment.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project M1901 Implement missing WebAudio automation support]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1917. Fix Code Climate issues in controllers with names beginning with P through Z]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1921. Write tests for popup controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - M1902 Refactor bluetooth support for better maintainability]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - E1922. Write tests for assessment360 controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1907 Refactor response controller]]&lt;br /&gt;
*[[CSC/ECE_517_Spring_2019_-_Project_E1903._Create_quiz_questionnaires_controller.rb]]&lt;br /&gt;
*[[CSC/ECE_517_Spring_2019_-_Project_E1913. Refactor_review_mapping_helper.rb]]&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019&amp;diff=122851</id>
		<title>CSC/ECE 517 Spring 2019</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019&amp;diff=122851"/>
		<updated>2019-04-01T19:48:34Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[CSC/ECE 517 Spring 2019 - Project E1905. Refactor questionnaires_controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1916. Fix Code Climate issues in controllers with names beginning with A through N]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1906. Refactor stage deadlines in Assignment.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project M1901 Implement missing WebAudio automation support]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1917. Fix Code Climate issues in controllers with names beginning with P through Z]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1921. Write tests for popup controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - M1902 Refactor bluetooth support for better maintainability]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - E1922. Write tests for assessment360 controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1907 Refactor response controller]]&lt;br /&gt;
*[[CSC/ECE_517_Spring_2019_-_Project_E1903._Create_quiz_questionnaires_controller.rb]]&lt;br /&gt;
*[[CSC/ECE_517_Spring_2019_-_Project_E1913. Refactor_review_mapping_helper.rb]]&lt;br /&gt;
*[[E1919 CodeClimate Issues]]&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019&amp;diff=122850</id>
		<title>CSC/ECE 517 Spring 2019</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019&amp;diff=122850"/>
		<updated>2019-04-01T19:48:18Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[CSC/ECE 517 Spring 2019 - Project E1905. Refactor questionnaires_controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1916. Fix Code Climate issues in controllers with names beginning with A through N]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1906. Refactor stage deadlines in Assignment.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project M1901 Implement missing WebAudio automation support]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1917. Fix Code Climate issues in controllers with names beginning with P through Z]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1921. Write tests for popup controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - M1902 Refactor bluetooth support for better maintainability]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - E1922. Write tests for assessment360 controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1907 Refactor response controller]]&lt;br /&gt;
*[[CSC/ECE_517_Spring_2019_-_Project_E1903._Create_quiz_questionnaires_controller.rb]]&lt;br /&gt;
*[[CSC/ECE_517_Spring_2019_-_Project_E1913. Refactor_review_mapping_helper.rb]]&lt;br /&gt;
*[[CSC/ECE_517_Spring_2019 - E1919 CodeClimate Issues]]&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019&amp;diff=122849</id>
		<title>CSC/ECE 517 Spring 2019</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019&amp;diff=122849"/>
		<updated>2019-04-01T19:47:53Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[CSC/ECE 517 Spring 2019 - Project E1905. Refactor questionnaires_controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1916. Fix Code Climate issues in controllers with names beginning with A through N]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1906. Refactor stage deadlines in Assignment.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project M1901 Implement missing WebAudio automation support]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1917. Fix Code Climate issues in controllers with names beginning with P through Z]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1921. Write tests for popup controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - M1902 Refactor bluetooth support for better maintainability]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - E1922. Write tests for assessment360 controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1907 Refactor response controller]]&lt;br /&gt;
*[[CSC/ECE_517_Spring_2019_-_Project_E1903._Create_quiz_questionnaires_controller.rb]]&lt;br /&gt;
*[[CSC/ECE_517_Spring_2019_-_Project_E1913. Refactor_review_mapping_helper.rb]]&lt;br /&gt;
*[[E1919 CodeClimate Issues]]&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019&amp;diff=122848</id>
		<title>CSC/ECE 517 Spring 2019</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019&amp;diff=122848"/>
		<updated>2019-04-01T19:45:41Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[CSC/ECE 517 Spring 2019 - Project E1905. Refactor questionnaires_controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1916. Fix Code Climate issues in controllers with names beginning with A through N]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1906. Refactor stage deadlines in Assignment.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project M1901 Implement missing WebAudio automation support]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1917. Fix Code Climate issues in controllers with names beginning with P through Z]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1921. Write tests for popup controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - M1902 Refactor bluetooth support for better maintainability]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - E1922. Write tests for assessment360 controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1907 Refactor response controller]]&lt;br /&gt;
*[[CSC/ECE_517_Spring_2019_-_Project_E1903._Create_quiz_questionnaires_controller.rb]]&lt;br /&gt;
*[[CSC/ECE_517_Spring_2019_-_Project_E1913. Refactor_review_mapping_helper.rb]]&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019&amp;diff=122847</id>
		<title>CSC/ECE 517 Spring 2019</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019&amp;diff=122847"/>
		<updated>2019-04-01T19:43:49Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[CSC/ECE 517 Spring 2019 - Project E1905. Refactor questionnaires_controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1916. Fix Code Climate issues in controllers with names beginning with A through N]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1906. Refactor stage deadlines in Assignment.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project M1901 Implement missing WebAudio automation support]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1917. Fix Code Climate issues in controllers with names beginning with P through Z]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1921. Write tests for popup controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - M1902 Refactor bluetooth support for better maintainability]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - E1922. Write tests for assessment360 controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1907 Refactor response controller]]&lt;br /&gt;
*[[CSC/ECE_517_Spring_2019_-_Project_E1903._Create_quiz_questionnaires_controller.rb]]&lt;br /&gt;
*[[CSC/ECE_517_Spring_2019_-_Project_E1913. Refactor_review_mapping_helper.rb]]&lt;br /&gt;
*[[CSC/ECE_517_Spring_2019_-_http://wiki.expertiza.ncsu.edu/index.php/E1919_CodeClimate_Issues]]&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019&amp;diff=122846</id>
		<title>CSC/ECE 517 Spring 2019</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019&amp;diff=122846"/>
		<updated>2019-04-01T19:42:15Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[CSC/ECE 517 Spring 2019 - Project E1905. Refactor questionnaires_controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1916. Fix Code Climate issues in controllers with names beginning with A through N]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1906. Refactor stage deadlines in Assignment.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project M1901 Implement missing WebAudio automation support]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1917. Fix Code Climate issues in controllers with names beginning with P through Z]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1921. Write tests for popup controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - M1902 Refactor bluetooth support for better maintainability]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - E1922. Write tests for assessment360 controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Spring 2019 - Project E1907 Refactor response controller]]&lt;br /&gt;
*[[CSC/ECE_517_Spring_2019_-_Project_E1903._Create_quiz_questionnaires_controller.rb]]&lt;br /&gt;
*[[CSC/ECE_517_Spring_2019_-_Project_E1913. Refactor_review_mapping_helper.rb]]&lt;br /&gt;
*[[CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues]]&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122842</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122842"/>
		<updated>2019-04-01T19:25:40Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are not in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. Set up CodeClimate locally on our systems by using the following guide.&lt;br /&gt;
&lt;br /&gt;
     https://docs.google.com/document/d/1ZmYdjJ4CeXyBc8-7EFslmCzHw8FF6hsSg3EjL0Vlr8w/edit&lt;br /&gt;
&lt;br /&gt;
2. Use &amp;quot;analyze&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
We have used &amp;quot;analyze&amp;quot; command of Code Climate to find out the code smells.&lt;br /&gt;
&lt;br /&gt;
Analyze command lets you pass file paths as arguments to the codeclimate and also lets you specify engine options with -e or --engine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;codeclimate analyze -e rubocop &amp;lt;file_Name&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. We have also used Rubocop documentation for resolving issues. &lt;br /&gt;
&lt;br /&gt;
RuboCop is a Ruby static code analyzer (a.k.a. linter) and code formatter. &lt;br /&gt;
&lt;br /&gt;
It enforces the guidelines outlined in the community Ruby Style Guide for its best practices.&lt;br /&gt;
&lt;br /&gt;
4. Issue related to method names starting with get_ are ignored because it requires refactoring across multiple files in the project, which would in turn break existing functionalities.&lt;br /&gt;
&lt;br /&gt;
5. some issues are ignored as they were breaking the rspec tests.&lt;br /&gt;
	e.g.&lt;br /&gt;
		*  mass assignment : It is used to create an instance using multiple parameters&lt;br /&gt;
		*  In some test files instance were created with multiple parameter along with the primary id.&lt;br /&gt;
		*  but in mass assignment primary id is dangerous if allowed in mass assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
* '''mass assignment'''&lt;br /&gt;
 Mass assignment refers to the act of constructing your object with a parameters hash. &lt;br /&gt;
&lt;br /&gt;
We assign multiple values to attributes via a single assignment operator.&lt;br /&gt;
&lt;br /&gt;
It is implemented using attr_accessible method. It takes a list of attributes that will be accessible. All other attributes will be protected. &lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*  '''Active Record Associations : Adding &amp;quot;inverse_of&amp;quot; option.'''&lt;br /&gt;
&lt;br /&gt;
Associated objects do not point to the same in-memory objects by default.&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading. It lets you reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Inverse_Of.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Add dependent property'''&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :nullify&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dependent_Property.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''useless assignment of a variable'''&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot;  or rather do not assign them to any variable, so that it doesn't get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Useless_Assignment.png]]&lt;br /&gt;
&lt;br /&gt;
*  '''Using snake case for method names''' &lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
* '''Use find_by instead of where.first'''&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Nested ternary operators''' &lt;br /&gt;
Ternary operators must not be nested. Rather we should prefer ''' if-else'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Ternary_Operator.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
&lt;br /&gt;
*  162 issues resolved&lt;br /&gt;
*  42 Files changed&lt;br /&gt;
*  215 additions&lt;br /&gt;
*  163 Deletions&lt;br /&gt;
*  Travis CI build passed&lt;br /&gt;
*  No merge conflicts&lt;br /&gt;
* coveralls : &lt;br /&gt;
        *  Coverage increased (+10.1%) to 50.97%.&lt;br /&gt;
*  codeclimate bot&lt;br /&gt;
        * Code Climate has analyzed commit 050fa7d and detected 0 issues on this pull request.&lt;br /&gt;
        * The test coverage on the diff in this pull request is 42.3% (50% is the threshold).&lt;br /&gt;
        *  This pull request will bring the total coverage in the repository to 29.0% (-21.9% change).&lt;br /&gt;
*  travis-ci&lt;br /&gt;
        * Your changes look good to me! tada&lt;br /&gt;
        * The Travis CI build passed&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
In additions to above files, we have edited the following files as well as they were dependency on those.&lt;br /&gt;
&lt;br /&gt;
* '''ta.rb'''&lt;br /&gt;
&lt;br /&gt;
[[File:ta.png]]&lt;br /&gt;
&lt;br /&gt;
* '''response.html.erb'''&lt;br /&gt;
&lt;br /&gt;
[[File:response.png]]&lt;br /&gt;
&lt;br /&gt;
* '''spec/models/scale_spec.rb'''&lt;br /&gt;
&lt;br /&gt;
[[File:scale_spec.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;br /&gt;
&lt;br /&gt;
==Important Links ==&lt;br /&gt;
&lt;br /&gt;
*  Pull Request: https://github.com/expertiza/expertiza/pull/1416&lt;br /&gt;
*  Files: https://github.com/expertiza/expertiza/pull/1416/files&lt;br /&gt;
*  Codeclimate analysis: https://codeclimate.com/github/expertiza/expertiza/pull/1416&lt;br /&gt;
*  Travis CI: https://travis-ci.org/expertiza/expertiza/builds/514206631?utm_source=github_status&amp;amp;utm_medium=notification&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122841</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122841"/>
		<updated>2019-04-01T19:24:22Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are not in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. Set up CodeClimate locally on our systems by using the following guide.&lt;br /&gt;
&lt;br /&gt;
     https://docs.google.com/document/d/1ZmYdjJ4CeXyBc8-7EFslmCzHw8FF6hsSg3EjL0Vlr8w/edit&lt;br /&gt;
&lt;br /&gt;
2. Use &amp;quot;analyze&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
We have used &amp;quot;analyze&amp;quot; command of Code Climate to find out the code smells.&lt;br /&gt;
&lt;br /&gt;
Analyze command lets you pass file paths as arguments to the codeclimate and also lets you specify engine options with -e or --engine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;codeclimate analyze -e rubocop &amp;lt;file_Name&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. We have also used Rubocop documentation for resolving issues. &lt;br /&gt;
&lt;br /&gt;
RuboCop is a Ruby static code analyzer (a.k.a. linter) and code formatter. &lt;br /&gt;
&lt;br /&gt;
It enforces the guidelines outlined in the community Ruby Style Guide for its best practices.&lt;br /&gt;
&lt;br /&gt;
4. Issue related to method names starting with get_ are ignored because it requires refactoring across multiple files in the project, which would in turn break existing functionalities.&lt;br /&gt;
&lt;br /&gt;
5. some issues are ignored as they were breaking the rspec tests.&lt;br /&gt;
	e.g.&lt;br /&gt;
		*  mass assignment : It is used to create an instance using multiple parameters&lt;br /&gt;
		*  In some test files instance were created with multiple parameter along with the primary id.&lt;br /&gt;
		*  but in mass assignment primary id is dangerous if allowed in mass assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
* '''mass assignment'''&lt;br /&gt;
 Mass assignment refers to the act of constructing your object with a parameters hash. &lt;br /&gt;
&lt;br /&gt;
We assign multiple values to attributes via a single assignment operator.&lt;br /&gt;
&lt;br /&gt;
It is implemented using attr_accessible method. It takes a list of attributes that will be accessible. All other attributes will be protected. &lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*  '''Active Record Associations : Adding &amp;quot;inverse_of&amp;quot; option.'''&lt;br /&gt;
&lt;br /&gt;
Associated objects do not point to the same in-memory objects by default.&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading. It lets you reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Inverse_Of.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Add dependent property'''&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :nullify&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dependent_Property.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''useless assignment of a variable'''&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot;  or rather do not assign them to any variable, so that it doesn't get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Useless_Assignment.png]]&lt;br /&gt;
&lt;br /&gt;
*  '''Using snake case for method names''' &lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
* '''Use find_by instead of where.first'''&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Nested ternary operators''' &lt;br /&gt;
Ternary operators must not be nested. Rather we should prefer ''' if-else'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Ternary_Operator.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
&lt;br /&gt;
*  162 issues resolved&lt;br /&gt;
*  42 Files changed&lt;br /&gt;
*  215 additions&lt;br /&gt;
*  163 Deletions&lt;br /&gt;
*  Travis CI build passed&lt;br /&gt;
*  No merge conflicts&lt;br /&gt;
* coveralls : &lt;br /&gt;
        *  Coverage increased (+10.1%) to 50.97%.&lt;br /&gt;
*  codeclimate bot&lt;br /&gt;
        * Code Climate has analyzed commit 050fa7d and detected 0 issues on this pull request.&lt;br /&gt;
        * The test coverage on the diff in this pull request is 42.3% (50% is the threshold).&lt;br /&gt;
        *  This pull request will bring the total coverage in the repository to 29.0% (-21.9% change).&lt;br /&gt;
*  travis-ci&lt;br /&gt;
        * Your changes look good to me! tada&lt;br /&gt;
        * The Travis CI build passed&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
In additions to above files, we have edited the following files as well as they were dependency on those.&lt;br /&gt;
&lt;br /&gt;
* '''ta.rb'''&lt;br /&gt;
&lt;br /&gt;
[[File:ta.png]]&lt;br /&gt;
&lt;br /&gt;
* '''response.html.erb'''&lt;br /&gt;
&lt;br /&gt;
[[File:response.png]]&lt;br /&gt;
&lt;br /&gt;
* '''spec/models/scale_spec.rb'''&lt;br /&gt;
&lt;br /&gt;
[[File:scale_spec.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122840</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122840"/>
		<updated>2019-04-01T19:23:11Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are not in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. Set up CodeClimate locally on our systems by using the following guide.&lt;br /&gt;
&lt;br /&gt;
     https://docs.google.com/document/d/1ZmYdjJ4CeXyBc8-7EFslmCzHw8FF6hsSg3EjL0Vlr8w/edit&lt;br /&gt;
&lt;br /&gt;
2. Use &amp;quot;analyze&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
We have used &amp;quot;analyze&amp;quot; command of Code Climate to find out the code smells.&lt;br /&gt;
&lt;br /&gt;
Analyze command lets you pass file paths as arguments to the codeclimate and also lets you specify engine options with -e or --engine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;codeclimate analyze -e rubocop &amp;lt;file_Name&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. We have also used Rubocop documentation for resolving issues. &lt;br /&gt;
&lt;br /&gt;
RuboCop is a Ruby static code analyzer (a.k.a. linter) and code formatter. &lt;br /&gt;
&lt;br /&gt;
It enforces the guidelines outlined in the community Ruby Style Guide for its best practices.&lt;br /&gt;
&lt;br /&gt;
4. Issue related to method names starting with get_ are ignored because it requires refactoring across multiple files in the project, which would in turn break existing functionalities.&lt;br /&gt;
&lt;br /&gt;
5. some issues are ignored as they were breaking the rspec tests.&lt;br /&gt;
	e.g.&lt;br /&gt;
		*  mass assignment : It is used to create an instance using multiple parameters&lt;br /&gt;
		*  In some test files instance were created with multiple parameter along with the primary id.&lt;br /&gt;
		*  but in mass assignment primary id is dangerous if allowed in mass assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
* '''mass assignment'''&lt;br /&gt;
 Mass assignment refers to the act of constructing your object with a parameters hash. &lt;br /&gt;
&lt;br /&gt;
We assign multiple values to attributes via a single assignment operator.&lt;br /&gt;
&lt;br /&gt;
It is implemented using attr_accessible method. It takes a list of attributes that will be accessible. All other attributes will be protected. &lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*  '''Active Record Associations : Adding &amp;quot;inverse_of&amp;quot; option.'''&lt;br /&gt;
&lt;br /&gt;
Associated objects do not point to the same in-memory objects by default.&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading. It lets you reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Inverse_Of.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Add dependent property'''&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :nullify&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dependent_Property.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''useless assignment of a variable'''&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot;  or rather do not assign them to any variable, so that it doesn't get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Useless_Assignment.png]]&lt;br /&gt;
&lt;br /&gt;
*  '''Using snake case for method names''' &lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
* '''Use find_by instead of where.first'''&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Nested ternary operators''' &lt;br /&gt;
Ternary operators must not be nested. Rather we should prefer ''' if-else'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Ternary_Operator.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
&lt;br /&gt;
*  162 issues resolved&lt;br /&gt;
*  42 Files changed&lt;br /&gt;
*  215 additions&lt;br /&gt;
*  163 Deletions&lt;br /&gt;
*  Travis CI build passed&lt;br /&gt;
*  No merge conflicts&lt;br /&gt;
* coveralls : &lt;br /&gt;
        *  Coverage increased (+10.1%) to 50.97%.&lt;br /&gt;
*  codeclimate bot&lt;br /&gt;
        * Code Climate has analyzed commit 050fa7d and detected 0 issues on this pull request.&lt;br /&gt;
        * The test coverage on the diff in this pull request is 42.3% (50% is the threshold).&lt;br /&gt;
        *  This pull request will bring the total coverage in the repository to 29.0% (-21.9% change).&lt;br /&gt;
*  travis-ci&lt;br /&gt;
        * Your changes look good to me! tada&lt;br /&gt;
        * The Travis CI build passed&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
In additions to above files, we have edited the following files as well as they were dependency on those.&lt;br /&gt;
&lt;br /&gt;
* ta.rb&lt;br /&gt;
&lt;br /&gt;
[[File:ta.png]]&lt;br /&gt;
&lt;br /&gt;
* response.html.erb&lt;br /&gt;
* spec/models/scale_spec.rb&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122839</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122839"/>
		<updated>2019-04-01T19:22:46Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: /* Files Modified for  this requirement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are not in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. Set up CodeClimate locally on our systems by using the following guide.&lt;br /&gt;
&lt;br /&gt;
     https://docs.google.com/document/d/1ZmYdjJ4CeXyBc8-7EFslmCzHw8FF6hsSg3EjL0Vlr8w/edit&lt;br /&gt;
&lt;br /&gt;
2. Use &amp;quot;analyze&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
We have used &amp;quot;analyze&amp;quot; command of Code Climate to find out the code smells.&lt;br /&gt;
&lt;br /&gt;
Analyze command lets you pass file paths as arguments to the codeclimate and also lets you specify engine options with -e or --engine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;codeclimate analyze -e rubocop &amp;lt;file_Name&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. We have also used Rubocop documentation for resolving issues. &lt;br /&gt;
&lt;br /&gt;
RuboCop is a Ruby static code analyzer (a.k.a. linter) and code formatter. &lt;br /&gt;
&lt;br /&gt;
It enforces the guidelines outlined in the community Ruby Style Guide for its best practices.&lt;br /&gt;
&lt;br /&gt;
4. Issue related to method names starting with get_ are ignored because it requires refactoring across multiple files in the project, which would in turn break existing functionalities.&lt;br /&gt;
&lt;br /&gt;
5. some issues are ignored as they were breaking the rspec tests.&lt;br /&gt;
	e.g.&lt;br /&gt;
		*  mass assignment : It is used to create an instance using multiple parameters&lt;br /&gt;
		*  In some test files instance were created with multiple parameter along with the primary id.&lt;br /&gt;
		*  but in mass assignment primary id is dangerous if allowed in mass assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
* '''mass assignment'''&lt;br /&gt;
 Mass assignment refers to the act of constructing your object with a parameters hash. &lt;br /&gt;
&lt;br /&gt;
We assign multiple values to attributes via a single assignment operator.&lt;br /&gt;
&lt;br /&gt;
It is implemented using attr_accessible method. It takes a list of attributes that will be accessible. All other attributes will be protected. &lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*  '''Active Record Associations : Adding &amp;quot;inverse_of&amp;quot; option.'''&lt;br /&gt;
&lt;br /&gt;
Associated objects do not point to the same in-memory objects by default.&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading. It lets you reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Inverse_Of.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Add dependent property'''&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :nullify&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dependent_Property.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''useless assignment of a variable'''&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot;  or rather do not assign them to any variable, so that it doesn't get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Useless_Assignment.png]]&lt;br /&gt;
&lt;br /&gt;
*  '''Using snake case for method names''' &lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
* '''Use find_by instead of where.first'''&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Nested ternary operators''' &lt;br /&gt;
Ternary operators must not be nested. Rather we should prefer ''' if-else'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Ternary_Operator.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
&lt;br /&gt;
*  162 issues resolved&lt;br /&gt;
*  42 Files changed&lt;br /&gt;
*  215 additions&lt;br /&gt;
*  163 Deletions&lt;br /&gt;
*  Travis CI build passed&lt;br /&gt;
*  No merge conflicts&lt;br /&gt;
* coveralls : &lt;br /&gt;
        *  Coverage increased (+10.1%) to 50.97%.&lt;br /&gt;
*  codeclimate bot&lt;br /&gt;
        * Code Climate has analyzed commit 050fa7d and detected 0 issues on this pull request.&lt;br /&gt;
        * The test coverage on the diff in this pull request is 42.3% (50% is the threshold).&lt;br /&gt;
        *  This pull request will bring the total coverage in the repository to 29.0% (-21.9% change).&lt;br /&gt;
*  travis-ci&lt;br /&gt;
        * Your changes look good to me! tada&lt;br /&gt;
        * The Travis CI build passed&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
In additions to above files, we have edited the following files as well as they were dependency on those.&lt;br /&gt;
&lt;br /&gt;
* ta.rb&lt;br /&gt;
&lt;br /&gt;
[[filename:ta.png]]&lt;br /&gt;
&lt;br /&gt;
* response.html.erb&lt;br /&gt;
* spec/models/scale_spec.rb&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Response.png&amp;diff=122838</id>
		<title>File:Response.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Response.png&amp;diff=122838"/>
		<updated>2019-04-01T19:22:13Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Scale_spec.png&amp;diff=122837</id>
		<title>File:Scale spec.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Scale_spec.png&amp;diff=122837"/>
		<updated>2019-04-01T19:21:58Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: uploaded a new version of &amp;amp;quot;File:Scale spec.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Scale_spec.png&amp;diff=122836</id>
		<title>File:Scale spec.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Scale_spec.png&amp;diff=122836"/>
		<updated>2019-04-01T19:21:39Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Ta.png&amp;diff=122835</id>
		<title>File:Ta.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Ta.png&amp;diff=122835"/>
		<updated>2019-04-01T19:21:22Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: uploaded a new version of &amp;amp;quot;File:Ta.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122834</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122834"/>
		<updated>2019-04-01T19:16:15Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: /* Results */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are not in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. Set up CodeClimate locally on our systems by using the following guide.&lt;br /&gt;
&lt;br /&gt;
     https://docs.google.com/document/d/1ZmYdjJ4CeXyBc8-7EFslmCzHw8FF6hsSg3EjL0Vlr8w/edit&lt;br /&gt;
&lt;br /&gt;
2. Use &amp;quot;analyze&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
We have used &amp;quot;analyze&amp;quot; command of Code Climate to find out the code smells.&lt;br /&gt;
&lt;br /&gt;
Analyze command lets you pass file paths as arguments to the codeclimate and also lets you specify engine options with -e or --engine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;codeclimate analyze -e rubocop &amp;lt;file_Name&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. We have also used Rubocop documentation for resolving issues. &lt;br /&gt;
&lt;br /&gt;
RuboCop is a Ruby static code analyzer (a.k.a. linter) and code formatter. &lt;br /&gt;
&lt;br /&gt;
It enforces the guidelines outlined in the community Ruby Style Guide for its best practices.&lt;br /&gt;
&lt;br /&gt;
4. Issue related to method names starting with get_ are ignored because it requires refactoring across multiple files in the project, which would in turn break existing functionalities.&lt;br /&gt;
&lt;br /&gt;
5. some issues are ignored as they were breaking the rspec tests.&lt;br /&gt;
	e.g.&lt;br /&gt;
		*  mass assignment : It is used to create an instance using multiple parameters&lt;br /&gt;
		*  In some test files instance were created with multiple parameter along with the primary id.&lt;br /&gt;
		*  but in mass assignment primary id is dangerous if allowed in mass assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
* '''mass assignment'''&lt;br /&gt;
 Mass assignment refers to the act of constructing your object with a parameters hash. &lt;br /&gt;
&lt;br /&gt;
We assign multiple values to attributes via a single assignment operator.&lt;br /&gt;
&lt;br /&gt;
It is implemented using attr_accessible method. It takes a list of attributes that will be accessible. All other attributes will be protected. &lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*  '''Active Record Associations : Adding &amp;quot;inverse_of&amp;quot; option.'''&lt;br /&gt;
&lt;br /&gt;
Associated objects do not point to the same in-memory objects by default.&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading. It lets you reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Inverse_Of.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Add dependent property'''&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :nullify&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dependent_Property.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''useless assignment of a variable'''&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot;  or rather do not assign them to any variable, so that it doesn't get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Useless_Assignment.png]]&lt;br /&gt;
&lt;br /&gt;
*  '''Using snake case for method names''' &lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
* '''Use find_by instead of where.first'''&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Nested ternary operators''' &lt;br /&gt;
Ternary operators must not be nested. Rather we should prefer ''' if-else'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Ternary_Operator.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
&lt;br /&gt;
*  162 issues resolved&lt;br /&gt;
*  42 Files changed&lt;br /&gt;
*  215 additions&lt;br /&gt;
*  163 Deletions&lt;br /&gt;
*  Travis CI build passed&lt;br /&gt;
*  No merge conflicts&lt;br /&gt;
* coveralls : &lt;br /&gt;
        *  Coverage increased (+10.1%) to 50.97%.&lt;br /&gt;
*  codeclimate bot&lt;br /&gt;
        * Code Climate has analyzed commit 050fa7d and detected 0 issues on this pull request.&lt;br /&gt;
        * The test coverage on the diff in this pull request is 42.3% (50% is the threshold).&lt;br /&gt;
        *  This pull request will bring the total coverage in the repository to 29.0% (-21.9% change).&lt;br /&gt;
*  travis-ci&lt;br /&gt;
        * Your changes look good to me! tada&lt;br /&gt;
        * The Travis CI build passed&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122833</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122833"/>
		<updated>2019-04-01T19:15:39Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: /* Results */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are not in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. Set up CodeClimate locally on our systems by using the following guide.&lt;br /&gt;
&lt;br /&gt;
     https://docs.google.com/document/d/1ZmYdjJ4CeXyBc8-7EFslmCzHw8FF6hsSg3EjL0Vlr8w/edit&lt;br /&gt;
&lt;br /&gt;
2. Use &amp;quot;analyze&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
We have used &amp;quot;analyze&amp;quot; command of Code Climate to find out the code smells.&lt;br /&gt;
&lt;br /&gt;
Analyze command lets you pass file paths as arguments to the codeclimate and also lets you specify engine options with -e or --engine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;codeclimate analyze -e rubocop &amp;lt;file_Name&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. We have also used Rubocop documentation for resolving issues. &lt;br /&gt;
&lt;br /&gt;
RuboCop is a Ruby static code analyzer (a.k.a. linter) and code formatter. &lt;br /&gt;
&lt;br /&gt;
It enforces the guidelines outlined in the community Ruby Style Guide for its best practices.&lt;br /&gt;
&lt;br /&gt;
4. Issue related to method names starting with get_ are ignored because it requires refactoring across multiple files in the project, which would in turn break existing functionalities.&lt;br /&gt;
&lt;br /&gt;
5. some issues are ignored as they were breaking the rspec tests.&lt;br /&gt;
	e.g.&lt;br /&gt;
		*  mass assignment : It is used to create an instance using multiple parameters&lt;br /&gt;
		*  In some test files instance were created with multiple parameter along with the primary id.&lt;br /&gt;
		*  but in mass assignment primary id is dangerous if allowed in mass assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
* '''mass assignment'''&lt;br /&gt;
 Mass assignment refers to the act of constructing your object with a parameters hash. &lt;br /&gt;
&lt;br /&gt;
We assign multiple values to attributes via a single assignment operator.&lt;br /&gt;
&lt;br /&gt;
It is implemented using attr_accessible method. It takes a list of attributes that will be accessible. All other attributes will be protected. &lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*  '''Active Record Associations : Adding &amp;quot;inverse_of&amp;quot; option.'''&lt;br /&gt;
&lt;br /&gt;
Associated objects do not point to the same in-memory objects by default.&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading. It lets you reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Inverse_Of.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Add dependent property'''&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :nullify&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dependent_Property.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''useless assignment of a variable'''&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot;  or rather do not assign them to any variable, so that it doesn't get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Useless_Assignment.png]]&lt;br /&gt;
&lt;br /&gt;
*  '''Using snake case for method names''' &lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
* '''Use find_by instead of where.first'''&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Nested ternary operators''' &lt;br /&gt;
Ternary operators must not be nested. Rather we should prefer ''' if-else'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Ternary_Operator.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
&lt;br /&gt;
*  162 issues resolved&lt;br /&gt;
*  42 Files changed&lt;br /&gt;
*  215 additions&lt;br /&gt;
*  163 Deletions&lt;br /&gt;
*  Travis CI build passed&lt;br /&gt;
*  No merge conflicts&lt;br /&gt;
* coveralls : &lt;br /&gt;
        *  Coverage increased (+10.1%) to 50.97%.&lt;br /&gt;
*  codeclimate bot&lt;br /&gt;
        * Code Climate has analyzed commit 050fa7d and detected 0 issues on this pull request.&lt;br /&gt;
        * The test coverage on the diff in this pull request is 42.3% (50% is the threshold).&lt;br /&gt;
        *  This pull request will bring the total coverage in the repository to 29.0% (-21.9% change).&lt;br /&gt;
*  travis-ci&lt;br /&gt;
	*  Your changes look good to me! tada&lt;br /&gt;
	*  The Travis CI build passed&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122832</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122832"/>
		<updated>2019-04-01T19:13:06Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: /* Results */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are not in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. Set up CodeClimate locally on our systems by using the following guide.&lt;br /&gt;
&lt;br /&gt;
     https://docs.google.com/document/d/1ZmYdjJ4CeXyBc8-7EFslmCzHw8FF6hsSg3EjL0Vlr8w/edit&lt;br /&gt;
&lt;br /&gt;
2. Use &amp;quot;analyze&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
We have used &amp;quot;analyze&amp;quot; command of Code Climate to find out the code smells.&lt;br /&gt;
&lt;br /&gt;
Analyze command lets you pass file paths as arguments to the codeclimate and also lets you specify engine options with -e or --engine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;codeclimate analyze -e rubocop &amp;lt;file_Name&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. We have also used Rubocop documentation for resolving issues. &lt;br /&gt;
&lt;br /&gt;
RuboCop is a Ruby static code analyzer (a.k.a. linter) and code formatter. &lt;br /&gt;
&lt;br /&gt;
It enforces the guidelines outlined in the community Ruby Style Guide for its best practices.&lt;br /&gt;
&lt;br /&gt;
4. Issue related to method names starting with get_ are ignored because it requires refactoring across multiple files in the project, which would in turn break existing functionalities.&lt;br /&gt;
&lt;br /&gt;
5. some issues are ignored as they were breaking the rspec tests.&lt;br /&gt;
	e.g.&lt;br /&gt;
		*  mass assignment : It is used to create an instance using multiple parameters&lt;br /&gt;
		*  In some test files instance were created with multiple parameter along with the primary id.&lt;br /&gt;
		*  but in mass assignment primary id is dangerous if allowed in mass assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
* '''mass assignment'''&lt;br /&gt;
 Mass assignment refers to the act of constructing your object with a parameters hash. &lt;br /&gt;
&lt;br /&gt;
We assign multiple values to attributes via a single assignment operator.&lt;br /&gt;
&lt;br /&gt;
It is implemented using attr_accessible method. It takes a list of attributes that will be accessible. All other attributes will be protected. &lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*  '''Active Record Associations : Adding &amp;quot;inverse_of&amp;quot; option.'''&lt;br /&gt;
&lt;br /&gt;
Associated objects do not point to the same in-memory objects by default.&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading. It lets you reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Inverse_Of.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Add dependent property'''&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :nullify&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dependent_Property.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''useless assignment of a variable'''&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot;  or rather do not assign them to any variable, so that it doesn't get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Useless_Assignment.png]]&lt;br /&gt;
&lt;br /&gt;
*  '''Using snake case for method names''' &lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
* '''Use find_by instead of where.first'''&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Nested ternary operators''' &lt;br /&gt;
Ternary operators must not be nested. Rather we should prefer ''' if-else'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Ternary_Operator.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
&lt;br /&gt;
*  162 issues resolved&lt;br /&gt;
*  42 Files changed&lt;br /&gt;
*  215 additions&lt;br /&gt;
*  163 Deletions&lt;br /&gt;
*  Travis CI build passed&lt;br /&gt;
*  No merge conflicts&lt;br /&gt;
* coveralls : &lt;br /&gt;
        *  Coverage increased (+10.1%) to 50.97%.&lt;br /&gt;
*  codeclimate bot&lt;br /&gt;
	*  Code Climate has analyzed commit 050fa7d and detected 0 issues on this pull request.&lt;br /&gt;
	*  The test coverage on the diff in this pull request is 42.3% (50% is the threshold).&lt;br /&gt;
	*  This pull request will bring the total coverage in the repository to 29.0% (-21.9% change).&lt;br /&gt;
*  travis-ci&lt;br /&gt;
	*  Your changes look good to me! tada&lt;br /&gt;
	*  The Travis CI build passed&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122831</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122831"/>
		<updated>2019-04-01T19:12:17Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are not in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. Set up CodeClimate locally on our systems by using the following guide.&lt;br /&gt;
&lt;br /&gt;
     https://docs.google.com/document/d/1ZmYdjJ4CeXyBc8-7EFslmCzHw8FF6hsSg3EjL0Vlr8w/edit&lt;br /&gt;
&lt;br /&gt;
2. Use &amp;quot;analyze&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
We have used &amp;quot;analyze&amp;quot; command of Code Climate to find out the code smells.&lt;br /&gt;
&lt;br /&gt;
Analyze command lets you pass file paths as arguments to the codeclimate and also lets you specify engine options with -e or --engine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;codeclimate analyze -e rubocop &amp;lt;file_Name&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. We have also used Rubocop documentation for resolving issues. &lt;br /&gt;
&lt;br /&gt;
RuboCop is a Ruby static code analyzer (a.k.a. linter) and code formatter. &lt;br /&gt;
&lt;br /&gt;
It enforces the guidelines outlined in the community Ruby Style Guide for its best practices.&lt;br /&gt;
&lt;br /&gt;
4. Issue related to method names starting with get_ are ignored because it requires refactoring across multiple files in the project, which would in turn break existing functionalities.&lt;br /&gt;
&lt;br /&gt;
5. some issues are ignored as they were breaking the rspec tests.&lt;br /&gt;
	e.g.&lt;br /&gt;
		*  mass assignment : It is used to create an instance using multiple parameters&lt;br /&gt;
		*  In some test files instance were created with multiple parameter along with the primary id.&lt;br /&gt;
		*  but in mass assignment primary id is dangerous if allowed in mass assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
* '''mass assignment'''&lt;br /&gt;
 Mass assignment refers to the act of constructing your object with a parameters hash. &lt;br /&gt;
&lt;br /&gt;
We assign multiple values to attributes via a single assignment operator.&lt;br /&gt;
&lt;br /&gt;
It is implemented using attr_accessible method. It takes a list of attributes that will be accessible. All other attributes will be protected. &lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*  '''Active Record Associations : Adding &amp;quot;inverse_of&amp;quot; option.'''&lt;br /&gt;
&lt;br /&gt;
Associated objects do not point to the same in-memory objects by default.&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading. It lets you reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Inverse_Of.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Add dependent property'''&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :nullify&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dependent_Property.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''useless assignment of a variable'''&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot;  or rather do not assign them to any variable, so that it doesn't get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Useless_Assignment.png]]&lt;br /&gt;
&lt;br /&gt;
*  '''Using snake case for method names''' &lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
* '''Use find_by instead of where.first'''&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Nested ternary operators''' &lt;br /&gt;
Ternary operators must not be nested. Rather we should prefer ''' if-else'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Ternary_Operator.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
&lt;br /&gt;
*  162 issues resolved&lt;br /&gt;
*  42 Files changed&lt;br /&gt;
*  215 additions&lt;br /&gt;
*  163 Deletions&lt;br /&gt;
*  Travis CI build passed&lt;br /&gt;
*  No merge conflicts&lt;br /&gt;
* coveralls&lt;br /&gt;
	Coverage increased (+10.1%) to 50.97%.&lt;br /&gt;
*  codeclimate bot&lt;br /&gt;
	Code Climate has analyzed commit 050fa7d and detected 0 issues on this pull request.&lt;br /&gt;
	The test coverage on the diff in this pull request is 42.3% (50% is the threshold).&lt;br /&gt;
	This pull request will bring the total coverage in the repository to 29.0% (-21.9% change).&lt;br /&gt;
*  travis-ci&lt;br /&gt;
	Your changes look good to me! tada&lt;br /&gt;
	The Travis CI build passed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122830</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122830"/>
		<updated>2019-04-01T19:11:30Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are not in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. Set up CodeClimate locally on our systems by using the following guide.&lt;br /&gt;
&lt;br /&gt;
     https://docs.google.com/document/d/1ZmYdjJ4CeXyBc8-7EFslmCzHw8FF6hsSg3EjL0Vlr8w/edit&lt;br /&gt;
&lt;br /&gt;
2. Use &amp;quot;analyze&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
We have used &amp;quot;analyze&amp;quot; command of Code Climate to find out the code smells.&lt;br /&gt;
&lt;br /&gt;
Analyze command lets you pass file paths as arguments to the codeclimate and also lets you specify engine options with -e or --engine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;codeclimate analyze -e rubocop &amp;lt;file_Name&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. We have also used Rubocop documentation for resolving issues. &lt;br /&gt;
&lt;br /&gt;
RuboCop is a Ruby static code analyzer (a.k.a. linter) and code formatter. &lt;br /&gt;
&lt;br /&gt;
It enforces the guidelines outlined in the community Ruby Style Guide for its best practices.&lt;br /&gt;
&lt;br /&gt;
4. Issue related to method names starting with get_ are ignored because it requires refactoring across multiple files in the project, which would in turn break existing functionalities.&lt;br /&gt;
&lt;br /&gt;
5. some issues are ignored as they were breaking the rspec tests.&lt;br /&gt;
	e.g.&lt;br /&gt;
		*  mass assignment : It is used to create an instance using multiple parameters&lt;br /&gt;
		*  In some test files instance were created with multiple parameter along with the primary id.&lt;br /&gt;
		*  but in mass assignment primary id is dangerous if allowed in mass assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
* '''mass assignment'''&lt;br /&gt;
 Mass assignment refers to the act of constructing your object with a parameters hash. &lt;br /&gt;
&lt;br /&gt;
We assign multiple values to attributes via a single assignment operator.&lt;br /&gt;
&lt;br /&gt;
It is implemented using attr_accessible method. It takes a list of attributes that will be accessible. All other attributes will be protected. &lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*  '''Active Record Associations : Adding &amp;quot;inverse_of&amp;quot; option.'''&lt;br /&gt;
&lt;br /&gt;
Associated objects do not point to the same in-memory objects by default.&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading. It lets you reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Inverse_Of.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Add dependent property'''&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :nullify&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dependent_Property.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''useless assignment of a variable'''&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot;  or rather do not assign them to any variable, so that it doesn't get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Useless_Assignment.png]]&lt;br /&gt;
&lt;br /&gt;
*  '''Using snake case for method names''' &lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
* '''Use find_by instead of where.first'''&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Nested ternary operators''' &lt;br /&gt;
Ternary operators must not be nested. Rather we should prefer ''' if-else'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Ternary_Operator.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
&lt;br /&gt;
- 162 issues resolved&lt;br /&gt;
- 42 Files changed&lt;br /&gt;
- 215 additions&lt;br /&gt;
- 163 Deletions&lt;br /&gt;
- Travis CI build passed&lt;br /&gt;
- No merge conflicts&lt;br /&gt;
- coveralls&lt;br /&gt;
	Coverage increased (+10.1%) to 50.97%.&lt;br /&gt;
- codeclimate bot&lt;br /&gt;
	Code Climate has analyzed commit 050fa7d and detected 0 issues on this pull request.&lt;br /&gt;
	The test coverage on the diff in this pull request is 42.3% (50% is the threshold).&lt;br /&gt;
	This pull request will bring the total coverage in the repository to 29.0% (-21.9% change).&lt;br /&gt;
- travis-ci&lt;br /&gt;
	Your changes look good to me! tada&lt;br /&gt;
	The Travis CI build passed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122829</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122829"/>
		<updated>2019-04-01T19:06:57Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are not in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. Set up CodeClimate locally on our systems by using the following guide.&lt;br /&gt;
&lt;br /&gt;
     https://docs.google.com/document/d/1ZmYdjJ4CeXyBc8-7EFslmCzHw8FF6hsSg3EjL0Vlr8w/edit&lt;br /&gt;
&lt;br /&gt;
2. Use &amp;quot;analyze&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
We have used &amp;quot;analyze&amp;quot; command of Code Climate to find out the code smells.&lt;br /&gt;
&lt;br /&gt;
Analyze command lets you pass file paths as arguments to the codeclimate and also lets you specify engine options with -e or --engine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;codeclimate analyze -e rubocop &amp;lt;file_Name&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. We have also used Rubocop documentation for resolving issues. &lt;br /&gt;
&lt;br /&gt;
RuboCop is a Ruby static code analyzer (a.k.a. linter) and code formatter. &lt;br /&gt;
&lt;br /&gt;
It enforces the guidelines outlined in the community Ruby Style Guide for its best practices.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
* '''mass assignment'''&lt;br /&gt;
 Mass assignment refers to the act of constructing your object with a parameters hash. &lt;br /&gt;
&lt;br /&gt;
We assign multiple values to attributes via a single assignment operator.&lt;br /&gt;
&lt;br /&gt;
It is implemented using attr_accessible method. It takes a list of attributes that will be accessible. All other attributes will be protected. &lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*  '''Active Record Associations : Adding &amp;quot;inverse_of&amp;quot; option.'''&lt;br /&gt;
&lt;br /&gt;
Associated objects do not point to the same in-memory objects by default.&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading. It lets you reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Inverse_Of.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Add dependent property'''&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :nullify&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dependent_Property.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''useless assignment of a variable'''&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot;  or rather do not assign them to any variable, so that it doesn't get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Useless_Assignment.png]]&lt;br /&gt;
&lt;br /&gt;
*  '''Using snake case for method names''' &lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
* '''Use find_by instead of where.first'''&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Nested ternary operators''' &lt;br /&gt;
Ternary operators must not be nested. Rather we should prefer ''' if-else'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Ternary_Operator.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122828</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122828"/>
		<updated>2019-04-01T19:06:14Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are not in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. Set up CodeClimate locally on our systems by using the following guide.&lt;br /&gt;
&lt;br /&gt;
     https://docs.google.com/document/d/1ZmYdjJ4CeXyBc8-7EFslmCzHw8FF6hsSg3EjL0Vlr8w/edit&lt;br /&gt;
&lt;br /&gt;
2. Use &amp;quot;analyze&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
We have used &amp;quot;analyze&amp;quot; command of Code Climate to find out the code smells.&lt;br /&gt;
&lt;br /&gt;
Analyze command lets you pass file paths as arguments to the codeclimate and also lets you specify engine options with -e or --engine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;codeclimate analyze -e rubocop &amp;lt;file_Name&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. We have also used Rubocop documentation for resolving issues. &lt;br /&gt;
&lt;br /&gt;
RuboCop is a Ruby static code analyzer (a.k.a. linter) and code formatter. &lt;br /&gt;
&lt;br /&gt;
It enforces the guidelines outlined in the community Ruby Style Guide for its best practices.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
* '''mass assignment'''&lt;br /&gt;
 Mass assignment refers to the act of constructing your object with a parameters hash. &lt;br /&gt;
&lt;br /&gt;
We assign multiple values to attributes via a single assignment operator.&lt;br /&gt;
&lt;br /&gt;
It is implemented using attr_accessible method. It takes a list of attributes that will be accessible. All other attributes will be protected. &lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*  '''Active Record Associations : Adding &amp;quot;inverse_of&amp;quot; option.'''&lt;br /&gt;
&lt;br /&gt;
Associated objects do not point to the same in-memory objects by default.&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading. It lets you reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Inverse_Of.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Add dependent property'''&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :nullify&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dependent_Property.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''useless assignment of a variable'''&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot;  or rather do not assign them to any variable, so that it doesn't get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Useless_Assignment.png]]&lt;br /&gt;
&lt;br /&gt;
*  '''Using snake case for method names''' &lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
* Use find_by instead of where.first&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Nested ternary operators &lt;br /&gt;
Ternary operators must not be nested. Rather we should prefer ''' if-else'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Ternary_Operator.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Ternary_Operator.png&amp;diff=122827</id>
		<title>File:Ternary Operator.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Ternary_Operator.png&amp;diff=122827"/>
		<updated>2019-04-01T19:05:17Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122826</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122826"/>
		<updated>2019-04-01T18:58:20Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are not in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. Set up CodeClimate locally on our systems by using the following guide.&lt;br /&gt;
&lt;br /&gt;
     https://docs.google.com/document/d/1ZmYdjJ4CeXyBc8-7EFslmCzHw8FF6hsSg3EjL0Vlr8w/edit&lt;br /&gt;
&lt;br /&gt;
2. Use &amp;quot;analyze&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
We have used &amp;quot;analyze&amp;quot; command of Code Climate to find out the code smells.&lt;br /&gt;
&lt;br /&gt;
Analyze command lets you pass file paths as arguments to the codeclimate and also lets you specify engine options with -e or --engine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;codeclimate analyze -e rubocop &amp;lt;file_Name&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. We have also used Rubocop documentation for resolving issues. &lt;br /&gt;
&lt;br /&gt;
RuboCop is a Ruby static code analyzer (a.k.a. linter) and code formatter. &lt;br /&gt;
&lt;br /&gt;
It enforces the guidelines outlined in the community Ruby Style Guide for its best practices.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
* '''mass assignment'''&lt;br /&gt;
 Mass assignment refers to the act of constructing your object with a parameters hash. &lt;br /&gt;
&lt;br /&gt;
We assign multiple values to attributes via a single assignment operator.&lt;br /&gt;
&lt;br /&gt;
It is implemented using attr_accessible method. It takes a list of attributes that will be accessible. All other attributes will be protected. &lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*  '''Active Record Associations : Adding &amp;quot;inverse_of&amp;quot; option.'''&lt;br /&gt;
&lt;br /&gt;
Associated objects do not point to the same in-memory objects by default.&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading. It lets you reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Inverse_Of.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Add dependent property'''&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :nullify&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dependent_Property.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''useless assignment of a variable'''&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot;  or rather do not assign them to any variable, so that it doesn't get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Useless_Assignment.png]]&lt;br /&gt;
&lt;br /&gt;
=== Using snake case for method names ===&lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
===Use find_by instead of where.first===&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Useless_Assignment.png&amp;diff=122825</id>
		<title>File:Useless Assignment.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Useless_Assignment.png&amp;diff=122825"/>
		<updated>2019-04-01T18:57:36Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: uploaded a new version of &amp;amp;quot;File:Useless Assignment.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122824</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122824"/>
		<updated>2019-04-01T18:57:24Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are not in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. Set up CodeClimate locally on our systems by using the following guide.&lt;br /&gt;
&lt;br /&gt;
     https://docs.google.com/document/d/1ZmYdjJ4CeXyBc8-7EFslmCzHw8FF6hsSg3EjL0Vlr8w/edit&lt;br /&gt;
&lt;br /&gt;
2. Use &amp;quot;analyze&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
We have used &amp;quot;analyze&amp;quot; command of Code Climate to find out the code smells.&lt;br /&gt;
&lt;br /&gt;
Analyze command lets you pass file paths as arguments to the codeclimate and also lets you specify engine options with -e or --engine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;codeclimate analyze -e rubocop &amp;lt;file_Name&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. We have also used Rubocop documentation for resolving issues. &lt;br /&gt;
&lt;br /&gt;
RuboCop is a Ruby static code analyzer (a.k.a. linter) and code formatter. &lt;br /&gt;
&lt;br /&gt;
It enforces the guidelines outlined in the community Ruby Style Guide for its best practices.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
* '''mass assignment'''&lt;br /&gt;
 Mass assignment refers to the act of constructing your object with a parameters hash. &lt;br /&gt;
&lt;br /&gt;
We assign multiple values to attributes via a single assignment operator.&lt;br /&gt;
&lt;br /&gt;
It is implemented using attr_accessible method. It takes a list of attributes that will be accessible. All other attributes will be protected. &lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*  '''Active Record Associations : Adding &amp;quot;inverse_of&amp;quot; option.'''&lt;br /&gt;
&lt;br /&gt;
Associated objects do not point to the same in-memory objects by default.&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading. It lets you reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Inverse_Of.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Add dependent property'''&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :nullify&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dependent_Property.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''useless assignment of a variable'''&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:UselessAssignment.png]]&lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot;  or rather do not assign them to any variable, so that it doesn't get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Using snake case for method names ===&lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
===Use find_by instead of where.first===&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122823</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122823"/>
		<updated>2019-04-01T18:53:57Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are not in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. Set up CodeClimate locally on our systems by using the following guide.&lt;br /&gt;
&lt;br /&gt;
     https://docs.google.com/document/d/1ZmYdjJ4CeXyBc8-7EFslmCzHw8FF6hsSg3EjL0Vlr8w/edit&lt;br /&gt;
&lt;br /&gt;
2. Use &amp;quot;analyze&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
We have used &amp;quot;analyze&amp;quot; command of Code Climate to find out the code smells.&lt;br /&gt;
&lt;br /&gt;
Analyze command lets you pass file paths as arguments to the codeclimate and also lets you specify engine options with -e or --engine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;codeclimate analyze -e rubocop &amp;lt;file_Name&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. We have also used Rubocop documentation for resolving issues. &lt;br /&gt;
&lt;br /&gt;
RuboCop is a Ruby static code analyzer (a.k.a. linter) and code formatter. &lt;br /&gt;
&lt;br /&gt;
It enforces the guidelines outlined in the community Ruby Style Guide for its best practices.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
* '''mass assignment'''&lt;br /&gt;
 Mass assignment refers to the act of constructing your object with a parameters hash. &lt;br /&gt;
&lt;br /&gt;
We assign multiple values to attributes via a single assignment operator.&lt;br /&gt;
&lt;br /&gt;
It is implemented using attr_accessible method. It takes a list of attributes that will be accessible. All other attributes will be protected. &lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*  '''Active Record Associations : Adding &amp;quot;inverse_of&amp;quot; option.'''&lt;br /&gt;
&lt;br /&gt;
Associated objects do not point to the same in-memory objects by default.&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading. It lets you reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Inverse_Of.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Add dependent property'''&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :nullify&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dependent_Property.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===useless assignment of a variable===&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:UselessAssignment.png]]&lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot; so that it doesnt get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError =&amp;gt; _&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using snake case for method names ===&lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
===Use find_by instead of where.first===&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122822</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122822"/>
		<updated>2019-04-01T18:53:17Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are not in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. Set up CodeClimate locally on our systems by using the following guide.&lt;br /&gt;
&lt;br /&gt;
     https://docs.google.com/document/d/1ZmYdjJ4CeXyBc8-7EFslmCzHw8FF6hsSg3EjL0Vlr8w/edit&lt;br /&gt;
&lt;br /&gt;
2. Use &amp;quot;analyze&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
We have used &amp;quot;analyze&amp;quot; command of Code Climate to find out the code smells.&lt;br /&gt;
&lt;br /&gt;
Analyze command lets you pass file paths as arguments to the codeclimate and also lets you specify engine options with -e or --engine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;codeclimate analyze -e rubocop &amp;lt;file_Name&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. We have also used Rubocop documentation for resolving issues. &lt;br /&gt;
&lt;br /&gt;
RuboCop is a Ruby static code analyzer (a.k.a. linter) and code formatter. &lt;br /&gt;
&lt;br /&gt;
It enforces the guidelines outlined in the community Ruby Style Guide for its best practices.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
* '''mass assignment'''&lt;br /&gt;
 Mass assignment refers to the act of constructing your object with a parameters hash. &lt;br /&gt;
&lt;br /&gt;
We assign multiple values to attributes via a single assignment operator.&lt;br /&gt;
&lt;br /&gt;
It is implemented using attr_accessible method. It takes a list of attributes that will be accessible. All other attributes will be protected. &lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*  '''Active Record Associations : Adding &amp;quot;inverse_of&amp;quot; option.'''&lt;br /&gt;
&lt;br /&gt;
Associated objects do not point to the same in-memory objects by default.&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading. It lets you reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Inverse_Of.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Add dependent property'''&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dependent_Property.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===useless assignment of a variable===&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:UselessAssignment.png]]&lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot; so that it doesnt get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError =&amp;gt; _&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using snake case for method names ===&lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
===Use find_by instead of where.first===&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Dependent_Property.png&amp;diff=122821</id>
		<title>File:Dependent Property.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Dependent_Property.png&amp;diff=122821"/>
		<updated>2019-04-01T18:52:46Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122820</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122820"/>
		<updated>2019-04-01T18:47:10Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are not in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. Set up CodeClimate locally on our systems by using the following guide.&lt;br /&gt;
&lt;br /&gt;
     https://docs.google.com/document/d/1ZmYdjJ4CeXyBc8-7EFslmCzHw8FF6hsSg3EjL0Vlr8w/edit&lt;br /&gt;
&lt;br /&gt;
2. Use &amp;quot;analyze&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
We have used &amp;quot;analyze&amp;quot; command of Code Climate to find out the code smells.&lt;br /&gt;
&lt;br /&gt;
Analyze command lets you pass file paths as arguments to the codeclimate and also lets you specify engine options with -e or --engine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;codeclimate analyze -e rubocop &amp;lt;file_Name&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. We have also used Rubocop documentation for resolving issues. &lt;br /&gt;
&lt;br /&gt;
RuboCop is a Ruby static code analyzer (a.k.a. linter) and code formatter. &lt;br /&gt;
&lt;br /&gt;
It enforces the guidelines outlined in the community Ruby Style Guide for its best practices.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
* '''mass assignment'''&lt;br /&gt;
 Mass assignment refers to the act of constructing your object with a parameters hash. &lt;br /&gt;
&lt;br /&gt;
We assign multiple values to attributes via a single assignment operator.&lt;br /&gt;
&lt;br /&gt;
It is implemented using attr_accessible method. It takes a list of attributes that will be accessible. All other attributes will be protected. &lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*  '''Active Record Associations : Adding &amp;quot;inverse_of&amp;quot; option.'''&lt;br /&gt;
&lt;br /&gt;
Associated objects do not point to the same in-memory objects by default.&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading. It lets you reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Inverse_Of.png]]&lt;br /&gt;
&lt;br /&gt;
File: Participant.rb &lt;br /&gt;
belongs_to :topic, class_name: 'SignUpTopic'. &lt;br /&gt;
&lt;br /&gt;
In the class 'SignUpTopic', we have &lt;br /&gt;
has_many :teams&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading and will reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
===Add dependent property===&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===useless assignment of a variable===&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:UselessAssignment.png]]&lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot; so that it doesnt get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError =&amp;gt; _&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using snake case for method names ===&lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
===Use find_by instead of where.first===&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Use_Inverse_Of.png&amp;diff=122819</id>
		<title>File:Use Inverse Of.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Use_Inverse_Of.png&amp;diff=122819"/>
		<updated>2019-04-01T18:46:22Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122818</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122818"/>
		<updated>2019-04-01T18:45:58Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are not in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. Set up CodeClimate locally on our systems by using the following guide.&lt;br /&gt;
&lt;br /&gt;
     https://docs.google.com/document/d/1ZmYdjJ4CeXyBc8-7EFslmCzHw8FF6hsSg3EjL0Vlr8w/edit&lt;br /&gt;
&lt;br /&gt;
2. Use &amp;quot;analyze&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
We have used &amp;quot;analyze&amp;quot; command of Code Climate to find out the code smells.&lt;br /&gt;
&lt;br /&gt;
Analyze command lets you pass file paths as arguments to the codeclimate and also lets you specify engine options with -e or --engine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;codeclimate analyze -e rubocop &amp;lt;file_Name&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. We have also used Rubocop documentation for resolving issues. &lt;br /&gt;
&lt;br /&gt;
RuboCop is a Ruby static code analyzer (a.k.a. linter) and code formatter. &lt;br /&gt;
&lt;br /&gt;
It enforces the guidelines outlined in the community Ruby Style Guide for its best practices.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
* '''mass assignment'''&lt;br /&gt;
 Mass assignment refers to the act of constructing your object with a parameters hash. &lt;br /&gt;
&lt;br /&gt;
We assign multiple values to attributes via a single assignment operator.&lt;br /&gt;
&lt;br /&gt;
It is implemented using attr_accessible method. It takes a list of attributes that will be accessible. All other attributes will be protected. &lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_1.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_2.png]]&lt;br /&gt;
&lt;br /&gt;
*  '''Active Record Associations : Adding &amp;quot;inverse_of&amp;quot; option.'''&lt;br /&gt;
&lt;br /&gt;
Associated objects do not point to the same in-memory objects by default.&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading. It lets you reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
File: Participant.rb &lt;br /&gt;
belongs_to :topic, class_name: 'SignUpTopic'. &lt;br /&gt;
&lt;br /&gt;
In the class 'SignUpTopic', we have &lt;br /&gt;
has_many :teams&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading and will reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
===Add dependent property===&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===useless assignment of a variable===&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:UselessAssignment.png]]&lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot; so that it doesnt get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError =&amp;gt; _&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using snake case for method names ===&lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
===Use find_by instead of where.first===&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122810</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122810"/>
		<updated>2019-04-01T18:02:31Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are not in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. Set up CodeClimate locally on our systems by using the following guide.&lt;br /&gt;
&lt;br /&gt;
     https://docs.google.com/document/d/1ZmYdjJ4CeXyBc8-7EFslmCzHw8FF6hsSg3EjL0Vlr8w/edit&lt;br /&gt;
&lt;br /&gt;
2. Use &amp;quot;analyze&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
We have used &amp;quot;analyze&amp;quot; command of Code Climate to find out the code smells.&lt;br /&gt;
&lt;br /&gt;
Analyze command lets you pass file paths as arguments to the codeclimate and also lets you specify engine options with -e or --engine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;codeclimate analyze -e rubocop &amp;lt;file_Name&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. We have also used Rubocop documentation for resolving issues. &lt;br /&gt;
&lt;br /&gt;
RuboCop is a Ruby static code analyzer (a.k.a. linter) and code formatter. &lt;br /&gt;
&lt;br /&gt;
It enforces the guidelines outlined in the community Ruby Style Guide for its best practices.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
* mass assignment&lt;br /&gt;
 Mass assignment refers to the act of constructing your object with a parameters hash. &lt;br /&gt;
&lt;br /&gt;
We assign multiple values to attributes via a single assignment operator.&lt;br /&gt;
&lt;br /&gt;
It is implemented using attr_accessible method. It takes a list of attributes that will be accessible. All other attributes will be protected. &lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_1.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_2.png]]&lt;br /&gt;
&lt;br /&gt;
*  Active Record Associations : Adding &amp;quot;inverse_of&amp;quot; option.&lt;br /&gt;
&lt;br /&gt;
Associated objects do not point to the same in-memory objects by default.&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
&lt;br /&gt;
File: Participant.rb &lt;br /&gt;
belongs_to :topic, class_name: 'SignUpTopic'. &lt;br /&gt;
&lt;br /&gt;
In the class 'SignUpTopic', we have &lt;br /&gt;
has_many :teams&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading and will reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
===Add dependent property===&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===useless assignment of a variable===&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:UselessAssignment.png]]&lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot; so that it doesnt get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError =&amp;gt; _&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using snake case for method names ===&lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
===Use find_by instead of where.first===&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122809</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122809"/>
		<updated>2019-04-01T17:50:12Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are not in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. Set up CodeClimate locally on our systems by using the following guide.&lt;br /&gt;
&lt;br /&gt;
     https://docs.google.com/document/d/1ZmYdjJ4CeXyBc8-7EFslmCzHw8FF6hsSg3EjL0Vlr8w/edit&lt;br /&gt;
&lt;br /&gt;
2. Use &amp;quot;analyze&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
We have used &amp;quot;analyze&amp;quot; command of Code Climate to find out the code smells.&lt;br /&gt;
&lt;br /&gt;
Analyze command lets you pass file paths as arguments to the codeclimate and also lets you specify engine options with -e or --engine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;codeclimate analyze -e rubocop &amp;lt;file_Name&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. We have also used Rubocop documentation for resolving issues. &lt;br /&gt;
&lt;br /&gt;
RuboCop is a Ruby static code analyzer (a.k.a. linter) and code formatter. &lt;br /&gt;
&lt;br /&gt;
It enforces the guidelines outlined in the community Ruby Style Guide for its best practices.&lt;br /&gt;
&lt;br /&gt;
Below are some examples of code smells. &lt;br /&gt;
&lt;br /&gt;
* mass assignment&lt;br /&gt;
 Mass assignment refers to the act of constructing your object with a parameters hash. &lt;br /&gt;
&lt;br /&gt;
We assign multiple values to attributes via a single assignment operator.&lt;br /&gt;
&lt;br /&gt;
It is implemented using attr_accessible method. It takes a list of attributes that will be accessible. All other attributes will be protected. &lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_1.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Mass_Assignment_2.png]]&lt;br /&gt;
&lt;br /&gt;
=== Add inverse_of option===&lt;br /&gt;
&lt;br /&gt;
File: Participant.rb &lt;br /&gt;
belongs_to :topic, class_name: 'SignUpTopic'. &lt;br /&gt;
&lt;br /&gt;
In the class 'SignUpTopic', we have &lt;br /&gt;
has_many :teams&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading and will reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
===Add dependent property===&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===useless assignment of a variable===&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:UselessAssignment.png]]&lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot; so that it doesnt get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError =&amp;gt; _&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using snake case for method names ===&lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
===Use find_by instead of where.first===&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Mass_Assignment_2.png&amp;diff=122808</id>
		<title>File:Mass Assignment 2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Mass_Assignment_2.png&amp;diff=122808"/>
		<updated>2019-04-01T17:48:50Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Mass_Assignment_1.png&amp;diff=122807</id>
		<title>File:Mass Assignment 1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Mass_Assignment_1.png&amp;diff=122807"/>
		<updated>2019-04-01T17:48:35Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122804</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122804"/>
		<updated>2019-04-01T17:24:57Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are not in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. Set up CodeClimate locally on our systems by using the following guide.&lt;br /&gt;
&lt;br /&gt;
     https://docs.google.com/document/d/1ZmYdjJ4CeXyBc8-7EFslmCzHw8FF6hsSg3EjL0Vlr8w/edit&lt;br /&gt;
&lt;br /&gt;
2. Use &amp;quot;analyze&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
We have used &amp;quot;analyze&amp;quot; command of Code Climate to find out the code smells.&lt;br /&gt;
&lt;br /&gt;
Analyze command lets you pass file paths as arguments to the codeclimate and also lets you specify engine options with -e or --engine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;codeclimate analyze -e rubocop &amp;lt;file_Name&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. We have also used Rubocop documentation for resolving issues. &lt;br /&gt;
&lt;br /&gt;
RuboCop is a Ruby static code analyzer (a.k.a. linter) and code formatter. &lt;br /&gt;
&lt;br /&gt;
It enforces the guidelines outlined in the community Ruby Style Guide for its best practices.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Add inverse_of option===&lt;br /&gt;
&lt;br /&gt;
File: Participant.rb &lt;br /&gt;
belongs_to :topic, class_name: 'SignUpTopic'. &lt;br /&gt;
&lt;br /&gt;
In the class 'SignUpTopic', we have &lt;br /&gt;
has_many :teams&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading and will reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
===Add dependent property===&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===useless assignment of a variable===&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:UselessAssignment.png]]&lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot; so that it doesnt get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError =&amp;gt; _&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using snake case for method names ===&lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
===Use find_by instead of where.first===&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122798</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122798"/>
		<updated>2019-04-01T17:13:33Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are not in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. Set up CodeClimate locally on our systems by using the following guide.&lt;br /&gt;
&lt;br /&gt;
https://docs.google.com/document/d/1ZmYdjJ4CeXyBc8-7EFslmCzHw8FF6hsSg3EjL0Vlr8w/edit&lt;br /&gt;
&lt;br /&gt;
=== Add inverse_of option===&lt;br /&gt;
&lt;br /&gt;
File: Participant.rb &lt;br /&gt;
belongs_to :topic, class_name: 'SignUpTopic'. &lt;br /&gt;
&lt;br /&gt;
In the class 'SignUpTopic', we have &lt;br /&gt;
has_many :teams&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading and will reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
===Add dependent property===&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===useless assignment of a variable===&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:UselessAssignment.png]]&lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot; so that it doesnt get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError =&amp;gt; _&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using snake case for method names ===&lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
===Use find_by instead of where.first===&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122797</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122797"/>
		<updated>2019-04-01T17:13:17Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are not in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. Set up CodeClimate locally on our systems by using the following guide.&lt;br /&gt;
https://docs.google.com/document/d/1ZmYdjJ4CeXyBc8-7EFslmCzHw8FF6hsSg3EjL0Vlr8w/edit&lt;br /&gt;
&lt;br /&gt;
=== Add inverse_of option===&lt;br /&gt;
&lt;br /&gt;
File: Participant.rb &lt;br /&gt;
belongs_to :topic, class_name: 'SignUpTopic'. &lt;br /&gt;
&lt;br /&gt;
In the class 'SignUpTopic', we have &lt;br /&gt;
has_many :teams&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading and will reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
===Add dependent property===&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===useless assignment of a variable===&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:UselessAssignment.png]]&lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot; so that it doesnt get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError =&amp;gt; _&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using snake case for method names ===&lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
===Use find_by instead of where.first===&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122796</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122796"/>
		<updated>2019-04-01T17:10:45Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are not in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
=== Add inverse_of option===&lt;br /&gt;
&lt;br /&gt;
File: Participant.rb &lt;br /&gt;
belongs_to :topic, class_name: 'SignUpTopic'. &lt;br /&gt;
&lt;br /&gt;
In the class 'SignUpTopic', we have &lt;br /&gt;
has_many :teams&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading and will reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
===Add dependent property===&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===useless assignment of a variable===&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:UselessAssignment.png]]&lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot; so that it doesnt get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError =&amp;gt; _&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using snake case for method names ===&lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
===Use find_by instead of where.first===&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122795</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122795"/>
		<updated>2019-04-01T17:07:54Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are not in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
=== Add inverse_of option===&lt;br /&gt;
&lt;br /&gt;
File: Participant.rb &lt;br /&gt;
belongs_to :topic, class_name: 'SignUpTopic'. &lt;br /&gt;
&lt;br /&gt;
In the class 'SignUpTopic', we have &lt;br /&gt;
has_many :teams&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading and will reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
===Add dependent property===&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===useless assignment of a variable===&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:UselessAssignment.png]]&lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot; so that it doesnt get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError =&amp;gt; _&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using snake case for method names ===&lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
===Use find_by instead of where.first===&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122794</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122794"/>
		<updated>2019-04-01T17:07:34Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
=== Add inverse_of option===&lt;br /&gt;
&lt;br /&gt;
File: Participant.rb &lt;br /&gt;
belongs_to :topic, class_name: 'SignUpTopic'. &lt;br /&gt;
&lt;br /&gt;
In the class 'SignUpTopic', we have &lt;br /&gt;
has_many :teams&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading and will reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
===Add dependent property===&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===useless assignment of a variable===&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:UselessAssignment.png]]&lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot; so that it doesnt get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError =&amp;gt; _&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using snake case for method names ===&lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
===Use find_by instead of where.first===&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122793</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122793"/>
		<updated>2019-04-01T17:07:00Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
*  Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
*  Perceived complexity for [method name] is too high.&lt;br /&gt;
*  Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
*  Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
*  File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
*  Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
*  Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
=== Add inverse_of option===&lt;br /&gt;
&lt;br /&gt;
File: Participant.rb &lt;br /&gt;
belongs_to :topic, class_name: 'SignUpTopic'. &lt;br /&gt;
&lt;br /&gt;
In the class 'SignUpTopic', we have &lt;br /&gt;
has_many :teams&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading and will reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
===Add dependent property===&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===useless assignment of a variable===&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:UselessAssignment.png]]&lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot; so that it doesnt get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError =&amp;gt; _&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using snake case for method names ===&lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
===Use find_by instead of where.first===&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122790</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122790"/>
		<updated>2019-04-01T17:05:53Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: /* Problem Statement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The existing code of &amp;quot;Expertiza&amp;quot; has many code smells which are in compliance with the best practices of Ruby Rails.&lt;br /&gt;
These smells were detected by CodeClimate.&lt;br /&gt;
Code climate is a command line interface for the Code Climate analysis platform. It allows you to run Code Climate engines on your local machine inside of Docker containers.&lt;br /&gt;
It provides automated code review for test coverage and maintainability.&lt;br /&gt;
&lt;br /&gt;
We were assigned the task to resolve code climate issues in models with names beginning with ‘H’ thru ‘Sc’.&lt;br /&gt;
&lt;br /&gt;
As per instructions, we were to fix all the issues detected by code climate except for below. &lt;br /&gt;
Fix all code smells except&lt;br /&gt;
Assignment Branch Condition size for [method name] is too high&lt;br /&gt;
Perceived complexity for [method name] is too high.&lt;br /&gt;
Cyclomatic complexity for [method name] is too high.&lt;br /&gt;
Method [method name] has a Cognitive Complexity of XX (exceeds 5 allowed). Consider refactoring.&lt;br /&gt;
File [file name] has XXX  lines of code (exceeds 250 allowed). Consider refactoring.&lt;br /&gt;
Class [class name] has XX methods (exceeds 20 allowed). Consider refactoring.&lt;br /&gt;
Method [method name] has XX lines of code (exceeds 25 allowed). Consider refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There were code smells detected in the application by code climate which violated the best practices of Ruby Rails. The goal was to fix those code smells by refactoring.&lt;br /&gt;
Consider the following examples. &lt;br /&gt;
&lt;br /&gt;
=== Add inverse_of option===&lt;br /&gt;
&lt;br /&gt;
File: Participant.rb &lt;br /&gt;
belongs_to :topic, class_name: 'SignUpTopic'. &lt;br /&gt;
&lt;br /&gt;
In the class 'SignUpTopic', we have &lt;br /&gt;
has_many :teams&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading and will reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
===Add dependent property===&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===useless assignment of a variable===&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:UselessAssignment.png]]&lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot; so that it doesnt get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError =&amp;gt; _&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using snake case for method names ===&lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
===Use find_by instead of where.first===&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122778</id>
		<title>CSC/ECE 517 Spring 2019 - E1919 CodeClimate Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_E1919_CodeClimate_Issues&amp;diff=122778"/>
		<updated>2019-04-01T16:18:38Z</updated>

		<summary type="html">&lt;p&gt;Sbhadau: /* Total Modifications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made according to the specification of E1919, OSS project.&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is a platform where assignments and related quizzes are managed. On this portal instructor  upload assignments/questionnaires, create list of topics for students and edit the existing assignments. Students can form teams, work on projects and submit their assignments as URL or files. It also helps in improving the work quality by allowing students to provide anonymous reviews. It is an Open source platform which is based on Ruby with Rails.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
There were code smells detected in the application by code climate which violated the best practices of Ruby Rails. The goal was to fix those code smells by refactoring.&lt;br /&gt;
Consider the following examples. &lt;br /&gt;
&lt;br /&gt;
=== Add inverse_of option===&lt;br /&gt;
&lt;br /&gt;
File: Participant.rb &lt;br /&gt;
belongs_to :topic, class_name: 'SignUpTopic'. &lt;br /&gt;
&lt;br /&gt;
In the class 'SignUpTopic', we have &lt;br /&gt;
has_many :teams&lt;br /&gt;
&lt;br /&gt;
When you have two models in a has_many, has_one or belongs_to association, the :inverse_of option in Rails tells ActiveRecord that they're two sides of the same association.&lt;br /&gt;
Knowing the other side of the same association Rails can optimize object loading and will reference the same object in memory, instead of loading another copy of the same record.&lt;br /&gt;
&lt;br /&gt;
===Add dependent property===&lt;br /&gt;
&lt;br /&gt;
In the file roles.rb we have &lt;br /&gt;
has_many :users&lt;br /&gt;
&lt;br /&gt;
We need to specify &amp;quot;dependent&amp;quot; option here.&lt;br /&gt;
&lt;br /&gt;
With associations of Active Record , we can make transitions smooth of  such operations(relationships) by telling Rails that there is a connection between the two models. &lt;br /&gt;
It would make more sense here if we add &amp;quot;dependent :destroy&amp;quot; option for users. If a particular role is deleted, all the users under that role must also disappear.&lt;br /&gt;
&amp;lt;pre&amp;gt;dependent :destroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===useless assignment of a variable===&lt;br /&gt;
&lt;br /&gt;
In the file role.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:UselessAssignment.png]]&lt;br /&gt;
&lt;br /&gt;
The variable e is not being used anywhere. Such values are assigned to &amp;quot;_&amp;quot; so that it doesnt get assigned to a variable and uses space. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rescue StandardError =&amp;gt; _&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using snake case for method names ===&lt;br /&gt;
&lt;br /&gt;
In file roles.rb, we have &lt;br /&gt;
&lt;br /&gt;
[[File:Using_Snake_Case.png]]&lt;br /&gt;
&lt;br /&gt;
A standard good practice is to follow snake cases for naming methods. &lt;br /&gt;
&lt;br /&gt;
===Use find_by instead of where.first===&lt;br /&gt;
&lt;br /&gt;
In file scored_question.rb, we have&lt;br /&gt;
&lt;br /&gt;
[[File:Use_Find_By.png]]&lt;br /&gt;
&lt;br /&gt;
Rails prefers &amp;quot;find_by&amp;quot; over &amp;quot;where&amp;quot; as &amp;quot;find_by&amp;quot; returns a single record as result, whereas &amp;quot;where&amp;quot; returns an array of record, to which we need to append &amp;quot;first&amp;quot; or &amp;quot;each&amp;quot; to get single record out of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;answer = Answer.find_by(question_id: self.id, response_id: response_id) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And, there were many more code smells which needed a fix.&lt;br /&gt;
&lt;br /&gt;
== Files Modified for  this requirement == &lt;br /&gt;
&lt;br /&gt;
* app/models/http_request.rb &lt;br /&gt;
* app/models/Import_error.rb &lt;br /&gt;
* app/models/Institution.rb &lt;br /&gt;
* app/models/Instructor.rb &lt;br /&gt;
* app/models/Invitation.rb &lt;br /&gt;
* app/models/Join_team_request.rb &lt;br /&gt;
* app/models/Language.rb &lt;br /&gt;
* app/models/Late_policy.rb &lt;br /&gt;
* app/models/Logger_message.rb &lt;br /&gt;
*  app/models/Markup_style.rb &lt;br /&gt;
*  app/models/Menu_item.rb &lt;br /&gt;
* app/models/Menu.rb &lt;br /&gt;
* app/models/Metareview_questionnaire.rb &lt;br /&gt;
* app/models/Metareview_response_map.rb &lt;br /&gt;
* app/models/Missing_object_id_error.rb &lt;br /&gt;
* app/models/Multiple_choice_checkbox.rb &lt;br /&gt;
* app/models/Multiple_choice_radio.rb &lt;br /&gt;
* app/models/Node.rb &lt;br /&gt;
* app/models/Notification.rb &lt;br /&gt;
* app/models/On_the_fly_calc.rb &lt;br /&gt;
* app/models/Participant.rb &lt;br /&gt;
* app/models/Password_reset.rb  &lt;br /&gt;
* app/models/Path_error.rb&lt;br /&gt;
* app/models/Permission.rb &lt;br /&gt;
*. app/models/Plagiarism_checker_assignment_submission.rb  &lt;br /&gt;
* app/models/Plagiarism_checker_comparison.rb  &lt;br /&gt;
* app/models/question_advice.rb   &lt;br /&gt;
* app/models/Questionnaire_header.rb &lt;br /&gt;
* app/models/Questionnaire_node.rb &lt;br /&gt;
* app/models/Questionnaire.rb  &lt;br /&gt;
* app/models/Questionnaire_type_node.rb &lt;br /&gt;
* app/models/Question.rb &lt;br /&gt;
* app/models/Quiz_assignment.rb  &lt;br /&gt;
* app/models/Quiz_question_choice.rb &lt;br /&gt;
* app/models/Quiz_questionnaire.rb  &lt;br /&gt;
* app/models/Quiz_question.rb  &lt;br /&gt;
* app/models/Quiz_response_map.rb   &lt;br /&gt;
* app/models/Quiz_response.rb  &lt;br /&gt;
* app/models/Requested_user.rb  &lt;br /&gt;
* app/models/Response_map.rb &lt;br /&gt;
* app/models/Response.rb  &lt;br /&gt;
* app/models/review_assignment.rb&lt;br /&gt;
* app/models/Review_comment_paste_bin.rb  &lt;br /&gt;
* app/models/Review_grade.rb  &lt;br /&gt;
* app/models/Review_questionnaire.rb   &lt;br /&gt;
* app/models/Review_response_map.rb &lt;br /&gt;
* app/models/Role.rb  &lt;br /&gt;
* app/models/Rscore.rb &lt;br /&gt;
* app/models/rubric.rb   &lt;br /&gt;
* app/models/Scale.rb  &lt;br /&gt;
* app/models/Scored_question.rb  &lt;br /&gt;
* app/models/Score_view.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Total Modifications ==&lt;br /&gt;
&lt;br /&gt;
42 Files changed&lt;br /&gt;
&lt;br /&gt;
215 additions&lt;br /&gt;
&lt;br /&gt;
163 Deletions&lt;/div&gt;</summary>
		<author><name>Sbhadau</name></author>
	</entry>
</feed>