<?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=Pdeka</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=Pdeka"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Pdeka"/>
	<updated>2026-06-04T13:29:05Z</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_E1580_Text_metrics&amp;diff=99942</id>
		<title>CSC/ECE 517 Fall 2015 E1580 Text metrics</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015_E1580_Text_metrics&amp;diff=99942"/>
		<updated>2015-11-14T05:03:20Z</updated>

		<summary type="html">&lt;p&gt;Pdeka: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
[https://expertiza.ncsu.edu/ Expertiza] is an open-source [https://en.wikipedia.org/wiki/Peer_review peer-review] based web application which allows for incremental learning. Students can submit learning objects such as articles, wiki pages, repository links and with the help of peer reviews, improve them. The project has been developed using the [https://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails] framework and is supported by the [http://www.nsf.gov National Science Foundation]&lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
The current version of The Expertiza Project has an automated meta-review system wherein the reviewer gets an e-mail containing various metrics of his review like relevance, plagiarism, number of words etc. , whenever a review is submitted. The purpose of this project is to give students some metrics on the content of the review when the automated meta reviews are disabled. This also includes the addition of new relevant metrics which can help the reviewers and instructors to gain insight into the reviews.&lt;br /&gt;
&lt;br /&gt;
=== Scope ===&lt;br /&gt;
The scope of the project is limited creating a system where the reviewer and the instructors can view metrics for the submitted reviews.The user or the instructor need to manually visit the link to view the metrics.The instructor can view the metrics for every assignment available whereas the user can view only the metrics of the assignments relating to himself.The scope doesn't include any automated viewing of reports for the metrics.Since the project is mainly related to giving reports about the existing data, we will not be modifying the results saved by the actual [https://en.wikipedia.org/wiki/Peer_review peer-review] mechanism.The scope also excludes any change of the actual peer review process i.e. submitting a review of an assignment or adding an assignment to a user profile.&lt;br /&gt;
&lt;br /&gt;
=== Task Description ===&lt;br /&gt;
&lt;br /&gt;
The project requires completion of the following tasks&lt;br /&gt;
&lt;br /&gt;
# create database table to the metrics&lt;br /&gt;
# create code to calculate the values of the metrics and also ensure that the code runs fast enough (can give results within 5 seconds) as the current auto text metrics functionality is very slow and diminishes user experience.&lt;br /&gt;
# create partials for both students and instructors that show for each assignment:&lt;br /&gt;
#* Total no.of words&lt;br /&gt;
#* average no. of words for all the reviews for the particular assignment in a particular round&lt;br /&gt;
#* if there are suggestions in each reviewer's review&lt;br /&gt;
#* the percentage of peer reviews that offer any suggestions&lt;br /&gt;
#* if problems or errors are pointed out in the reviews&lt;br /&gt;
#* the percentage of the peer-reviews which point out problems in this assignment in this round&lt;br /&gt;
#* if any offensive language is used&lt;br /&gt;
#* the percentage of peer-reviews containing offensive language&lt;br /&gt;
#* No.of different words in a particular reviewer’s review&lt;br /&gt;
#* No. of questions responded to with complete sentences&lt;br /&gt;
# make the code work for an assignment with and without the &amp;quot;vary rubric by rounds&amp;quot; feature&lt;br /&gt;
# create tests to make sure the test coverage increases&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
[[File:e1580flow.JPG]]&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
=== Mockups ===&lt;br /&gt;
====Reviewer Panel====&lt;br /&gt;
The diagrams below show the proposed changes through the perspective of a reviewer.The reviewer can click the '''Show aggregate metrics''' link to view the aggregate metrics.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:User_metrics.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The reviewer can also click the '''Show metrics''' link for each individual review to view the specific metrics for that review.&lt;br /&gt;
&lt;br /&gt;
[[File:Review_metrics.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Instructor Panel====&lt;br /&gt;
&lt;br /&gt;
The image represents instructors view of the Review report after our modifications.The instructor can click '''Show aggregate metrics''' link to view the aggregate metrics for each team for a given assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Inst_aggregate_metrics.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Design Patterns ===&lt;br /&gt;
&lt;br /&gt;
'''Iterator Pattern&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Iterator_pattern&amp;lt;/ref&amp;gt;:'''The iterator design pattern uses an iterator to traverse a container and access its elements.In our implementation, we would require showing the review metrics for each response.So, we can use the iterator design pattern to iterate over the calculated metrics values.&lt;br /&gt;
&lt;br /&gt;
'''FlyWeight Pattern&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Flyweight_pattern&amp;lt;/ref&amp;gt;:''' The flyweight design pattern tries to reduce memory footprint by reusing already existing similar objects by storing them and only creates new object when there is no match. In our case, we can use the same partials of the metrics pages for both the students and instructors.&lt;br /&gt;
&lt;br /&gt;
=== Database Table Design ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Table.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The image shows the schema for the new table which will be created to store the calculated values of the metrics. Its attributes are explained below:&lt;br /&gt;
&lt;br /&gt;
*'''response_id:''' This attribute is automatically generated when a user submits a reviewer submits a review.This can be used to link the metrics to a particular reviewer-response map.&lt;br /&gt;
*'''word_count:''' This attribute contains the total number of different words for a particular review.&lt;br /&gt;
*'''suggestions_count:''' This column holds the number of suggestions given per review&lt;br /&gt;
*'''error_count:''' Field containing the number of comments which point to errors in the code.&lt;br /&gt;
*'''offensive_count:''' This attribute contains the number of comments containing offensive words.&lt;br /&gt;
*'''comp_reviews:''' This contains the number of comments which have complete sentences in them.&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
&lt;br /&gt;
# '''View Reviews Text Metrics as Reviewer:''' As a reviewer, he/she can see the text metrics of individual reviews as well as aggregate metrics for all the reviews done for an assignment/project.&lt;br /&gt;
#  '''View Reviews Text Metrics as Reviewee:''' As a reviewee, he/she can see the text metrics of individual reviews received from reviewers as well as aggregate metrics for all the reviews received for an assignment/project.&lt;br /&gt;
#  '''View Reviews Text Metrics as Instructor:'''  As an instructor, he/she can see the text metrics of reviews received by any team for a particular project/assignment. The instructor can also see the text metrics of the reviews done by any reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
&lt;br /&gt;
#For '''use case 1''', test whether the text metrics Db has entries populated for each type of metrics (no. of words, no. of offensive words, etc), once the reviewer submits any reviews.&lt;br /&gt;
#For '''use case 2''', test if the reviewer can see the text metrics of individual reviews received from all reviewers.&lt;br /&gt;
#For '''use case 3''', test if the instructor can see the text metrics of reviews received by each team for a project/assignment. Also, test if the instructor can see the text metrics done by any reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Details of Requirements==&lt;br /&gt;
===Hardware requirements===&lt;br /&gt;
* Computing Power: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Memory: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Disk Storage: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Peripherals: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Network: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
===Software requirements===&lt;br /&gt;
* Operating system environment : Windows/UNIX/OS X based OS&lt;br /&gt;
&lt;br /&gt;
* Networking environment: Same as it is used in the current Expertiza system&lt;br /&gt;
&lt;br /&gt;
* Tools: [https://en.wikipedia.org/wiki/Git_(software) Git], Interactive Ruby&lt;br /&gt;
&lt;br /&gt;
=='''Reference'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
*[https://github.com/moharnab123saikia/expertiza/  Expertiza Github Repository]&lt;/div&gt;</summary>
		<author><name>Pdeka</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015_E1580_Text_metrics&amp;diff=99935</id>
		<title>CSC/ECE 517 Fall 2015 E1580 Text metrics</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015_E1580_Text_metrics&amp;diff=99935"/>
		<updated>2015-11-14T04:55:53Z</updated>

		<summary type="html">&lt;p&gt;Pdeka: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source [https://en.wikipedia.org/wiki/Peer_review peer-review] based web application which allows for incremental learning. Students can submit learning objects such as articles, wiki pages, repository links and with the help of peer reviews, improve them. The project has been developed using the [https://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails] framework and is supported by the [http://www.nsf.gov National Science Foundation]&lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
The current version of The Expertiza Project has an automated meta-review system wherein the reviewer gets an e-mail containing various metrics of his review like relevance, plagiarism, number of words etc. , whenever a review is submitted. The purpose of this project is to give students some metrics on the content of the review when the automated meta reviews are disabled. This also includes the addition of new relevant metrics which can help the reviewers and instructors to gain insight into the reviews.&lt;br /&gt;
&lt;br /&gt;
=== Scope ===&lt;br /&gt;
The scope of the project is limited creating a system where the reviewer and the instructors can view metrics for the submitted reviews.The user or the instructor need to manually visit the link to view the metrics.The instructor can view the metrics for every assignment available whereas the user can view only the metrics of the assignments relating to himself.The scope doesn't include any automated viewing of reports for the metrics.Since the project is mainly related to giving reports about the existing data, we will not be modifying the results saved by the actual [https://en.wikipedia.org/wiki/Peer_review peer-review] mechanism.The scope also excludes any change of the actual peer review process i.e. submitting a review of an assignment or adding an assignment to a user profile.&lt;br /&gt;
&lt;br /&gt;
=== Task Description ===&lt;br /&gt;
&lt;br /&gt;
The project requires completion of the following tasks&lt;br /&gt;
&lt;br /&gt;
# create database table to the metrics&lt;br /&gt;
# create code to calculate the values of the metrics and also ensure that the code runs fast enough (can give results within 5 seconds) as the current auto text metrics functionality is very slow and diminishes user experience.&lt;br /&gt;
# create partials for both students and instructors that show for each assignment:&lt;br /&gt;
#* Total no.of words&lt;br /&gt;
#* average no. of words for all the reviews for the particular assignment in a particular round&lt;br /&gt;
#* if there are suggestions in each reviewer's review&lt;br /&gt;
#* the percentage of peer reviews that offer any suggestions&lt;br /&gt;
#* if problems or errors are pointed out in the reviews&lt;br /&gt;
#* the percentage of the peer-reviews which point out problems in this assignment in this round&lt;br /&gt;
#* if any offensive language is used&lt;br /&gt;
#* the percentage of peer-reviews containing offensive language&lt;br /&gt;
#* No.of different words in a particular reviewer’s review&lt;br /&gt;
#* No. of questions responded to with complete sentences&lt;br /&gt;
# make the code work for an assignment with and without the &amp;quot;vary rubric by rounds&amp;quot; feature&lt;br /&gt;
# create tests to make sure the test coverage increases&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
[[File:e1580flow.JPG]]&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
=== Mockups ===&lt;br /&gt;
====Reviewer Panel====&lt;br /&gt;
The diagrams below show the proposed changes through the perspective of a reviewer.The reviewer can click the '''Show aggregate metrics''' link to view the aggregate metrics.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:User_metrics.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The reviewer can also click the '''Show metrics''' link for each individual review to view the specific metrics for that review.&lt;br /&gt;
&lt;br /&gt;
[[File:Review_metrics.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Instructor Panel====&lt;br /&gt;
&lt;br /&gt;
The image represents instructors view of the Review report after our modifications.The instructor can click '''Show aggregate metrics''' link to view the aggregate metrics for each team for a given assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Inst_aggregate_metrics.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Design Patterns ===&lt;br /&gt;
&lt;br /&gt;
'''Iterator Pattern&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Iterator_pattern&amp;lt;/ref&amp;gt;:'''The iterator design pattern uses an iterator to traverse a container and access its elements.In our implementation, we would require showing the review metrics for each response.So, we can use the iterator design pattern to iterate over the calculated metrics values.&lt;br /&gt;
&lt;br /&gt;
'''FlyWeight Pattern&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Flyweight_pattern&amp;lt;/ref&amp;gt;:''' The flyweight design pattern tries to reduce memory footprint by reusing already existing similar objects by storing them and only creates new object when there is no match. In our case, we can use the same partials of the metrics pages for both the students and instructors.&lt;br /&gt;
&lt;br /&gt;
=== Database Table Design ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Table.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The image shows the schema for the new table which will be created to store the calculated values of the metrics. Its attributes are explained below:&lt;br /&gt;
&lt;br /&gt;
*'''response_id:''' This attribute is automatically generated when a user submits a reviewer submits a review.This can be used to link the metrics to a particular reviewer-response map.&lt;br /&gt;
*'''word_count:''' This attribute contains the total number of different words for a particular review.&lt;br /&gt;
*'''suggestions_count:''' This column holds the number of suggestions given per review&lt;br /&gt;
*'''error_count:''' Field containing the number of comments which point to errors in the code.&lt;br /&gt;
*'''offensive_count:''' This attribute contains the number of comments containing offensive words.&lt;br /&gt;
*'''comp_reviews:''' This contains the number of comments which have complete sentences in them.&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
&lt;br /&gt;
# '''View Reviews Text Metrics as Reviewer:''' As a reviewer, he/she can see the text metrics of individual reviews as well as aggregate metrics for all the reviews done for an assignment/project.&lt;br /&gt;
#  '''View Reviews Text Metrics as Reviewee:''' As a reviewee, he/she can see the text metrics of individual reviews received from reviewers as well as aggregate metrics for all the reviews received for an assignment/project.&lt;br /&gt;
#  '''View Reviews Text Metrics as Instructor:'''  As an instructor, he/she can see the text metrics of reviews received by any team for a particular project/assignment. The instructor can also see the text metrics of the reviews done by any reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
&lt;br /&gt;
#For '''use case 1''', test whether the text metrics Db has entries populated for each type of metrics (no. of words, no. of offensive words, etc), once the reviewer submits any reviews.&lt;br /&gt;
#For '''use case 2''', test if the reviewer can see the text metrics of individual reviews received from all reviewers.&lt;br /&gt;
#For '''use case 3''', test if the instructor can see the text metrics of reviews received by each team for a project/assignment. Also, test if the instructor can see the text metrics done by any reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Details of Requirements==&lt;br /&gt;
===Hardware requirements===&lt;br /&gt;
* Computing Power: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Memory: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Disk Storage: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Peripherals: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Network: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
===Software requirements===&lt;br /&gt;
* Operating system environment : Windows/UNIX/OS X based OS&lt;br /&gt;
&lt;br /&gt;
* Networking environment: Same as it is used in the current Expertiza system&lt;br /&gt;
&lt;br /&gt;
* Tools: [https://en.wikipedia.org/wiki/Git_(software) Git], Interactive Ruby&lt;br /&gt;
&lt;br /&gt;
=='''Reference'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
*[https://github.com/moharnab123saikia/expertiza/  Expertiza Github Repository]&lt;/div&gt;</summary>
		<author><name>Pdeka</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015_E1580_Text_metrics&amp;diff=99934</id>
		<title>CSC/ECE 517 Fall 2015 E1580 Text metrics</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015_E1580_Text_metrics&amp;diff=99934"/>
		<updated>2015-11-14T04:54:38Z</updated>

		<summary type="html">&lt;p&gt;Pdeka: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source [https://en.wikipedia.org/wiki/Peer_review peer-review] based web application which allows for incremental learning. Students can submit learning objects such as articles, wiki pages, repository links and with the help of peer reviews, improve them. The project has been developed using the [https://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails] framework and is supported by the [http://www.nsf.gov National Science Foundation]&lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
The current version of The Expertiza Project has an automated meta-review system wherein the reviewer gets an e-mail containing various metrics of his review like relevance, plagiarism, number of words etc. , whenever a review is submitted. The purpose of this project is to give students some metrics on the content of the review when the automated meta reviews are disabled. This also includes the addition of new relevant metrics which can help the reviewers and instructors to gain insight into the reviews.&lt;br /&gt;
&lt;br /&gt;
=== Scope ===&lt;br /&gt;
The scope of the project is limited creating a system where the reviewer and the instructors can view metrics for the submitted reviews.The user or the instructor need to manually visit the link to view the metrics.The instructor can view the metrics for every assignment available whereas the user can view only the metrics of the assignments relating to himself.The scope doesn't include any automated viewing of reports for the metrics.Since the project is mainly related to giving reports about the existing data, we will not be modifying the results saved by the actual [https://en.wikipedia.org/wiki/Peer_review peer-review] mechanism.The scope also excludes any change of the actual peer review process i.e. submitting a review of an assignment or adding an assignment to a user profile.&lt;br /&gt;
&lt;br /&gt;
=== Task Description ===&lt;br /&gt;
&lt;br /&gt;
The project requires completion of the following tasks&lt;br /&gt;
&lt;br /&gt;
# create database table to the metrics&lt;br /&gt;
# create code to calculate the values of the metrics and also ensure that the code runs fast enough (can give results within 5 seconds) as the current auto text metrics functionality is very slow and diminishes user experience.&lt;br /&gt;
# create partials for both students and instructors that show for each assignment:&lt;br /&gt;
#* Total no.of words&lt;br /&gt;
#* average no. of words for all the reviews for the particular assignment in a particular round&lt;br /&gt;
#* if there are suggestions in each reviewer's review&lt;br /&gt;
#* the percentage of peer reviews that offer any suggestions&lt;br /&gt;
#* if problems or errors are pointed out in the reviews&lt;br /&gt;
#* the percentage of the peer-reviews which point out problems in this assignment in this round&lt;br /&gt;
#* if any offensive language is used&lt;br /&gt;
#* the percentage of peer-reviews containing offensive language&lt;br /&gt;
#* No.of different words in a particular reviewer’s review&lt;br /&gt;
#* No. of questions responded to with complete sentences&lt;br /&gt;
# make the code work for an assignment with and without the &amp;quot;vary rubric by rounds&amp;quot; feature&lt;br /&gt;
# create tests to make sure the test coverage increases&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
[[File:e1580flow.JPG]]&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
=== Mockups ===&lt;br /&gt;
====Reviewer Panel====&lt;br /&gt;
The diagrams below show the proposed changes through the perspective of a reviewer.The reviewer can click the '''Show aggregate metrics''' link to view the aggregate metrics.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:User_metrics.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The reviewer can also click the '''Show metrics''' link for each individual review to view the specific metrics for that review.&lt;br /&gt;
&lt;br /&gt;
[[File:Review_metrics.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Instructor Panel====&lt;br /&gt;
&lt;br /&gt;
The image represents instructors view of the Review report after our modifications.The instructor can click '''Show aggregate metrics''' link to view the aggregate metrics for each team for a given assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Inst_aggregate_metrics.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Design Patterns ===&lt;br /&gt;
&lt;br /&gt;
'''Iterator Pattern&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Iterator_pattern&amp;lt;/ref&amp;gt;:'''The iterator design pattern uses an iterator to traverse a container and access its elements.In our implementation, we would require showing the review metrics for each response.So, we can use the iterator design pattern to iterate over the calculated metrics values.&lt;br /&gt;
&lt;br /&gt;
'''FlyWeight Pattern&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Flyweight_pattern&amp;lt;/ref&amp;gt;:''' The flyweight design pattern tries to reduce memory footprint by reusing already existing similar objects by storing them and only creates new object when there is no match. In our case, we can use the same partials of the metrics pages for both the students and instructors.&lt;br /&gt;
&lt;br /&gt;
=== Database Table Design ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Table.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The image shows the schema for the new table which will be created to store the calculated values of the metrics. Its attributes are explained below:&lt;br /&gt;
&lt;br /&gt;
*'''response_id:''' This attribute is automatically generated when a user submits a reviewer submits a review.This can be used to link the metrics to a particular reviewer-response map.&lt;br /&gt;
*'''word_count:''' This attribute contains the total number of different words for a particular review.&lt;br /&gt;
*'''suggestions_count:''' This column holds the number of suggestions given per review&lt;br /&gt;
*'''error_count:''' Field containing the number of comments which point to errors in the code.&lt;br /&gt;
*'''offensive_count:''' This attribute contains the number of comments containing offensive words.&lt;br /&gt;
*'''comp_reviews:''' This contains the number of comments which have complete sentences in them.&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
&lt;br /&gt;
# '''View Reviews Text Metrics as Reviewer:''' As a reviewer, he/she can see the text metrics of individual reviews as well as aggregate metrics for all the reviews done for an assignment/project.&lt;br /&gt;
#  '''View Reviews Text Metrics as Reviewee:''' As a reviewee, he/she can see the text metrics of individual reviews received from reviewers as well as aggregate metrics for all the reviews received for an assignment/project.&lt;br /&gt;
#  '''View Reviews Text Metrics as Instructor:'''  As an instructor, he/she can see the text metrics of reviews received by any team for a particular project/assignment. The instructor can also see the text metrics of the reviews done by any reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
&lt;br /&gt;
#For '''use case 1''', test whether the text metrics Db has entries populated for each type of metrics (no. of words, no. of offensive words, etc), once the reviewer submits any reviews.&lt;br /&gt;
#For '''use case 2''', test if the reviewer can see the text metrics of individual reviews received from all reviewers.&lt;br /&gt;
#For '''use case 3''', test if the instructor can see the text metrics of reviews received by each team for a project/assignment. Also, test if the instructor can see the text metrics done by any reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Details of Requirements==&lt;br /&gt;
===Hardware requirements===&lt;br /&gt;
* Computing Power: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Memory: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Disk Storage: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Peripherals: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Network: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
===Software requirements===&lt;br /&gt;
* Operating system environment : Windows/UNIX/OS X based OS&lt;br /&gt;
&lt;br /&gt;
* Networking environment: Same as it is used in the current Expertiza system&lt;br /&gt;
&lt;br /&gt;
* Tools: Git, Interactive Ruby&lt;br /&gt;
&lt;br /&gt;
=='''Reference'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
*[https://github.com/moharnab123saikia/expertiza/  Expertiza Github Repository]&lt;/div&gt;</summary>
		<author><name>Pdeka</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015_E1580_Text_metrics&amp;diff=99932</id>
		<title>CSC/ECE 517 Fall 2015 E1580 Text metrics</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015_E1580_Text_metrics&amp;diff=99932"/>
		<updated>2015-11-14T04:50:29Z</updated>

		<summary type="html">&lt;p&gt;Pdeka: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source peer-review based web application which allows for incremental learning. Students can submit learning objects such as articles, wiki pages, repository links and with the help of peer reviews, improve them. The project has been developed using the [https://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails] framework and is supported by the [http://www.nsf.gov National Science Foundation]&lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
The current version of The Expertiza Project has an automated meta-review system wherein the reviewer gets an e-mail containing various metrics of his review like relevance, plagiarism, number of words etc. , whenever a review is submitted. The purpose of this project is to give students some metrics on the content of the review when the automated meta reviews are disabled. This also includes the addition of new relevant metrics which can help the reviewers and instructors to gain insight into the reviews.&lt;br /&gt;
&lt;br /&gt;
=== Scope ===&lt;br /&gt;
The scope of the project is limited creating a system where the reviewer and the instructors can view metrics for the submitted reviews.The user or the instructor need to manually visit the link to view the metrics.The instructor can view the metrics for every assignment available whereas the user can view only the metrics of the assignments relating to himself.The scope doesn't include any automated viewing of reports for the metrics.Since the project is mainly related to giving reports about the existing data, we will not be modifying the results saved by the actual peer-review mechanism.The scope also excludes any change of the actual peer review process i.e. submitting a review of an assignment or adding an assignment to a user profile.&lt;br /&gt;
&lt;br /&gt;
=== Task Description ===&lt;br /&gt;
&lt;br /&gt;
The project requires completion of the following tasks&lt;br /&gt;
&lt;br /&gt;
# create database table to the metrics&lt;br /&gt;
# create code to calculate the values of the metrics and also ensure that the code runs fast enough (can give results within 5 seconds) as the current auto text metrics functionality is very slow and diminishes user experience.&lt;br /&gt;
# create partials for both students and instructors that show for each assignment:&lt;br /&gt;
#* Total no.of words&lt;br /&gt;
#* average no. of words for all the reviews for the particular assignment in a particular round&lt;br /&gt;
#* if there are suggestions in each reviewer's review&lt;br /&gt;
#* the percentage of peer reviews that offer any suggestions&lt;br /&gt;
#* if problems or errors are pointed out in the reviews&lt;br /&gt;
#* the percentage of the peer-reviews which point out problems in this assignment in this round&lt;br /&gt;
#* if any offensive language is used&lt;br /&gt;
#* the percentage of peer-reviews containing offensive language&lt;br /&gt;
#* No.of different words in a particular reviewer’s review&lt;br /&gt;
#* No. of questions responded to with complete sentences&lt;br /&gt;
# make the code work for an assignment with and without the &amp;quot;vary rubric by rounds&amp;quot; feature&lt;br /&gt;
# create tests to make sure the test coverage increases&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
[[File:e1580flow.JPG]]&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
=== Mockups ===&lt;br /&gt;
====Reviewer Panel====&lt;br /&gt;
The diagrams below show the proposed changes through the perspective of a reviewer.The reviewer can click the '''Show aggregate metrics''' link to view the aggregate metrics.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:User_metrics.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The reviewer can also click the '''Show metrics''' link for each individual review to view the specific metrics for that review.&lt;br /&gt;
&lt;br /&gt;
[[File:Review_metrics.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Instructor Panel====&lt;br /&gt;
&lt;br /&gt;
The image represents instructors view of the Review report after our modifications.The instructor can click '''Show aggregate metrics''' link to view the aggregate metrics for each team for a given assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Inst_aggregate_metrics.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Design Patterns ===&lt;br /&gt;
&lt;br /&gt;
'''Iterator Pattern&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Iterator_pattern&amp;lt;/ref&amp;gt;:'''The iterator design pattern uses an iterator to traverse a container and access its elements.In our implementation, we would require showing the review metrics for each response.So, we can use the iterator design pattern to iterate over the calculated metrics values.&lt;br /&gt;
&lt;br /&gt;
'''FlyWeight Pattern&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Flyweight_pattern&amp;lt;/ref&amp;gt;:''' The flyweight design pattern tries to reduce memory footprint by reusing already existing similar objects by storing them and only creates new object when there is no match. In our case, we can use the same partials of the metrics pages for both the students and instructors.&lt;br /&gt;
&lt;br /&gt;
=== Database Table Design ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Table.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The image shows the schema for the new table which will be created to store the calculated values of the metrics. Its attributes are explained below:&lt;br /&gt;
&lt;br /&gt;
*'''response_id:''' This attribute is automatically generated when a user submits a reviewer submits a review.This can be used to link the metrics to a particular reviewer-response map.&lt;br /&gt;
*'''word_count:''' This attribute contains the total number of different words for a particular review.&lt;br /&gt;
*'''suggestions_count:''' This column holds the number of suggestions given per review&lt;br /&gt;
*'''error_count:''' Field containing the number of comments which point to errors in the code.&lt;br /&gt;
*'''offensive_count:''' This attribute contains the number of comments containing offensive words.&lt;br /&gt;
*'''comp_reviews:''' This contains the number of comments which have complete sentences in them.&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
&lt;br /&gt;
# '''View Reviews Text Metrics as Reviewer:''' As a reviewer, he/she can see the text metrics of individual reviews as well as aggregate metrics for all the reviews done for an assignment/project.&lt;br /&gt;
#  '''View Reviews Text Metrics as Reviewee:''' As a reviewee, he/she can see the text metrics of individual reviews received from reviewers as well as aggregate metrics for all the reviews received for an assignment/project.&lt;br /&gt;
#  '''View Reviews Text Metrics as Instructor:'''  As an instructor, he/she can see the text metrics of reviews received by any team for a particular project/assignment. The instructor can also see the text metrics of the reviews done by any reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
&lt;br /&gt;
#For '''use case 1''', test whether the text metrics Db has entries populated for each type of metrics (no. of words, no. of offensive words, etc), once the reviewer submits any reviews.&lt;br /&gt;
#For '''use case 2''', test if the reviewer can see the text metrics of individual reviews received from all reviewers.&lt;br /&gt;
#For '''use case 3''', test if the instructor can see the text metrics of reviews received by each team for a project/assignment. Also, test if the instructor can see the text metrics done by any reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Details of Requirements==&lt;br /&gt;
===Hardware requirements===&lt;br /&gt;
* Computing Power: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Memory: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Disk Storage: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Peripherals: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Network: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
===Software requirements===&lt;br /&gt;
* Operating system environment : Windows/UNIX/OS X based OS&lt;br /&gt;
&lt;br /&gt;
* Networking environment: Same as it is used in the current Expertiza system&lt;br /&gt;
&lt;br /&gt;
* Tools: Git, Interactive Ruby&lt;br /&gt;
&lt;br /&gt;
=='''Reference'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
*[https://github.com/moharnab123saikia/expertiza/  Expertiza Github Repository]&lt;/div&gt;</summary>
		<author><name>Pdeka</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015_E1580_Text_metrics&amp;diff=99927</id>
		<title>CSC/ECE 517 Fall 2015 E1580 Text metrics</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015_E1580_Text_metrics&amp;diff=99927"/>
		<updated>2015-11-14T04:42:43Z</updated>

		<summary type="html">&lt;p&gt;Pdeka: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source peer-review based web application which allows for incremental learning. Students can submit learning objects such as articles, wiki pages, repository links and with the help of peer reviews, improve them. The project has been developed using the Ruby on Rails&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Ruby_on_Rails&amp;lt;/ref&amp;gt; framework and is supported by the National Science Foundation&amp;lt;ref&amp;gt;http://www.nsf.gov&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
The current version of The Expertiza Project has an automated meta-review system wherein the reviewer gets an e-mail containing various metrics of his review like relevance, plagiarism, number of words etc. , whenever a review is submitted. The purpose of this project is to give students some metrics on the content of the review when the automated meta reviews are disabled. This also includes the addition of new relevant metrics which can help the reviewers and instructors to gain insight into the reviews.&lt;br /&gt;
&lt;br /&gt;
=== Scope ===&lt;br /&gt;
The scope of the project is limited creating a system where the reviewer and the instructors can view metrics for the submitted reviews.The user or the instructor need to manually visit the link to view the metrics.The instructor can view the metrics for every assignment available whereas the user can view only the metrics of the assignments relating to himself.The scope doesn't include any automated viewing of reports for the metrics.Since the project is mainly related to giving reports about the existing data, we will not be modifying the results saved by the actual peer-review mechanism.The scope also excludes any change of the actual peer review process i.e. submitting a review of an assignment or adding an assignment to a user profile.&lt;br /&gt;
&lt;br /&gt;
=== Task Description ===&lt;br /&gt;
&lt;br /&gt;
The project requires completion of the following tasks&lt;br /&gt;
&lt;br /&gt;
# create database table to the metrics&lt;br /&gt;
# create code to calculate the values of the metrics and also ensure that the code runs fast enough (can give results within 5 seconds) as the current auto text metrics functionality is very slow and diminishes user experience.&lt;br /&gt;
# create partials for both students and instructors that show for each assignment:&lt;br /&gt;
#* Total no.of words&lt;br /&gt;
#* average no. of words for all the reviews for the particular assignment in a particular round&lt;br /&gt;
#* if there are suggestions in each reviewer's review&lt;br /&gt;
#* the percentage of peer reviews that offer any suggestions&lt;br /&gt;
#* if problems or errors are pointed out in the reviews&lt;br /&gt;
#* the percentage of the peer-reviews which point out problems in this assignment in this round&lt;br /&gt;
#* if any offensive language is used&lt;br /&gt;
#* the percentage of peer-reviews containing offensive language&lt;br /&gt;
#* No.of different words in a particular reviewer’s review&lt;br /&gt;
#* No. of questions responded to with complete sentences&lt;br /&gt;
# make the code work for an assignment with and without the &amp;quot;vary rubric by rounds&amp;quot; feature&lt;br /&gt;
# create tests to make sure the test coverage increases&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
[[File:e1580flow.JPG]]&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
=== Mockups ===&lt;br /&gt;
====Reviewer Panel====&lt;br /&gt;
The diagrams below show the proposed changes through the perspective of a reviewer.The reviewer can click the '''Show aggregate metrics''' link to view the aggregate metrics.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:User_metrics.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The reviewer can also click the '''Show metrics''' link for each individual review to view the specific metrics for that review.&lt;br /&gt;
&lt;br /&gt;
[[File:Review_metrics.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Instructor Panel====&lt;br /&gt;
&lt;br /&gt;
The image represents instructors view of the Review report after our modifications.The instructor can click '''Show aggregate metrics''' link to view the aggregate metrics for each team for a given assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Inst_aggregate_metrics.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Design Patterns ===&lt;br /&gt;
&lt;br /&gt;
'''Iterator Pattern&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Iterator_pattern&amp;lt;/ref&amp;gt;:'''The iterator design pattern uses an iterator to traverse a container and access its elements.In our implementation, we would require showing the review metrics for each response.So, we can use the iterator design pattern to iterate over the calculated metrics values.&lt;br /&gt;
&lt;br /&gt;
'''FlyWeight Pattern&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Flyweight_pattern&amp;lt;/ref&amp;gt;:''' The flyweight design pattern tries to reduce memory footprint by reusing already existing similar objects by storing them and only creates new object when there is no match. In our case, we can use the same partials of the metrics pages for both the students and instructors.&lt;br /&gt;
&lt;br /&gt;
=== Database Table Design ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Table.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The image shows the schema for the new table which will be created to store the calculated values of the metrics. Its attributes are explained below:&lt;br /&gt;
&lt;br /&gt;
*'''response_id:''' This attribute is automatically generated when a user submits a reviewer submits a review.This can be used to link the metrics to a particular reviewer-response map.&lt;br /&gt;
*'''word_count:''' This attribute contains the total number of different words for a particular review.&lt;br /&gt;
*'''suggestions_count:''' This column holds the number of suggestions given per review&lt;br /&gt;
*'''error_count:''' Field containing the number of comments which point to errors in the code.&lt;br /&gt;
*'''offensive_count:''' This attribute contains the number of comments containing offensive words.&lt;br /&gt;
*'''comp_reviews:''' This contains the number of comments which have complete sentences in them.&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
&lt;br /&gt;
# '''View Reviews Text Metrics as Reviewer:''' As a reviewer, he/she can see the text metrics of individual reviews as well as aggregate metrics for all the reviews done for an assignment/project.&lt;br /&gt;
#  '''View Reviews Text Metrics as Reviewee:''' As a reviewee, he/she can see the text metrics of individual reviews received from reviewers as well as aggregate metrics for all the reviews received for an assignment/project.&lt;br /&gt;
#  '''View Reviews Text Metrics as Instructor:'''  As an instructor, he/she can see the text metrics of reviews received by any team for a particular project/assignment. The instructor can also see the text metrics of the reviews done by any reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
&lt;br /&gt;
#For '''use case 1''', test whether the text metrics Db has entries populated for each type of metrics (no. of words, no. of offensive words, etc), once the reviewer submits any reviews.&lt;br /&gt;
#For '''use case 2''', test if the reviewer can see the text metrics of individual reviews received from all reviewers.&lt;br /&gt;
#For '''use case 3''', test if the instructor can see the text metrics of reviews received by each team for a project/assignment. Also, test if the instructor can see the text metrics done by any reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Details of Requirements==&lt;br /&gt;
===Hardware requirements===&lt;br /&gt;
* Computing Power: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Memory: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Disk Storage: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Peripherals: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Network: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
===Software requirements===&lt;br /&gt;
* Operating system environment : Windows/UNIX/OS X based OS&lt;br /&gt;
&lt;br /&gt;
* Networking environment: Same as it is used in the current Expertiza system&lt;br /&gt;
&lt;br /&gt;
* Tools: Git, Interactive Ruby&lt;br /&gt;
&lt;br /&gt;
=='''Reference'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
*[https://github.com/moharnab123saikia/expertiza/  Expertiza Github Repository]&lt;/div&gt;</summary>
		<author><name>Pdeka</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015_E1580_Text_metrics&amp;diff=99907</id>
		<title>CSC/ECE 517 Fall 2015 E1580 Text metrics</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015_E1580_Text_metrics&amp;diff=99907"/>
		<updated>2015-11-14T04:20:37Z</updated>

		<summary type="html">&lt;p&gt;Pdeka: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source peer-review based web application which allows for incremental learning. Students can submit learning objects such as articles, wiki pages, repository links and with the help of peer reviews, improve them. The project has been developed using the Ruby on Rails framework and is supported by the National Science Foundation&lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
The current version of The Expertiza Project has an automated meta-review system wherein the reviewer gets an e-mail containing various metrics of his review like relevance, plagiarism, number of words etc. , whenever a review is submitted. The purpose of this project is to give students some metrics on the content of the review when the automated meta reviews are disabled. This also includes the addition of new relevant metrics which can help the reviewers and instructors to gain insight into the reviews.&lt;br /&gt;
&lt;br /&gt;
=== Scope ===&lt;br /&gt;
The scope of the project is limited creating a system where the reviewer and the instructors can view metrics for the submitted reviews.The user or the instructor need to manually visit the link to view the metrics.The instructor can view the metrics for every assignment available whereas the user can view only the metrics of the assignments relating to himself.The scope doesn't include any automated viewing of reports for the metrics.Since the project is mainly related to giving reports about the existing data, we will not be modifying the results saved by the actual peer-review mechanism.The scope also excludes any change of the actual peer review process i.e. submitting a review of an assignment or adding an assignment to a user profile.&lt;br /&gt;
&lt;br /&gt;
=== Task Description ===&lt;br /&gt;
&lt;br /&gt;
The project requires completion of the following tasks&lt;br /&gt;
&lt;br /&gt;
# create database table to the metrics&lt;br /&gt;
# create code to calculate the values of the metrics and also ensure that the code runs fast enough (can give results within 5 seconds) as the current auto text metrics functionality is very slow and diminishes user experience.&lt;br /&gt;
# create partials for both students and instructors that show for each assignment:&lt;br /&gt;
#* Total no.of words&lt;br /&gt;
#* average no. of words for all the reviews for the particular assignment in a particular round&lt;br /&gt;
#* if there are suggestions in each reviewer's review&lt;br /&gt;
#* the percentage of peer reviews that offer any suggestions&lt;br /&gt;
#* if problems or errors are pointed out in the reviews&lt;br /&gt;
#* the percentage of the peer-reviews which point out problems in this assignment in this round&lt;br /&gt;
#* if any offensive language is used&lt;br /&gt;
#* the percentage of peer-reviews containing offensive language&lt;br /&gt;
#* No.of different words in a particular reviewer’s review&lt;br /&gt;
#* No. of questions responded to with complete sentences&lt;br /&gt;
# make the code work for an assignment with and without the &amp;quot;vary rubric by rounds&amp;quot; feature&lt;br /&gt;
# create tests to make sure the test coverage increases&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
[[File:e1580flow.JPG]]&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
=== Mockups ===&lt;br /&gt;
====Reviewer Panel====&lt;br /&gt;
The diagrams below show the proposed changes through the perspective of a reviewer.The reviewer can click the '''Show aggregate metrics''' link to view the aggregate metrics.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:User_metrics.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The reviewer can also click the '''Show metrics''' link for each individual review to view the specific metrics for that review.&lt;br /&gt;
&lt;br /&gt;
[[File:Review_metrics.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Instructor Panel====&lt;br /&gt;
&lt;br /&gt;
The image represents instructors view of the Review report after our modifications.The instructor can click '''Show aggregate metrics''' link to view the aggregate metrics for each team for a given assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Inst_aggregate_metrics.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Design Patterns ===&lt;br /&gt;
&lt;br /&gt;
'''Iterator Pattern&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Iterator_pattern&amp;lt;/ref&amp;gt;:'''The iterator design pattern uses an iterator to traverse a container and access its elements.In our implementation, we would require showing the review metrics for each response.So, we can use the iterator design pattern to iterate over the calculated metrics values.&lt;br /&gt;
&lt;br /&gt;
'''FlyWeight Pattern&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Flyweight_pattern&amp;lt;/ref&amp;gt;:''' The flyweight design pattern tries to reduce memory footprint by reusing already existing similar objects by storing them and only creates new object when there is no match. In our case, we can use the same partials of the metrics pages for both the students and instructors.&lt;br /&gt;
&lt;br /&gt;
=== Database Table Design ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Table.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The image shows the schema for the new table which will be created to store the calculated values of the metrics. Its attributes are explained below:&lt;br /&gt;
&lt;br /&gt;
*'''response_id:''' This attribute is automatically generated when a user submits a reviewer submits a review.This can be used to link the metrics to a particular reviewer-response map.&lt;br /&gt;
*'''word_count:''' This attribute contains the total number of different words for a particular review.&lt;br /&gt;
*'''suggestions_count:''' This column holds the number of suggestions given per review&lt;br /&gt;
*'''error_count:''' Field containing the number of comments which point to errors in the code.&lt;br /&gt;
*'''offensive_count:''' This attribute contains the number of comments containing offensive words.&lt;br /&gt;
*'''comp_reviews:''' This contains the number of comments which have complete sentences in them.&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
&lt;br /&gt;
# '''View Reviews Text Metrics as Reviewer:''' As a reviewer, he/she can see the text metrics of individual reviews as well as aggregate metrics for all the reviews done for an assignment/project.&lt;br /&gt;
#  '''View Reviews Text Metrics as Reviewee:''' As a reviewee, he/she can see the text metrics of individual reviews received from reviewers as well as aggregate metrics for all the reviews received for an assignment/project.&lt;br /&gt;
#  '''View Reviews Text Metrics as Instructor:'''  As an instructor, he/she can see the text metrics of reviews received by any team for a particular project/assignment. The instructor can also see the text metrics of the reviews done by any reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
&lt;br /&gt;
#For '''use case 1''', test whether the text metrics Db has entries populated for each type of metrics (no. of words, no. of offensive words, etc), once the reviewer submits any reviews.&lt;br /&gt;
#For '''use case 2''', test if the reviewer can see the text metrics of individual reviews received from all reviewers.&lt;br /&gt;
#For '''use case 3''', test if the instructor can see the text metrics of reviews received by each team for a project/assignment. Also, test if the instructor can see the text metrics done by any reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Details of Requirements==&lt;br /&gt;
===Hardware requirements===&lt;br /&gt;
* Computing Power: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Memory: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Disk Storage: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Peripherals: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Network: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
===Software requirements===&lt;br /&gt;
* Operating system environment : Windows/UNIX/OS X based OS&lt;br /&gt;
&lt;br /&gt;
* Networking environment: Same as it is used in the current Expertiza system&lt;br /&gt;
&lt;br /&gt;
* Tools: Git, Interactive Ruby&lt;br /&gt;
&lt;br /&gt;
=='''Reference'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
*[https://github.com/moharnab123saikia/expertiza/  Expertiza Github Repository]&lt;/div&gt;</summary>
		<author><name>Pdeka</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015_E1580_Text_metrics&amp;diff=99902</id>
		<title>CSC/ECE 517 Fall 2015 E1580 Text metrics</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015_E1580_Text_metrics&amp;diff=99902"/>
		<updated>2015-11-14T04:17:16Z</updated>

		<summary type="html">&lt;p&gt;Pdeka: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source peer-review based web application which allows for incremental learning. Students can submit learning objects such as articles, wiki pages, repository links and with the help of peer reviews, improve them. The project has been developed using the Ruby on Rails framework and is supported by the National Science Foundation&lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
The current version of The Expertiza Project has an automated meta-review system wherein the reviewer gets an e-mail containing various metrics of his review like relevance, plagiarism, number of words etc. , whenever a review is submitted. The purpose of this project is to give students some metrics on the content of the review when the automated meta reviews are disabled. This also includes the addition of new relevant metrics which can help the reviewers and instructors to gain insight into the reviews.&lt;br /&gt;
&lt;br /&gt;
=== Scope ===&lt;br /&gt;
The scope of the project is limited creating a system where the reviewer and the instructors can view metrics for the submitted reviews.The user or the instructor need to manually visit the link to view the metrics.The instructor can view the metrics for every assignment available whereas the user can view only the metrics of the assignments relating to himself.The scope doesn't include any automated viewing of reports for the metrics.Since the project is mainly related to giving reports about the existing data, we will not be modifying the results saved by the actual peer-review mechanism.The scope also excludes any change of the actual peer review process i.e. submitting a review of an assignment or adding an assignment to a user profile.&lt;br /&gt;
&lt;br /&gt;
=== Task Description ===&lt;br /&gt;
&lt;br /&gt;
The project requires completion of the following tasks&lt;br /&gt;
&lt;br /&gt;
# create database table to the metrics&lt;br /&gt;
# create code to calculate the values of the metrics and also ensure that the code runs fast enough (can give results within 5 seconds) as the current auto text metrics functionality is very slow and diminishes user experience.&lt;br /&gt;
# create partials for both students and instructors that show for each assignment:&lt;br /&gt;
#* Total no.of words&lt;br /&gt;
#* average no. of words for all the reviews for the particular assignment in a particular round&lt;br /&gt;
#* if there are suggestions in each reviewer's review&lt;br /&gt;
#* the percentage of peer reviews that offer any suggestions&lt;br /&gt;
#* if problems or errors are pointed out in the reviews&lt;br /&gt;
#* the percentage of the peer-reviews which point out problems in this assignment in this round&lt;br /&gt;
#* if any offensive language is used&lt;br /&gt;
#* the percentage of peer-reviews containing offensive language&lt;br /&gt;
#* No.of different words in a particular reviewer’s review&lt;br /&gt;
#* No. of questions responded to with complete sentences&lt;br /&gt;
# make the code work for an assignment with and without the &amp;quot;vary rubric by rounds&amp;quot; feature&lt;br /&gt;
# create tests to make sure the test coverage increases&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
[[File:e1580flow.JPG]]&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
=== Mockups ===&lt;br /&gt;
====Reviewer Panel====&lt;br /&gt;
The diagrams below show the proposed changes through the perspective of a reviewer.The reviewer can click the '''Show aggregate metrics''' link to view the aggregate metrics.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:User_metrics.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The reviewer can also click the '''Show metrics''' link for each individual review to view the specific metrics for that review.&lt;br /&gt;
&lt;br /&gt;
[[File:Review_metrics.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Instructor Panel====&lt;br /&gt;
&lt;br /&gt;
The image represents instructors view of the Review report after our modifications.The instructor can click '''Show aggregate metrics''' link to view the aggregate metrics for each team for a given assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Inst_aggregate_metrics.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Design Patterns ===&lt;br /&gt;
&lt;br /&gt;
'''Iterator Pattern&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Iterator_pattern&amp;lt;/ref&amp;gt;:'''The iterator design pattern uses an iterator to traverse a container and access its elements.In our implementation, we would require showing the review metrics for each response.So, we can use the iterator design pattern to iterate over the calculated metrics values.&lt;br /&gt;
&lt;br /&gt;
'''FlyWeight Pattern&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Flyweight_pattern&amp;lt;/ref&amp;gt;:''' The flyweight design pattern tries to reduce memory footprint by reusing already existing similar objects by storing them and only creates new object when there is no match. In our case, we can use the same partials of the metrics pages for both the students and instructors.&lt;br /&gt;
&lt;br /&gt;
=== Database Table Design ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Table.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The image shows the schema for the new table which will be created to store the calculated values of the metrics. Its attributes are explained below:&lt;br /&gt;
&lt;br /&gt;
*'''response_id:''' This attribute is automatically generated when a user submits a reviewer submits a review.This can be used to link the metrics to a particular reviewer-response map.&lt;br /&gt;
*'''word_count:''' This attribute contains the total number of different words for a particular review.&lt;br /&gt;
*'''suggestions_count:''' This column holds the number of suggestions given per review&lt;br /&gt;
*'''error_count:''' Field containing the number of comments which point to errors in the code.&lt;br /&gt;
*'''offensive_count:''' This attribute contains the number of comments containing offensive words.&lt;br /&gt;
*'''comp_reviews:''' This contains the number of comments which have complete sentences in them.&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
&lt;br /&gt;
# '''View Reviews Text Metrics as Reviewer:''' As a reviewer, he/she can see the text metrics of individual reviews as well as aggregate metrics for all the reviews done for an assignment/project.&lt;br /&gt;
#  '''View Reviews Text Metrics as Reviewee:''' As a reviewee, he/she can see the text metrics of individual reviews received from reviewers as well as aggregate metrics for all the reviews received for an assignment/project.&lt;br /&gt;
#  '''View Reviews Text Metrics as Instructor:'''  As an instructor, he/she can see the text metrics of reviews received by any team for a particular project/assignment. The instructor can also see the text metrics of the reviews done by any reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
&lt;br /&gt;
#For '''use case 1''', test whether the text metrics Db has entries populated for each type of metrics (no. of words, no. of offensive words, etc), once the reviewer submits any reviews.&lt;br /&gt;
#For '''use case 2''', test if the reviewer can see the text metrics of individual reviews received from all reviewers.&lt;br /&gt;
#For '''use case 3''', test if the instructor can see the text metrics of reviews received by each team for a project/assignment. Also, test if the instructor can see the text metrics done by any reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Details of Requirements==&lt;br /&gt;
===Hardware requirements===&lt;br /&gt;
* Computing Power: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Memory: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Disk Storage: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Peripherals: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
* Network: Same as the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
===Software requirements===&lt;br /&gt;
* Operating system environment : Windows/UNIX/OS X based OS&lt;br /&gt;
&lt;br /&gt;
* Networking environment: Same as it is used in the current Expertiza system&lt;br /&gt;
&lt;br /&gt;
* Tools: Git, Interactive Ruby&lt;br /&gt;
&lt;br /&gt;
=='''Reference'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pdeka</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1560_PSV&amp;diff=97501</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=97501"/>
		<updated>2015-10-31T06:47:19Z</updated>

		<summary type="html">&lt;p&gt;Pdeka: &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;
= References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pdeka</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1560_PSV&amp;diff=97500</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=97500"/>
		<updated>2015-10-31T06:46:14Z</updated>

		<summary type="html">&lt;p&gt;Pdeka: &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;
= References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pdeka</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1560_PSV&amp;diff=97499</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=97499"/>
		<updated>2015-10-31T06:44:45Z</updated>

		<summary type="html">&lt;p&gt;Pdeka: &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;
===Case 1.1: 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;
===Case 1.2: 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;
===Case 1.3: 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;
===Case 2.1: 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;
===Case 2.2: 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;
===Case 2.3: 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;
===Case 2.4: 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;
= References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pdeka</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1560_PSV&amp;diff=97498</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=97498"/>
		<updated>2015-10-31T06:38:30Z</updated>

		<summary type="html">&lt;p&gt;Pdeka: &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;
==Case 1.1: 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;
==Case 1.2: 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;
==Case 1.3: 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;
==Case 2.1: 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;
==Case 2.2: 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;
==Case 2.3: 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;
==Case 2.4: 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;
= References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pdeka</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1560_PSV&amp;diff=97497</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=97497"/>
		<updated>2015-10-31T06:34:48Z</updated>

		<summary type="html">&lt;p&gt;Pdeka: &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;
==Case 1.1: 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;
==Case 1.2: 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;
==Case 1.3: 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;
==Case 2.1: 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;
{| 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;
==Case 2.2: 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;
{| 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;
==Case 2.3: 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;
==Case 2.4: 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;
= References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pdeka</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1560_PSV&amp;diff=97495</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=97495"/>
		<updated>2015-10-31T06:26:28Z</updated>

		<summary type="html">&lt;p&gt;Pdeka: &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 Instance variables need to be changed to local variable wherever possible.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;1.4 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;
==Case 1.1: 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;
==Case 1.2: Refactored &amp;lt;code&amp;gt;Team_user_popup&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;
 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;
==Case 1.3: Redundant instance variables changed 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;
 &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;
==Case 1.4: 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;
==Case 2.1: 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;
{| 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;
==Case 2.2: 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;
{| 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;
==Case 2.3: 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;
==Case 2.4: 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;
= References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pdeka</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1560_PSV&amp;diff=97491</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=97491"/>
		<updated>2015-10-31T06:20:20Z</updated>

		<summary type="html">&lt;p&gt;Pdeka: &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 Instance variables need to be changed to local variable wherever possible.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;1.4 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;
==Case 1.1: 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;
==Case 1.2: Refactored &amp;lt;code&amp;gt;Team_user_popup&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;
 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;
==Case 1.3: Redundant instance variables changed 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;
 &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;
==Case 1.4: 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;
==Case 2.1: 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;
{| 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;
==Case 2.2: 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;
{| 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;
==Case 2.3: 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;
==Case 2.4: 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;
= References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pdeka</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1560_PSV&amp;diff=97483</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=97483"/>
		<updated>2015-10-31T06:14:31Z</updated>

		<summary type="html">&lt;p&gt;Pdeka: &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 Instance variables need to be changed to local variable wherever possible.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;1.4 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;
==Case 1.1: 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;
==Case 1.2: Refactored &amp;lt;code&amp;gt;Team_user_popup&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;
==Case 1.3: Redundant instance variables changed 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;
 &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;
==Case 1.4: 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;
==Case 2.1: 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;
{| 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;
==Case 2.2: 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;
{| 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;
==Case 2.3: 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;
==Case 2.4: 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;
= References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pdeka</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1560_PSV&amp;diff=97480</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=97480"/>
		<updated>2015-10-31T06:11:56Z</updated>

		<summary type="html">&lt;p&gt;Pdeka: &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 Instance variables need to be changed to local variable wherever possible.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;1.4 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;
==Case 1.1: 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;
 &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;
==Case 1.2: Refactored &amp;lt;code&amp;gt;Team_user_popup&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;
==Case 1.3: Redundant instance variables changed 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;
 &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;
==Case 1.4: 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;
==Case 2.1: 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;
{| 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;
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;
==Case 2.2: 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;
{| 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;
==Case 2.3: 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;
==Case 2.4: 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;
= References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pdeka</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1560_PSV&amp;diff=97477</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=97477"/>
		<updated>2015-10-31T06:07:58Z</updated>

		<summary type="html">&lt;p&gt;Pdeka: &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 Instance variables need to be changed to local variable wherever possible.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;1.4 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;
==Case 1.1: 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;
 &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;
==Case 1.2: Refactored &amp;lt;code&amp;gt;Team_user_popup&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;
==Case 1.3: Redundant instance variables changed 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;
 &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;
==Case 1.4: 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;
==Case 2.1: 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;
{| 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;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
def add&lt;br /&gt;
......&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;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
==Case 2.2: 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;
{| 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;
==Case 2.3: 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;
==Case 2.4: 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;
= References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pdeka</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1560_PSV&amp;diff=97476</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=97476"/>
		<updated>2015-10-31T06:04:37Z</updated>

		<summary type="html">&lt;p&gt;Pdeka: &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 Instance variables need to be changed to local variable wherever possible.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;1.4 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;
==Case 1.1: 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;
 &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;
==Case 1.2: Refactored &amp;lt;code&amp;gt;Team_user_popup&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;
==Case 1.3: Redundant instance variables changed 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;
 &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;
==Case 1.4: 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;
==Case 2.1: 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;
{| 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;
==Case 2.2: 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;
{| 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;
==Case 2.3: 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;
==Case 2.4: 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;
= References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pdeka</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1560_PSV&amp;diff=97462</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=97462"/>
		<updated>2015-10-31T05:22:07Z</updated>

		<summary type="html">&lt;p&gt;Pdeka: &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;
__TOC__&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 Instance variables need to be changed to local variable wherever possible.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;1.4 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;
==Case 1.1: 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;
 &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;
==Case 1.2: Refactored &amp;lt;code&amp;gt;Team_user_popup&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;
==Case 1.3: Redundant instance variables changed 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;
 &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;
==Case 1.4: 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;
==Case 2.1: 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;
{| 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;
==Case 2.2: 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;
{| 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;
==Case 2.3: 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;
==Case 2.4: 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;
= References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pdeka</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1560_PSV&amp;diff=97460</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=97460"/>
		<updated>2015-10-31T05:17:55Z</updated>

		<summary type="html">&lt;p&gt;Pdeka: &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;
__TOC__&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 Instance variables need to be changed to local variable wherever possible.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;1.4 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;
==Case 1.1: Modified &amp;lt;code&amp;gt;Action_allowed&amp;lt;/code&amp;gt; method to return true only if .. ==&lt;br /&gt;
==Case 1.2: Refactored &amp;lt;code&amp;gt;Team_user_popup&amp;lt;/code&amp;gt; method ==&lt;br /&gt;
==Case 1.3: Redundant instance variables changed to local variables ==&lt;br /&gt;
==Case 1.4: Refactored Participants_popup and team_users_popup methods into smaller private methods ==&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;
==Case 2.1: 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;
==Case 2.2: 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;
==Case 2.3: Flash messages clustered under a single private method ==&lt;br /&gt;
==Case 2.4: Fixed &amp;lt;code&amp;gt;email_sent&amp;lt;/code&amp;gt; method ==&lt;br /&gt;
&lt;br /&gt;
= References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pdeka</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1560_PSV&amp;diff=97459</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=97459"/>
		<updated>2015-10-31T05:16:30Z</updated>

		<summary type="html">&lt;p&gt;Pdeka: &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;
__TOC__&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 Instance variables need to be changed to local variable wherever possible.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;1.4 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;
==Case 1.1: Modified &amp;lt;code&amp;gt;Action_allowed&amp;lt;/code&amp;gt; method to return true only if .. ==&lt;br /&gt;
==Case 1.2: Refactored &amp;lt;code&amp;gt;Team_user_popup&amp;lt;/code&amp;gt; method ==&lt;br /&gt;
==Case 1.3: Redundant instance variables changed to local variables ==&lt;br /&gt;
==Case 1.4: Refactored Participants_popup and team_users_popup methods into smaller private methods ==&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;
==Case 2.1: Permissions collection object referenced directly and removed private variables 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;
==Case 2.2: 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;
==Case 2.3: Flash messages clustered under a single private method ==&lt;br /&gt;
==Case 2.4: Fixed &amp;lt;code&amp;gt;email_sent&amp;lt;/code&amp;gt; method ==&lt;br /&gt;
&lt;br /&gt;
= References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pdeka</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1560_PSV&amp;diff=97457</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=97457"/>
		<updated>2015-10-31T04:57:24Z</updated>

		<summary type="html">&lt;p&gt;Pdeka: &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], and the latest active branch is [https://github.com/expertiza/expertiza/tree/rails4 &amp;quot;Rails 4&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
__TOC__&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&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, what is id2.Comments can be added at 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 Change instance variables to local variables where possible.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;1.4 Participants_popup and team_users_popup methods must be refactored 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. It will make the code more concise.&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. It will make them easy to manage.&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. Check if this method can be removed.&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;'''1 PopUpController.rb'''&amp;lt;/p&amp;gt;&lt;br /&gt;
==Case 1.1: Modified &amp;lt;code&amp;gt;Action_allowed&amp;lt;/code&amp;gt; method to return true only if .. ==&lt;br /&gt;
==Case 1.2: ==&lt;br /&gt;
==Case 1.3: ==&lt;br /&gt;
==Case 1.4: ==&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;
==Case 2.1: ==&lt;br /&gt;
==Case 2.2: ==&lt;br /&gt;
==Case 2.3: ==&lt;br /&gt;
==Case 2.4: ==&lt;br /&gt;
&lt;br /&gt;
= References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pdeka</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1560_PSV&amp;diff=97455</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=97455"/>
		<updated>2015-10-31T04:50:23Z</updated>

		<summary type="html">&lt;p&gt;Pdeka: &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], and the latest active branch is [https://github.com/expertiza/expertiza/tree/rails4 &amp;quot;Rails 4&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
__TOC__&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&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, what is id2.Comments can be added at 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 Change instance variables to local variables where possible.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;1.4 Participants_popup and team_users_popup methods must be refactored 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. It will make the code more concise.&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. It will make them easy to manage.&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. Check if this method can be removed.&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;
&lt;br /&gt;
= References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pdeka</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1560_PSV&amp;diff=97448</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=97448"/>
		<updated>2015-10-31T04:34:52Z</updated>

		<summary type="html">&lt;p&gt;Pdeka: Created page with &amp;quot;'''E1560. Refactoring PopUpController.rb and ParticipantsController.rb'''  This page provides a description of the Expertiza based OSS project. This project is aimed at refactori...&amp;quot;&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], and the latest active branch is [https://github.com/expertiza/expertiza/tree/rails4 &amp;quot;Rails 4&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
__TOC__&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;
PopUpController.rb&lt;br /&gt;
ParticipantsController.rb&lt;br /&gt;
&lt;br /&gt;
= References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pdeka</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015&amp;diff=97442</id>
		<title>CSC/ECE 517 Fall 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015&amp;diff=97442"/>
		<updated>2015-10-31T04:18:09Z</updated>

		<summary type="html">&lt;p&gt;Pdeka: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Writing Assignment 2==&lt;br /&gt;
*[[CSC/ECE_517_Fall_2015/sample_page]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2015/ossE1558BGJ]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2015/oss/M1502/AAAASS]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2015/oss/M1503/IntegrateXMLParser]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2015/ossE1568BZHXJS]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2015/ossE1572VGA]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2015/oss_E1573_sap]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2015/oss E1559 rrz]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2015/oss E1570 avr]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2015/oss E1556 CHM]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2015/oss M1504 JJD]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2015/oss E1562 APS]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2015/oss M1501 GSN]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2015/oss M1501 GSN]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2015/oss E1551 RGS]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2015/oss E1555 GMR]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2015/oss E1552 NRR]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2015/oss E1565 AAJ]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2015/oss E1561 WZL]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2015/oss E1553 AAJ]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2015/oss E1554 AAR]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2015/oss E1569 JNR]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2015/oss E1560 PSV]]&lt;/div&gt;</summary>
		<author><name>Pdeka</name></author>
	</entry>
</feed>