<?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=Hchang15</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=Hchang15"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Hchang15"/>
	<updated>2026-10-11T17:08:13Z</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_-_Project_E1916._Fix_Code_Climate_issues_in_controllers_with_names_beginning_with_A_through_N&amp;diff=122739</id>
		<title>CSC/ECE 517 Spring 2019 - Project E1916. Fix Code Climate issues in controllers with names beginning with A through N</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2019_-_Project_E1916._Fix_Code_Climate_issues_in_controllers_with_names_beginning_with_A_through_N&amp;diff=122739"/>
		<updated>2019-03-31T20:34:10Z</updated>

		<summary type="html">&lt;p&gt;Hchang15: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
===Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a web application developed using Ruby on Rails Framework whose creation and maintenance by students and the faculty of NCSU. The code is available on Github [https://github.com/expertiza/expertiza Expertiza on GitHub]. In Expertiza, instructor can create new assignments and customize new or existing assignments. The instructor also can create a list of topics the students can sign up for. Students can form teams in Expertiza to work on various projects and assignments. All the team member will show under the team member list. A Student can comment on his teammate's performance of the project. Students can also peer review other students' submissions and give tag comment by other's peer review. Students can submit their work by URLs or multitype file submission.&lt;br /&gt;
&lt;br /&gt;
===Project Description===&lt;br /&gt;
Project E1916. Fix Code Climate issues in controllers with names beginning with A through N&lt;br /&gt;
====Project Team Member====&lt;br /&gt;
*Shuai Wang (swang28)&lt;br /&gt;
*Huan Chang (hchang15)&lt;br /&gt;
*Guangyu Yu (gyu22)&lt;br /&gt;
&lt;br /&gt;
====Project Task====&lt;br /&gt;
There is some code smells of expertiza app/controllers detected by the code climate. These violate many of the ruby/rails best practices and needs to be rectified. &lt;br /&gt;
&lt;br /&gt;
Our team is to fix all code smells except：&lt;br /&gt;
    &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;
*Mass assignment is not restricted using attr_accessible.&lt;br /&gt;
*Potentially dangerous attribute available for mass assignment.&lt;br /&gt;
&lt;br /&gt;
====Files modified in the project====&lt;br /&gt;
In all files in app/controllers/ with names beginning with A through N, except assignment_controller.rb. &lt;br /&gt;
&lt;br /&gt;
=====Main issue files:=====&lt;br /&gt;
&lt;br /&gt;
*[MAINTAINABILITY C] app/controllers/assessment360_controller.rb&lt;br /&gt;
*[MAINTAINABILITY B] app/controllers/automated_metareviews_controller.rb&lt;br /&gt;
*[MAINTAINABILITY B] app/controllers/grades_controller.rb&lt;br /&gt;
*[MAINTAINABILITY C] app/controllers/impersonate_controller.rb&lt;br /&gt;
*[MAINTAINABILITY F] app/controllers/import_file_controller.rb&lt;br /&gt;
*[MAINTAINABILITY C] app/controllers/lottery_controller.rb&lt;br /&gt;
&lt;br /&gt;
===Typical Issues and Improvements===&lt;br /&gt;
&lt;br /&gt;
====Issue: Use a guard clause instead of wrapping the code inside a conditional expression.====&lt;br /&gt;
&lt;br /&gt;
*Example&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    if assignment.try(:is_selfreview_enabled) and unsubmitted_self_review?(participant.try(:id))&lt;br /&gt;
      return false&lt;br /&gt;
    else&lt;br /&gt;
      return true&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Solution&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    return false if assignment.try(:is_selfreview_enabled) and unsubmitted_self_review?(participant.try(:id))&lt;br /&gt;
    true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Issue: Avoid using update_attribute because it skips validations.====&lt;br /&gt;
&lt;br /&gt;
*Example&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    if @institution.update_attribute(:name, params[:institution][:name])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Solution&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    if @institution.update_attributes(:name, params[:institution][:name])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Issue: Issue: Line is too long.====&lt;br /&gt;
&lt;br /&gt;
*Example&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    avg_existing_metareviews = AutomatedMetareview.find_by_sql([&amp;quot;select avg(relevance) as relevance, avg(content_summative) as summative,&lt;br /&gt;
                                                                avg(content_problem) as problem, avg(content_advisory) as advisory, avg(tone_positive) as positive, avg(tone_negative) as negative,&lt;br /&gt;
                                                                avg(tone_neutral) as neutral, avg(quantity) as quantity from automated_metareviews where response_id &amp;lt;&amp;gt; ?&amp;quot;, @automated_metareview.response_id])[0]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Solution&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     avg(content_problem) as problem, avg(content_advisory) as advisory,&lt;br /&gt;
                                                                avg(tone_positive) as positive, avg(tone_negative) as negative,&lt;br /&gt;
                                                                avg(tone_neutral) as neutral, avg(quantity) as quantity from automated_metareviews where response_id &amp;lt;&amp;gt; ?&amp;quot;,&lt;br /&gt;
                                                                @automated_metareview.response_id])[0]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Issue: Use normalcase for variable numbers.====&lt;br /&gt;
&lt;br /&gt;
*Example&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    color_1 = 'c53711'&lt;br /&gt;
    color_2 = '0000ff'&lt;br /&gt;
    ...&lt;br /&gt;
    bc.data &amp;quot;Your work&amp;quot;, current_metareview_data, color_1&lt;br /&gt;
    bc.data &amp;quot;Avg. performance on reviews&amp;quot;, existing_metareview_data, color_2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Solution&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    color1 = 'c53711'&lt;br /&gt;
    color2 = '0000ff'&lt;br /&gt;
    ...&lt;br /&gt;
    bc.data &amp;quot;Your work&amp;quot;, current_metareview_data, color1&lt;br /&gt;
    bc.data &amp;quot;Avg. performance on reviews&amp;quot;, existing_metareview_data, color2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Issue: Keep a blank line before and after protected.====&lt;br /&gt;
&lt;br /&gt;
*Example&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    protected&lt;br /&gt;
    # Use this method to validate the current user in order to avoid allowing users&lt;br /&gt;
    # to see unauthorized data.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Solution&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    protected&lt;br /&gt;
&lt;br /&gt;
    # Use this method to validate the current user in order to avoid allowing users&lt;br /&gt;
    # to see unauthorized data.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Issue:  Surrounding space missing for operator =.====&lt;br /&gt;
&lt;br /&gt;
*Example&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    temp_avg= @meta_review_info_per_stu[0] * 1.0 / @meta_review_info_per_stu[1]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Solution&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    temp_avg = @meta_review_info_per_stu[0] * 1.0 / @meta_review_info_per_stu[1]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Issue: Avoid rescuing without specifying an error class.====&lt;br /&gt;
&lt;br /&gt;
*Example&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     @header_integrated_body.each do |row_hash|&lt;br /&gt;
          ReviewResponseMap.import(row_hash, session, params[:id])&lt;br /&gt;
        end&lt;br /&gt;
      rescue&lt;br /&gt;
        errors &amp;lt;&amp;lt; $ERROR_INFO&lt;br /&gt;
      end&lt;br /&gt;
    elsif params[:model] == &amp;quot;MetareviewResponseMap&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Solution&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     @header_integrated_body.each do |row_hash|&lt;br /&gt;
          ReviewResponseMap.import(row_hash, session, params[:id])&lt;br /&gt;
        end&lt;br /&gt;
      rescue StandardError&lt;br /&gt;
        errors &amp;lt;&amp;lt; $ERROR_INFO&lt;br /&gt;
      end&lt;br /&gt;
    elsif params[:model] == &amp;quot;MetareviewResponseMap&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Issue: fixed block structure with if.====&lt;br /&gt;
&lt;br /&gt;
*Example&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    @has_reviewee = if @model == 'ReviewResponseMap'&lt;br /&gt;
                      params[:has_reviewee]&lt;br /&gt;
                    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Solution&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    @has_reviewee = params[:has_reviewee] if @model == 'ReviewResponseMap'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Issue: Prefer Date or Time over DateTime.====&lt;br /&gt;
&lt;br /&gt;
*Example&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    due_at = DateTime.parse(params[:due_at])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Solution&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    due_at = Date.parse(params[:due_at])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Issue: Use other_ta_mappings_num.zero? instead of other_ta_mappings_num == 0.====&lt;br /&gt;
&lt;br /&gt;
*Example&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    if other_ta_mappings_num == 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Solution&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    if other_ta_mappings_num.zero?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Issue: Use find_by instead of dynamic find_by_login.====&lt;br /&gt;
&lt;br /&gt;
*Example&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    user = User.find_by_login(params[:login][:name])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Solution&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    user = User.find_by(params[:login][:name])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Issue: Do not place comments on the same line as the end keyword.====&lt;br /&gt;
&lt;br /&gt;
*Example&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    end # def login&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Solution&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    end &lt;br /&gt;
&lt;br /&gt;
    # def login&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Issue: Use 2 (not 4) spaces for indentation.====&lt;br /&gt;
&lt;br /&gt;
*Example&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    when 'index'&lt;br /&gt;
        ['Instructor',&lt;br /&gt;
         'Teaching Assistant',&lt;br /&gt;
         'Student',&lt;br /&gt;
         'Administrator'].include? current_role_name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Solution&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    when 'index'&lt;br /&gt;
      ['Instructor',&lt;br /&gt;
       'Teaching Assistant',&lt;br /&gt;
       'Student',&lt;br /&gt;
       'Administrator'].include? current_role_name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Issue: use &amp;amp;: instead of block.====&lt;br /&gt;
&lt;br /&gt;
*Example&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    header.map! { |column_name| column_name.to_sym }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Solution&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    header.map! (&amp;amp;:to_sym)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Issue: delete redundant parentheses.====&lt;br /&gt;
&lt;br /&gt;
*Example&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    h = Hash.new()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Solution&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    h = Hash.new&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Issue: Don't use parentheses around the condition of an if.====&lt;br /&gt;
&lt;br /&gt;
*Example&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    if (@model == 'AssignmentTeam'|| @model == 'CourseTeam')&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Solution&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    if @model == 'AssignmentTeam'|| @model == 'CourseTeam'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Issue: Move @optional_count = 0 out of the conditional.====&lt;br /&gt;
&lt;br /&gt;
*Example&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     if (@model == 'SignUpTopic')&lt;br /&gt;
       @optional_count = 0&lt;br /&gt;
       if (params[:category] == 'true')&lt;br /&gt;
         @optional_count += 1&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Solution&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    @optional_count = 0&lt;br /&gt;
    if @model == 'SignUpTopic'&lt;br /&gt;
      if params[:category] == 'true'&lt;br /&gt;
        @optional_count += 1&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Issue: Similar blocks of code found in 2 locations. Consider refactoring. ====&lt;br /&gt;
&lt;br /&gt;
*Example&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    if @teammate_review_info_per_stu[1] &amp;gt; 0&lt;br /&gt;
      calculate_avg_grade(@teammate_review_info_per_stu, @teammate_review, cp.id)&lt;br /&gt;
    end&lt;br /&gt;
    if @meta_review_info_per_stu[1] &amp;gt; 0&lt;br /&gt;
      calculate_avg_grade(@meta_review_info_per_stu, @meta_review, cp.id)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    def calculate_avg_grade(review_info_per_stu, review, cp.id)&lt;br /&gt;
      temp_avg_grade = review_info_per_stu[0] * 1.0 / review_info_per_stu[1]&lt;br /&gt;
      review[cp.id][:avg_grade_for_assgt] = temp_avg_grade.round.to_s + '%'&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Solution&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    if @teammate_review_info_per_stu[1] &amp;gt; 0&lt;br /&gt;
      s = @teammate_review_info_per_stu[0] * 1.0&lt;br /&gt;
      temp_avg_grade = s / @teammate_review_info_per_stu[1]&lt;br /&gt;
      t = temp_avg_grade.round.to_s&lt;br /&gt;
      @teammate_review[cp.id][:avg_grade_for_assgt] = t + '%'&lt;br /&gt;
    end&lt;br /&gt;
    if @meta_review_info_per_stu[1] &amp;gt; 0&lt;br /&gt;
      s1 = @meta_review_info_per_stu[1]&lt;br /&gt;
      temp_avg= @meta_review_info_per_stu[0] * 1.0 / s1&lt;br /&gt;
      @meta_review[cp.id][:avg_grade_for_assgt] = temp_avg.round.to_s + '%'&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Issue: Block has too many lines.====&lt;br /&gt;
&lt;br /&gt;
*Example&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    populate_hash_for_all_students_all_reviews(assignment,&lt;br /&gt;
                                                   cp,&lt;br /&gt;
                                                   teammate_reviews,&lt;br /&gt;
                                                   @teammate_review,&lt;br /&gt;
                                                   @overall_teammate_review_grades,&lt;br /&gt;
                                                   @overall_teammate_review_count,&lt;br /&gt;
                                                   @teammate_review_info_per_stu)&lt;br /&gt;
    populate_hash_for_all_students_all_reviews(assignment,&lt;br /&gt;
                                                   cp,&lt;br /&gt;
                                                   meta_reviews,&lt;br /&gt;
                                                   @meta_review,&lt;br /&gt;
                                                   @overall_meta_review_grades,&lt;br /&gt;
                                                   @overall_meta_review_count,&lt;br /&gt;
                                                   @meta_review_info_per_stu)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Solution&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    populate_hash_for_all_students_all_reviews(assignment,cp,teammate_reviews,@teammate_review,@overall_teammate_review_grades,&lt;br /&gt;
                                               @overall_teammate_review_count,@teammate_review_info_per_stu)&lt;br /&gt;
    populate_hash_for_all_students_all_reviews(assignment,cp,meta_reviews,@meta_review,@overall_meta_review_grades,&lt;br /&gt;
                                               @overall_meta_review_count,@meta_review_info_per_stu)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Issue: Avoid rescuing the Exception class.====&lt;br /&gt;
&lt;br /&gt;
*Example&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    rescue Exception =&amp;gt; e&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Solution&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    rescue StandardError =&amp;gt; e&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Issue: Favor modifier unless usage when having a single-line body. Another good alternative is the usage of control flow &amp;amp;&amp;amp;/||.====&lt;br /&gt;
&lt;br /&gt;
*Example&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     unless @assignment_grades[cp.id][assignment_id].nil?&lt;br /&gt;
       @final_grades[cp.id] += @assignment_grades[cp.id][assignment_id]&lt;br /&gt;
     end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Solution&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     @final_grades[cp.id] += @assignment_grades[cp.id][assignment_id] unless @assignment_grades[cp.id][assignment_id].nil?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Issue: Convert if nested inside else to elsif.====&lt;br /&gt;
&lt;br /&gt;
*Example&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    if params[:set_pressed][:bool] == 'false'&lt;br /&gt;
      flash[:error] = &amp;quot;There has been some submissions for the rounds of reviews that you're trying to reduce. You can only increase the round of review.&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      if @assignment_form.update_attributes(assignment_form_params, current_user)&lt;br /&gt;
        flash[:note] = 'The assignment was successfully saved....'&lt;br /&gt;
      else&lt;br /&gt;
        flash[:error] = &amp;quot;Failed to save the assignment: #{@assignment_form.errors.get(:message)}&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Solution&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    if params[:set_pressed][:bool] == 'false'&lt;br /&gt;
      flash[:error] = &amp;quot;There has been some submissions for the rounds of reviews that you're trying to reduce. You can only increase the round of review.&amp;quot;&lt;br /&gt;
    elsif @assignment_form.update_attributes(assignment_form_params, current_user)&lt;br /&gt;
      flash[:note] = 'The assignment was successfully saved....'&lt;br /&gt;
    else&lt;br /&gt;
      flash[:error] = &amp;quot;Failed to save the assignment: #{@assignment_form.errors.get(:message)}&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Testing===&lt;br /&gt;
Our task is to fix code smell issues for some of the controller files. In order to prove that our modification did not break the application, we ran all the controller tests to make sure they all pass. We firstly set up the environment through VCL. Then we cloned our repository and simply ran:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ rspec spec/controllers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then we get the following results which represents that we passes all the controller tests.&lt;br /&gt;
[[File:Test_result_1916.png]]&lt;br /&gt;
===Reference===&lt;br /&gt;
*Our Team GitHub Repository: https://github.com/ece517-p3/expertiza&lt;br /&gt;
*Our Team Code Climate: https://codeclimate.com/github/ece517-p3/expertiza&lt;br /&gt;
*The Class GitHub Repository: https://github.com/expertiza/expertiza&lt;br /&gt;
*The Class Code Climate:https://codeclimate.com/github/expertiza/expertiza&lt;/div&gt;</summary>
		<author><name>Hchang15</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Test_result_1916.png&amp;diff=122737</id>
		<title>File:Test result 1916.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Test_result_1916.png&amp;diff=122737"/>
		<updated>2019-03-31T20:28:41Z</updated>

		<summary type="html">&lt;p&gt;Hchang15: test result for task 1916&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;test result for task 1916&lt;/div&gt;</summary>
		<author><name>Hchang15</name></author>
	</entry>
</feed>