<?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=Vsubbar</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=Vsubbar"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Vsubbar"/>
	<updated>2026-08-20T18:31:23Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1560_PSV&amp;diff=98170</id>
		<title>CSC/ECE 517 Fall 2015/oss E1560 PSV</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1560_PSV&amp;diff=98170"/>
		<updated>2015-11-05T22:11:22Z</updated>

		<summary type="html">&lt;p&gt;Vsubbar: Added line telling how to test from UI&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1560. Refactoring PopUpController.rb and ParticipantsController.rb'''&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. This project is aimed at refactoring PopUpController.rb and ParticipantsController.rb.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introduction to Expertiza=&lt;br /&gt;
[http://http://expertiza.ncsu.edu/ Expertiza] is an [http://en.wikipedia.org/wiki/Open-source_software Open Source] [http://rubyonrails.org/ Rails] application which is used by instructors and students for creating assignments and submitting peer reviews.  Expertiza allows the instructor to create and customize assignments, create a list of topics the students can sign up for, have students work on teams and then review each other's assignments at the end. The Source code of the application can be cloned from [https://github.com/expertiza/expertiza/ Github].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Project Desicription&amp;lt;ref&amp;gt;https://docs.google.com/document/d/1uWs3zyrupTmrOFuv5IbVWCF4NRvCXqJmg8dZ0wCqgus/edit&amp;lt;/ref&amp;gt;=&lt;br /&gt;
'''Files involved:'''&lt;br /&gt;
&amp;lt;p&amp;gt;popUpController.rb&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;participantsController.rb&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''What they do'''&lt;br /&gt;
&amp;lt;p&amp;gt;PopUpController displays a review when a user (instructor or student) clicks on a list of reviews.&amp;lt;/p&amp;gt;  &lt;br /&gt;
&amp;lt;p&amp;gt;ParticipantsController handles participants in an assignment.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''What's wrong with them:'''&lt;br /&gt;
&amp;lt;p&amp;gt;PopUpController contains only two prominent methods, but they are very big.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;ParticipantsController contains redundant code.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done:'''&lt;br /&gt;
&amp;lt;p&amp;gt;'''1 popUpController.rb'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;1.1 Action_allowed method always returns true. It needs to be fixed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;1.2 Team_user_popup method needs refactoring. @teamId is assigned but never used. Add comments to make code more readable. Rename variables based on their usage&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;1.3 Refactor Participants_popup and team_users_popup methods into smaller private methods.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;'''2 participantsController.rb'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;2.1 In add and update_authorization methods, permissions collection object can be used to reference its elements without assigning each element to individual private variables.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;2.2 Inherit and bequeath_all methods are similar. Common statements can be migrated to private method. Add comments in code to make it easy to understand.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;2.3 Cluster all the flash messages under one private method to make the code more manageable&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;2.4 Fix email_sent method. It contains a dummy email address.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Changes Made&amp;lt;ref&amp;gt;https://github.com/viveksubbarao/expertiza/commits/master&amp;lt;/ref&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;p&amp;gt;'''PopUpController.rb'''&amp;lt;/p&amp;gt;==&lt;br /&gt;
=== Modified &amp;lt;code&amp;gt;Action_allowed&amp;lt;/code&amp;gt; method ===&lt;br /&gt;
Modified &amp;lt;code&amp;gt;Action_allowed&amp;lt;/code&amp;gt; method to return true only if...&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! |Before Refactoring&lt;br /&gt;
! |After Refactoring&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
def action_allowed?&lt;br /&gt;
    true&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
def action_allowed?&lt;br /&gt;
    if @allowed_actions.include? params[:action]&lt;br /&gt;
        true&lt;br /&gt;
    else&lt;br /&gt;
        false&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
=== Refactored &amp;lt;code&amp;gt;Team_user_popup&amp;lt;/code&amp;gt; method ===&lt;br /&gt;
Removed unused instance variable @teamId &lt;br /&gt;
Changed redundant instance variables to local variables&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! |Before Refactoring&lt;br /&gt;
! |After Refactoring&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
 def team_users_popup&lt;br /&gt;
    @sum = 0&lt;br /&gt;
    @count = 0&lt;br /&gt;
    @teamid = params[:id]&lt;br /&gt;
    @team = Team.find(params[:id])&lt;br /&gt;
    @assignment = Assignment.find(@team.parent_id)&lt;br /&gt;
    @assignment_id = @assignment.id&lt;br /&gt;
    @id=params[:assignment_id]&lt;br /&gt;
    #  @teamname = Team.find(params[:id]).name&lt;br /&gt;
    @teamusers = TeamsUser.where(team_id: params[:id])&lt;br /&gt;
&lt;br /&gt;
    #id2 seems to be a response_map&lt;br /&gt;
    if(params[:id2] == nil)&lt;br /&gt;
      #  if(@reviewid == nil)&lt;br /&gt;
      @scores = nil&lt;br /&gt;
    else&lt;br /&gt;
      #get the last response from response_map id&lt;br /&gt;
      response = Response.where(map_id:params[:id2]).last&lt;br /&gt;
      @reviewid = response.id&lt;br /&gt;
      @pid = ResponseMap.find(params[:id2]).reviewer_id&lt;br /&gt;
      @reviewer_id = Participant.find(@pid).user_id&lt;br /&gt;
&lt;br /&gt;
      @scores = Answer.where(response_id: @reviewid)&lt;br /&gt;
&lt;br /&gt;
      questionnaire =Response.find(@reviewid).questionnaire_by_answer(@scores.first)&lt;br /&gt;
      @maxscore = questionnaire.max_question_score&lt;br /&gt;
&lt;br /&gt;
      if(@maxscore == nil)&lt;br /&gt;
        @maxscore = 5&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      @total_percentage = response.get_average_score&lt;br /&gt;
      @sum = response.get_total_score&lt;br /&gt;
      @total_possible = response.get_maximum_score&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    #    @review_questionnaire = Questionnaire.find(@assignment.review_questionnaire_id)&lt;br /&gt;
    #    @review_questions = @review_questionnaire.questions&lt;br /&gt;
    #@maxscore = @review_questionnaire.max_question_score&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
 def team_users_popup&lt;br /&gt;
    @sum = 0&lt;br /&gt;
    @team = Team.find(params[:id])&lt;br /&gt;
    @id = params[:assignment_id]&lt;br /&gt;
    @teamusers = TeamsUser.where(team_id: params[:id])&lt;br /&gt;
&lt;br /&gt;
    puts params&lt;br /&gt;
    # response_map id can be used to index into the Response&lt;br /&gt;
    # table and find the desired response.&lt;br /&gt;
    if (params[:response_map_id] == nil)&lt;br /&gt;
      @scores = nil&lt;br /&gt;
    else&lt;br /&gt;
      #get the last response from response_map id&lt;br /&gt;
      response = Response.where(map_id: params[:response_map_id]).last&lt;br /&gt;
      @reviewid = response.id&lt;br /&gt;
      @pid = ResponseMap.find(params[:response_map_id]).reviewer_id&lt;br /&gt;
      @reviewer_id = Participant.find(@pid).user_id&lt;br /&gt;
&lt;br /&gt;
      @scores = Answer.where(response_id: response.id)&lt;br /&gt;
      questionnaire = Response.find(@reviewid).questionnaire_by_answer(@scores.first)&lt;br /&gt;
&lt;br /&gt;
      if (questionnaire.max_question_score == nil)&lt;br /&gt;
        @maxscore = 5 # This instance variable is needed. It's used in the team_users_popup view.&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      @total_percentage = response.get_average_score&lt;br /&gt;
      @sum = response.get_total_score&lt;br /&gt;
      @total_possible = response.get_maximum_score&lt;br /&gt;
    end&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Refactored Participants_popup and team_users_popup methods into smaller private methods ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! |Before Refactoring&lt;br /&gt;
! |After Refactoring&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;p&amp;gt;'''ParticipantsController.rb'''&amp;lt;/p&amp;gt;==&lt;br /&gt;
=== Permissions collection object referenced directly in &amp;lt;code&amp;gt;add&amp;lt;/code&amp;gt; and  &amp;lt;code&amp;gt;update_authorization methods&amp;lt;/code&amp;gt;===&lt;br /&gt;
Local variables like can_submit, can_review, etc removed and permissions object referenced directly&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! |Before Refactoring&lt;br /&gt;
! |After Refactoring&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
def add&lt;br /&gt;
......&lt;br /&gt;
    permissions = Participant.get_permissions(params[:authorization])&lt;br /&gt;
    can_submit = permissions[:can_submit]   &lt;br /&gt;
    can_review = permissions[:can_review]&lt;br /&gt;
    can_take_quiz = permissions[:can_take_quiz]&lt;br /&gt;
    curr_object.add_participant(params[:user][:name],can_submit,can_review,can_take_quiz)&lt;br /&gt;
......&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
def update_authorizations&lt;br /&gt;
......&lt;br /&gt;
    permissions = Participant.get_permissions(params[:authorization])&lt;br /&gt;
    can_submit = permissions[:can_submit]&lt;br /&gt;
    can_review = permissions[:can_review]&lt;br /&gt;
    can_take_quiz = permissions[:can_take_quiz]&lt;br /&gt;
    participant = Participant.find(params[:id])&lt;br /&gt;
    parent_id = participant.parent_id&lt;br /&gt;
    participant.update_attributes(:can_submit =&amp;gt; can_submit, :can_review =&amp;gt; can_review, :can_take_quiz =&amp;gt; can_take_quiz)&lt;br /&gt;
......&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
def add&lt;br /&gt;
......&lt;br /&gt;
    permissions = Participant.get_permissions(params[:authorization])&lt;br /&gt;
    curr_object.add_participant(params[:user][:name], permissions[:can_submit], &lt;br /&gt;
              permissions[:can_review], permissions[:can_take_quiz])&lt;br /&gt;
......&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def update_authorizations&lt;br /&gt;
......&lt;br /&gt;
    permissions = Participant.get_permissions(params[:authorization])&lt;br /&gt;
    participant = Participant.find(params[:id])&lt;br /&gt;
    parent_id = participant.parent_id&lt;br /&gt;
    participant.update_attributes(:can_submit =&amp;gt; permissions[:can_submit], &lt;br /&gt;
           :can_review =&amp;gt; permissions[:can_review], :can_take_quiz =&amp;gt; permissions[:can_take_quiz])&lt;br /&gt;
......&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
=== Moved common functionality in &amp;lt;code&amp;gt;Inherit&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;bequeath_all&amp;lt;/code&amp;gt; to private methods ===&lt;br /&gt;
Moved common functionality of &amp;lt;code&amp;gt;Inherit&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;bequeath_all&amp;lt;/code&amp;gt; to private method &amp;lt;code&amp;gt;populate_copied_participants&amp;lt;/code&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! |Before Refactoring&lt;br /&gt;
! |After Refactoring&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
def inherit&lt;br /&gt;
    assignment = Assignment.find(params[:id])&lt;br /&gt;
    course = assignment.course&lt;br /&gt;
    @copied_participants = []&lt;br /&gt;
&lt;br /&gt;
    if course&lt;br /&gt;
      participants = course.participants&lt;br /&gt;
      if participants.length &amp;gt; 0&lt;br /&gt;
        participants.each{|participant|&lt;br /&gt;
          new_participant = participant.copy(params[:id])&lt;br /&gt;
&lt;br /&gt;
          if new_participant&lt;br /&gt;
            @copied_participants.push new_participant&lt;br /&gt;
          end&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        # Only display undo link if copies of participants are created&lt;br /&gt;
        if @copied_participants.length &amp;gt; 0&lt;br /&gt;
          undo_link(&amp;quot;Participants from \&amp;quot;#{course.name}\&amp;quot; has been copied to this assignment successfully. &amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
          flash[:note] = 'All course participants are already in this assignment'&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
      else&lt;br /&gt;
        flash[:note] = &amp;quot;No participants were found to inherit.&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      flash[:error] = &amp;quot;No course was found for this assignment.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    redirect_to :controller =&amp;gt; 'participants', :action =&amp;gt; 'list', :id =&amp;gt; assignment.id, :model =&amp;gt; 'Assignment'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
def bequeath_all&lt;br /&gt;
    @copied_participants = []&lt;br /&gt;
    assignment = Assignment.find(params[:id])&lt;br /&gt;
    if assignment.course&lt;br /&gt;
      course = assignment.course&lt;br /&gt;
      assignment.participants.each{ |participant|&lt;br /&gt;
        new_participant = participant.copy(course.id)&lt;br /&gt;
&lt;br /&gt;
        if new_participant&lt;br /&gt;
          @copied_participants.push new_participant&lt;br /&gt;
        end&lt;br /&gt;
      }&lt;br /&gt;
      # only display undo link if copies of participants are created&lt;br /&gt;
      if @copied_participants.length &amp;gt; 0&lt;br /&gt;
        undo_link(&amp;quot;All participants were successfully copied to \&amp;quot;#{course.name}\&amp;quot;. &amp;quot; )&lt;br /&gt;
      else&lt;br /&gt;
        flash[:note] = 'All assignment participants are already part of the course'&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      #flash[:note] = &amp;quot;All participants were successfully copied to \&amp;quot;&amp;quot;+course.name+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      flash[:error] = &amp;quot;This assignment is not associated with a course.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    redirect_to :controller =&amp;gt; 'participants', :action =&amp;gt; 'list', :id =&amp;gt; assignment.id, :model =&amp;gt; 'Assignment'&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
def inherit&lt;br /&gt;
    assignment = Assignment.find(params[:id])&lt;br /&gt;
&lt;br /&gt;
    if assignment.course&lt;br /&gt;
      if assignment.course.participants.length &amp;gt; 0&lt;br /&gt;
        @copied_participants = populate_copied_participants(assignment.courses.participants, params[:id])&lt;br /&gt;
        if @copied_participants.length &amp;gt; 0&lt;br /&gt;
          undo_link(&amp;quot;Participants from \&amp;quot;#{course.name}\&amp;quot; have been copied to this assignment successfully. &amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
          flash[:note] = 'All course participants are already in this assignment'&lt;br /&gt;
        end&lt;br /&gt;
      else&lt;br /&gt;
        flash[:note] = &amp;quot;No participants were found to inherit.&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      flash[:error] = &amp;quot;No course was found for this assignment.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    redirect_to :controller =&amp;gt; 'participants', :action =&amp;gt; 'list', :id =&amp;gt; assignment.id, :model =&amp;gt; 'Assignment'&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 def bequeath_all&lt;br /&gt;
    assignment = Assignment.find(params[:id])&lt;br /&gt;
&lt;br /&gt;
    if assignment.course&lt;br /&gt;
      @copied_participants = populate_copied_participants(assignment.participants, assignment.course.id)&lt;br /&gt;
      if @copied_participants.length &amp;gt; 0&lt;br /&gt;
        undo_link(&amp;quot;All participants were successfully copied to \&amp;quot;#{course.name}\&amp;quot;. &amp;quot;)&lt;br /&gt;
      else&lt;br /&gt;
        flash[:note] = 'All assignment participants are already part of the course'&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      flash[:error] = &amp;quot;This assignment is not associated with a course.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    redirect_to :controller =&amp;gt; 'participants', :action =&amp;gt; 'list', :id =&amp;gt; assignment.id, :model =&amp;gt; 'Assignment'&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def populate_copied_participants(participants, val)&lt;br /&gt;
    @copied_participants = []&lt;br /&gt;
&lt;br /&gt;
    participants.each do |participant|&lt;br /&gt;
      new_participant = participant.copy(val)&lt;br /&gt;
      if new_participant&lt;br /&gt;
        @copied_participants.push new_participant&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return @copied_participants&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
=== Flash messages clustered under a single private method ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! |Before Refactoring&lt;br /&gt;
! |After Refactoring&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
=== Fixed &amp;lt;code&amp;gt;email_sent&amp;lt;/code&amp;gt; method ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! |Before Refactoring&lt;br /&gt;
! |After Refactoring&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= How to test from UI =&lt;br /&gt;
Login as a instructor &amp;quot;instructor6/password&amp;quot;. Click on Assignments -&amp;gt; review report -&amp;gt; and on a team&lt;br /&gt;
= References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vsubbar</name></author>
	</entry>
</feed>