<?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=Athakur3</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=Athakur3"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Athakur3"/>
	<updated>2026-09-16T11:00:35Z</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_E1591_Integration_testing_for_peer_review&amp;diff=100103</id>
		<title>CSC/ECE 517 Fall 2015 E1591 Integration testing for peer review</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015_E1591_Integration_testing_for_peer_review&amp;diff=100103"/>
		<updated>2015-12-04T21:44:43Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Background== &lt;br /&gt;
Expertiza&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza Expertiza's Github Site]&amp;lt;/ref&amp;gt; is an open-source web tool that is used for online assignment completion purpose for different courses. The software enables the students to form online teams and choose different assignment topics. Each topic has a completion deadline and the students can submit the links to their work or assignments through expertiza.&lt;br /&gt;
&lt;br /&gt;
One of the key features of expertiza is the online peer review process. Students who are enrolled in the same courses can review the works or the assignments of the fellow students. Typically for each assignment there is a link called &amp;quot;Other’s Work&amp;quot; where a student is prompted to give feedback to the works of their fellow classmates. This link becomes active after a certain date that is determined by the instructor or the administrator. After the date, a student can choose one of the assignments that are available for review through the activated link. &lt;br /&gt;
&lt;br /&gt;
After an assignment has been chosen for review, the reviewer will be presented with a review sheet that has a number of parameters based upon which the review should be done. The reviewer chooses a rating for each parameter, typically being the lowest and 5 as the highest. He can also leave a comment justifying his rating and stating the scopes of improvements for the project. The team members whose assignment has been reviewed can also review the review, i.e. provide an explanation about their work or give comments with respect to the feedback provided by the reviewer.&lt;br /&gt;
&lt;br /&gt;
For some assignments there is a scope for a re submission of an improved version of the work. After such a re-submission the reviewer can again review the assignment editing and updating his previous review based upon the resubmitted work.&lt;br /&gt;
&lt;br /&gt;
==Purpose==&lt;br /&gt;
The purpose of the project is to perform an integration testing for the peer review of a submitted assignment. We aim to write test cases that test the different positive test scenarios for which the reviewer should be able to successfully submit the review to an assignment. The review process has certain minimum guidelines which need to be adhered to. We also plan to test the negative scenarios for which the reviewer doesn’t adhere to these guidelines and hence should not be able to submit the review to the assignment. &lt;br /&gt;
The Expertiza project has been developed using Ruby on Rails. The technologies to be used for the project are RSpec&amp;lt;ref&amp;gt;[http://rspec.info/documentation/ Rspec].''Rspec Documentation''&amp;lt;/ref&amp;gt; and Capybara&amp;lt;ref&amp;gt;[https://github.com/jnicklas/capybara capybara]&amp;lt;/ref&amp;gt; using Ruby on Rails as an underlying framework.  We will write the spec methods using RSpec. The various entities like users, assignment, questionnaire and instructor will be simulated using Capybara.&lt;br /&gt;
&lt;br /&gt;
==Technologies to be used==&lt;br /&gt;
===RSpec===&lt;br /&gt;
&lt;br /&gt;
Rspec is Behavior Driven Development&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Behavior-driven_development Behavior Driven Development]&amp;lt;/ref&amp;gt; framework for ruby, it is a meta gem composed of different libraries designed to work together or with other testing tools like Cucumber&amp;lt;ref&amp;gt;[https://cucumber.io/ Cucumber]&amp;lt;/ref&amp;gt;.  It has dependencies on Rspec core, Rspec expectations, Rspec mocks gems which can be loaded by using 'require'.&lt;br /&gt;
&lt;br /&gt;
Installation-&lt;br /&gt;
  gem install rspec&lt;br /&gt;
&lt;br /&gt;
===Capybara===&lt;br /&gt;
&lt;br /&gt;
Capybara&amp;lt;ref&amp;gt;[https://github.com/jnicklas/capybara Capybara github link]&amp;lt;/ref&amp;gt; is a library written in ruby, it helps you to test your web applications by pretending to be a user and following the user story, it simulates the browser to interact with app to receive pages parse the HTML and submit forms just as an actual user would do.  Capybara can interact with many different drivers which execute  tests through the same clean and simple interface.  One can choose between Selenium, Webkit or pure Ruby drivers.&lt;br /&gt;
&lt;br /&gt;
Installation-&lt;br /&gt;
&lt;br /&gt;
Capybara requires ruby 1.9.3 or later,to install add following line to your gem file and run bundle install&lt;br /&gt;
 gem 'capybara'&lt;br /&gt;
If testing a rails app add this to your test helper file&lt;br /&gt;
 require 'capybara/rails'&lt;br /&gt;
&lt;br /&gt;
===Integration Testing===&lt;br /&gt;
&lt;br /&gt;
Integration testing is a phase of software testing where units which have already been tested are combined into a component and the interface between them is tested&amp;lt;ref&amp;gt;[https://msdn.microsoft.com/en-us/library/aa292128(v=vs.71).aspx Integration Testing - Microsoft Developer Network]&amp;lt;/ref&amp;gt;. The idea is to test combination of pieces and eventually expand  the process to test the modules with those of the other group. Eventually, all the modules making up a process are tested together. &lt;br /&gt;
Integration testing identifies the problem that occurs when units are combined. Some different types of integration testing are big bang, top- down, bottom-up&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Integration_testing Integration Testing - Wikipedia]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Big Bang Integration Testing – All modules are integrated simultaneously, after which everything is tested as a whole. It is very effective for saving time in the integration testing process.&lt;br /&gt;
*The top down approach – The highest level modules are tested first. This allows high level logic and data flow to be integrated early in the process. &lt;br /&gt;
*The bottom up approach  - In this approach, lowest level components are tested first, and then used to facilitate the testing of higher level components.&lt;br /&gt;
&lt;br /&gt;
==Test Pattern and Approach==&lt;br /&gt;
&lt;br /&gt;
We are required to write integration tests for the peer review process. Since we are not adding any new functionalities or amending any existing ones we don’t need to follow any specific design pattern. However we need to follow a specific integration testing approach to conduct the integration testing. The testing approach that we have decided to follow is '''Top-Down'''. &lt;br /&gt;
We are first going to create the following entities &lt;br /&gt;
* '''User or Reviewer'''&lt;br /&gt;
* '''Assignment Questionnaire or Rubric'''&lt;br /&gt;
* '''Assignment'''&lt;br /&gt;
Then we plan to incrementally test the interaction of these entities in a bottom-up manner. &lt;br /&gt;
We first test whether the user is able to successfully login. &lt;br /&gt;
If he is able to successfully login, we test whether he is able to successfully select an assignment for review.&lt;br /&gt;
If he is able to successfully select  an assignment, we test whether he is able to able to submit a review successfully based on whether it is a text-based, point-based or both and whether he chooses to answer all, some or none of the questions of the rubric.&lt;br /&gt;
&lt;br /&gt;
==Flowchart for the Peer Review Testing Approach==&lt;br /&gt;
[[File:FlowchartE1591 2.png]]&lt;br /&gt;
&lt;br /&gt;
==Use Case Diagram==&lt;br /&gt;
&lt;br /&gt;
[[File: UseCaseE1591.png]]&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
The following section describes how we plan on testing the application based requirements found on the Project Description&amp;lt;ref&amp;gt;[https://docs.google.com/document/d/1t0keeNQ2kP0NmcgIrtQXGi5K_GhQYcKzEVWJPPRBOHE/edit Project Description]&amp;lt;/ref&amp;gt;.  We wish to create Integration tests that thoroughly test a Student user reviewing an assignment submission.  We will create a file called spec/features/peer_review.rb to run our integration tests.&lt;br /&gt;
&lt;br /&gt;
=== Test Cases Prerequisites ===&lt;br /&gt;
To create and run our test cases we require some setup in Expertiza.  The following list describes the information that we will enter into the system before running any of our test cases.&lt;br /&gt;
&lt;br /&gt;
# We will use the Student with the username 'student13' and password 'password' to login as a Student.&lt;br /&gt;
# We will enroll Student into a specific course.&lt;br /&gt;
# We will create an Assignment per individual test case that is customized for our test case.&lt;br /&gt;
# We will submit an Assignment from a student other than 'student13' for 'student13' to review &lt;br /&gt;
&lt;br /&gt;
=== Test Cases ===&lt;br /&gt;
The following list describes the individual test cases we will creating for Expertiza.&lt;br /&gt;
&lt;br /&gt;
T1: Login as a Student user and select a submission for review.  The submission will only contain points based review choices.  The user will successfully submit the review answering the points based review choices.&lt;br /&gt;
&lt;br /&gt;
T2: Login as a Student user and select a submission for review.  The submission will only contain points based review choices.  The user will unsuccessfully submit the review by only answering some of the points based review choices.&lt;br /&gt;
&lt;br /&gt;
T3: Login as a Student user and select a submission for review.  The submission will only contain points based review choices.  The user will unsuccessfully submit the review by answering none of the points based review choices.&lt;br /&gt;
&lt;br /&gt;
T4: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will successfully submit the review answering the text based review choices.&lt;br /&gt;
&lt;br /&gt;
T5: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will unsuccessfully submit the review by only answering some of the text based review choices.&lt;br /&gt;
&lt;br /&gt;
T6: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will unsuccessfully submit the review by answering none of the text based review choices.&lt;br /&gt;
&lt;br /&gt;
T7: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will submit the review by answering all of the text based review choices with single word answers.&lt;br /&gt;
&lt;br /&gt;
T8: Login as a Student user and select a submission for review.  The submission will only contain both points based and text based review choices.  The user will successfully submit the review answering all of the review choices.&lt;br /&gt;
&lt;br /&gt;
T9: Login as a Student user and select a submission for review.  The submission will only contain both points based and text based review choices.  The user will unsuccessfully submit the review answering only some of the review choices.&lt;br /&gt;
&lt;br /&gt;
T10: Login as a Student user and select a submission for review.  The submission will only contain both points based and text based review choices.  The user will unsuccessfully submit the review answering none of the review choices.&lt;br /&gt;
&lt;br /&gt;
==Scenarios Tested==&lt;br /&gt;
Six major scenarios were tested. They are as follows:&amp;lt;br&amp;gt;&lt;br /&gt;
====T1: Successfully submitting a review by filling in both points and comments.====&lt;br /&gt;
This scenario tests if a student can successfully submit a review by filling in comments in a text box and selecting a value from the drop down list.&amp;lt;br&amp;gt;The detailed steps are as follows:&lt;br /&gt;
    1. Login as a student&lt;br /&gt;
    2. Select the test assignment for review&lt;br /&gt;
    3. Click on link &amp;quot;Others Work&amp;quot;&lt;br /&gt;
    4. Click on button &amp;quot;Request a new submission to Review&amp;quot;&lt;br /&gt;
    5. Click on the link &amp;quot;Begin&amp;quot;&lt;br /&gt;
    6. Fill in the text box with comment &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
    7. Select the value 5 from drop down list.&lt;br /&gt;
    8. Click on the button &amp;quot;Submit Review&amp;quot;.&lt;br /&gt;
    9. &amp;quot;Your response was successfully saved&amp;quot; should be displayed.&lt;br /&gt;
===T2: Successfully submitting a review by filling in multi word comments.====&lt;br /&gt;
This scenario tests if a student can successfully submit a review by filling in multi word comments in a text box .&amp;lt;br&amp;gt;The detailed steps are as follows:&lt;br /&gt;
    1. Login as a student&lt;br /&gt;
    2. Select the test assignment for review&lt;br /&gt;
    3. Click on link &amp;quot;Others Work&amp;quot;&lt;br /&gt;
    4. Click on button &amp;quot;Request a new submission to Review&amp;quot;&lt;br /&gt;
    5. Click on the link &amp;quot;Begin&amp;quot;&lt;br /&gt;
    6. Fill in the text box with comment &amp;quot;Excellent Work&amp;quot;.&lt;br /&gt;
    7. Click on the button &amp;quot;Submit Review&amp;quot;.&lt;br /&gt;
    8. &amp;quot;Your response was successfully saved&amp;quot; should be displayed.&lt;br /&gt;
===T3: Successfully submitting a review by filling a single comment with single word.===&lt;br /&gt;
This scenario tests if a student can successfully submit a review by filling in single comment with single word in a text box.&amp;lt;br&amp;gt;The detailed steps are as follows:&lt;br /&gt;
    1. Login as a student&lt;br /&gt;
    2. Select the test assignment for review&lt;br /&gt;
    3. Click on link &amp;quot;Others Work&amp;quot;&lt;br /&gt;
    4. Click on button &amp;quot;Request a new submission to Review&amp;quot;&lt;br /&gt;
    5. Click on the link &amp;quot;Begin&amp;quot;&lt;br /&gt;
    6. Fill in the text box with comment &amp;quot;Excellent&amp;quot;.&lt;br /&gt;
    7. Click on the button &amp;quot;Submit Review&amp;quot;.&lt;br /&gt;
    8. &amp;quot;Your response was successfully saved&amp;quot; should be displayed.&lt;br /&gt;
===T4: Successfully submitting a review by filling in only points.===&lt;br /&gt;
This scenario tests if a student can successfully submit a review by selecting a value from the drop down list.&amp;lt;br&amp;gt;The detailed steps are as follows:&lt;br /&gt;
    1. Login as a student&lt;br /&gt;
    2. Select the test assignment for review&lt;br /&gt;
    3. Click on link &amp;quot;Others Work&amp;quot;&lt;br /&gt;
    4. Click on button &amp;quot;Request a new submission to Review&amp;quot;&lt;br /&gt;
    5. Click on the link &amp;quot;Begin&amp;quot;&lt;br /&gt;
    6. Select the value 5 from drop down list.&lt;br /&gt;
    7. Click on the button &amp;quot;Submit Review&amp;quot;.&lt;br /&gt;
    8. &amp;quot;Your response was successfully saved&amp;quot; should be displayed.&lt;br /&gt;
===T5: Successfully submitting an empty review.===&lt;br /&gt;
This scenario tests if a student can successfully submit an empty review.&amp;lt;br&amp;gt;The detailed steps are as follows:&lt;br /&gt;
    1. Login as a student&lt;br /&gt;
    2. Select the test assignment for review&lt;br /&gt;
    3. Click on link &amp;quot;Others Work&amp;quot;&lt;br /&gt;
    4. Click on button &amp;quot;Request a new submission to Review&amp;quot;&lt;br /&gt;
    5. Click on the link &amp;quot;Begin&amp;quot;&lt;br /&gt;
    6. Click on the button &amp;quot;Submit Review&amp;quot;.&lt;br /&gt;
    7. &amp;quot;Your response was successfully saved&amp;quot; should be displayed.&lt;br /&gt;
===T6: Successfully submitting an empty review with additional comments only.===&lt;br /&gt;
This scenario tests if a student can successfully submit an empty review by filling in additional comments in a text box.&amp;lt;br&amp;gt;The detailed steps are as follows-&lt;br /&gt;
    1. Login as a student&lt;br /&gt;
    2. Select the test assignment for review&lt;br /&gt;
    3. Click on link &amp;quot;Others Work&amp;quot;&lt;br /&gt;
    4. Click on button &amp;quot;Request a new submission to Review&amp;quot;&lt;br /&gt;
    5. Click on the link &amp;quot;Begin&amp;quot;&lt;br /&gt;
    6. Fill in the additional comments text box with comment &amp;quot;Excellent work done&amp;quot;.&lt;br /&gt;
    7. Click on the button &amp;quot;Submit Review&amp;quot;.&lt;br /&gt;
    8. &amp;quot;Your response was successfully saved&amp;quot; should be displayed.&lt;br /&gt;
&lt;br /&gt;
==Execution==&lt;br /&gt;
The tests were executed by submitting the following command from  the terminal. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;bundle exec rspec spec/features/peer_review_spec.rb&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File: Screenshot.JPG]]&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015_E1591_Integration_testing_for_peer_review&amp;diff=100100</id>
		<title>CSC/ECE 517 Fall 2015 E1591 Integration testing for peer review</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015_E1591_Integration_testing_for_peer_review&amp;diff=100100"/>
		<updated>2015-12-04T21:41:17Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Background== &lt;br /&gt;
Expertiza&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza Expertiza's Github Site]&amp;lt;/ref&amp;gt; is an open-source web tool that is used for online assignment completion purpose for different courses. The software enables the students to form online teams and choose different assignment topics. Each topic has a completion deadline and the students can submit the links to their work or assignments through expertiza.&lt;br /&gt;
&lt;br /&gt;
One of the key features of expertiza is the online peer review process. Students who are enrolled in the same courses can review the works or the assignments of the fellow students. Typically for each assignment there is a link called &amp;quot;Other’s Work&amp;quot; where a student is prompted to give feedback to the works of their fellow classmates. This link becomes active after a certain date that is determined by the instructor or the administrator. After the date, a student can choose one of the assignments that are available for review through the activated link. &lt;br /&gt;
&lt;br /&gt;
After an assignment has been chosen for review, the reviewer will be presented with a review sheet that has a number of parameters based upon which the review should be done. The reviewer chooses a rating for each parameter, typically being the lowest and 5 as the highest. He can also leave a comment justifying his rating and stating the scopes of improvements for the project. The team members whose assignment has been reviewed can also review the review, i.e. provide an explanation about their work or give comments with respect to the feedback provided by the reviewer.&lt;br /&gt;
&lt;br /&gt;
For some assignments there is a scope for a re submission of an improved version of the work. After such a re-submission the reviewer can again review the assignment editing and updating his previous review based upon the resubmitted work.&lt;br /&gt;
&lt;br /&gt;
==Purpose==&lt;br /&gt;
The purpose of the project is to perform an integration testing for the peer review of a submitted assignment. We aim to write test cases that test the different positive test scenarios for which the reviewer should be able to successfully submit the review to an assignment. The review process has certain minimum guidelines which need to be adhered to. We also plan to test the negative scenarios for which the reviewer doesn’t adhere to these guidelines and hence should not be able to submit the review to the assignment. &lt;br /&gt;
The Expertiza project has been developed using Ruby on Rails. The technologies to be used for the project are RSpec&amp;lt;ref&amp;gt;[http://rspec.info/documentation/ Rspec].''Rspec Documentation''&amp;lt;/ref&amp;gt; and Capybara&amp;lt;ref&amp;gt;[https://github.com/jnicklas/capybara capybara]&amp;lt;/ref&amp;gt; using Ruby on Rails as an underlying framework.  We will write the spec methods using RSpec. The various entities like users, assignment, questionnaire and instructor will be simulated using Capybara.&lt;br /&gt;
&lt;br /&gt;
==Technologies to be used==&lt;br /&gt;
===RSpec===&lt;br /&gt;
&lt;br /&gt;
Rspec is Behavior Driven Development&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Behavior-driven_development Behavior Driven Development]&amp;lt;/ref&amp;gt; framework for ruby, it is a meta gem composed of different libraries designed to work together or with other testing tools like Cucumber&amp;lt;ref&amp;gt;[https://cucumber.io/ Cucumber]&amp;lt;/ref&amp;gt;.  It has dependencies on Rspec core, Rspec expectations, Rspec mocks gems which can be loaded by using 'require'.&lt;br /&gt;
&lt;br /&gt;
Installation-&lt;br /&gt;
  gem install rspec&lt;br /&gt;
&lt;br /&gt;
===Capybara===&lt;br /&gt;
&lt;br /&gt;
Capybara&amp;lt;ref&amp;gt;[https://github.com/jnicklas/capybara Capybara github link]&amp;lt;/ref&amp;gt; is a library written in ruby, it helps you to test your web applications by pretending to be a user and following the user story, it simulates the browser to interact with app to receive pages parse the HTML and submit forms just as an actual user would do.  Capybara can interact with many different drivers which execute  tests through the same clean and simple interface.  One can choose between Selenium, Webkit or pure Ruby drivers.&lt;br /&gt;
&lt;br /&gt;
Installation-&lt;br /&gt;
&lt;br /&gt;
Capybara requires ruby 1.9.3 or later,to install add following line to your gem file and run bundle install&lt;br /&gt;
 gem 'capybara'&lt;br /&gt;
If testing a rails app add this to your test helper file&lt;br /&gt;
 require 'capybara/rails'&lt;br /&gt;
&lt;br /&gt;
===Integration Testing===&lt;br /&gt;
&lt;br /&gt;
Integration testing is a phase of software testing where units which have already been tested are combined into a component and the interface between them is tested&amp;lt;ref&amp;gt;[https://msdn.microsoft.com/en-us/library/aa292128(v=vs.71).aspx Integration Testing - Microsoft Developer Network]&amp;lt;/ref&amp;gt;. The idea is to test combination of pieces and eventually expand  the process to test the modules with those of the other group. Eventually, all the modules making up a process are tested together. &lt;br /&gt;
Integration testing identifies the problem that occurs when units are combined. Some different types of integration testing are big bang, top- down, bottom-up&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Integration_testing Integration Testing - Wikipedia]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Big Bang Integration Testing – All modules are integrated simultaneously, after which everything is tested as a whole. It is very effective for saving time in the integration testing process.&lt;br /&gt;
*The top down approach – The highest level modules are tested first. This allows high level logic and data flow to be integrated early in the process. &lt;br /&gt;
*The bottom up approach  - In this approach, lowest level components are tested first, and then used to facilitate the testing of higher level components.&lt;br /&gt;
&lt;br /&gt;
==Test Pattern and Approach==&lt;br /&gt;
&lt;br /&gt;
We are required to write integration tests for the peer review process. Since we are not adding any new functionalities or amending any existing ones we don’t need to follow any specific design pattern. However we need to follow a specific integration testing approach to conduct the integration testing. The testing approach that we have decided to follow is '''Top-Down'''. &lt;br /&gt;
We are first going to create the following entities &lt;br /&gt;
* '''User or Reviewer'''&lt;br /&gt;
* '''Assignment Questionnaire or Rubric'''&lt;br /&gt;
* '''Assignment'''&lt;br /&gt;
Then we plan to incrementally test the interaction of these entities in a bottom-up manner. &lt;br /&gt;
We first test whether the user is able to successfully login. &lt;br /&gt;
If he is able to successfully login, we test whether he is able to successfully select an assignment for review.&lt;br /&gt;
If he is able to successfully select  an assignment, we test whether he is able to able to submit a review successfully based on whether it is a text-based, point-based or both and whether he chooses to answer all, some or none of the questions of the rubric.&lt;br /&gt;
&lt;br /&gt;
==Flowchart for the Peer Review Testing Approach==&lt;br /&gt;
[[File:FlowchartE1591 2.png]]&lt;br /&gt;
&lt;br /&gt;
==Use Case Diagram==&lt;br /&gt;
&lt;br /&gt;
[[File: UseCaseE1591.png]]&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
The following section describes how we plan on testing the application based requirements found on the Project Description&amp;lt;ref&amp;gt;[https://docs.google.com/document/d/1t0keeNQ2kP0NmcgIrtQXGi5K_GhQYcKzEVWJPPRBOHE/edit Project Description]&amp;lt;/ref&amp;gt;.  We wish to create Integration tests that thoroughly test a Student user reviewing an assignment submission.  We will create a file called spec/features/peer_review.rb to run our integration tests.&lt;br /&gt;
&lt;br /&gt;
=== Test Cases Prerequisites ===&lt;br /&gt;
To create and run our test cases we require some setup in Expertiza.  The following list describes the information that we will enter into the system before running any of our test cases.&lt;br /&gt;
&lt;br /&gt;
# We will use the Student with the username 'student13' and password 'password' to login as a Student.&lt;br /&gt;
# We will enroll Student into a specific course.&lt;br /&gt;
# We will create an Assignment per individual test case that is customized for our test case.&lt;br /&gt;
# We will submit an Assignment from a student other than 'student13' for 'student13' to review &lt;br /&gt;
&lt;br /&gt;
=== Test Cases ===&lt;br /&gt;
The following list describes the individual test cases we will creating for Expertiza.&lt;br /&gt;
&lt;br /&gt;
T1: Login as a Student user and select a submission for review.  The submission will only contain points based review choices.  The user will successfully submit the review answering the points based review choices.&lt;br /&gt;
&lt;br /&gt;
T2: Login as a Student user and select a submission for review.  The submission will only contain points based review choices.  The user will unsuccessfully submit the review by only answering some of the points based review choices.&lt;br /&gt;
&lt;br /&gt;
T3: Login as a Student user and select a submission for review.  The submission will only contain points based review choices.  The user will unsuccessfully submit the review by answering none of the points based review choices.&lt;br /&gt;
&lt;br /&gt;
T4: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will successfully submit the review answering the text based review choices.&lt;br /&gt;
&lt;br /&gt;
T5: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will unsuccessfully submit the review by only answering some of the text based review choices.&lt;br /&gt;
&lt;br /&gt;
T6: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will unsuccessfully submit the review by answering none of the text based review choices.&lt;br /&gt;
&lt;br /&gt;
T7: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will submit the review by answering all of the text based review choices with single word answers.&lt;br /&gt;
&lt;br /&gt;
T8: Login as a Student user and select a submission for review.  The submission will only contain both points based and text based review choices.  The user will successfully submit the review answering all of the review choices.&lt;br /&gt;
&lt;br /&gt;
T9: Login as a Student user and select a submission for review.  The submission will only contain both points based and text based review choices.  The user will unsuccessfully submit the review answering only some of the review choices.&lt;br /&gt;
&lt;br /&gt;
T10: Login as a Student user and select a submission for review.  The submission will only contain both points based and text based review choices.  The user will unsuccessfully submit the review answering none of the review choices.&lt;br /&gt;
&lt;br /&gt;
==Scenarios Tested==&lt;br /&gt;
Six major scenarios were tested. They are as follows:&amp;lt;br&amp;gt;&lt;br /&gt;
T1: Successfully submitting a review by filling in both points and comments. &amp;lt;br&amp;gt;This scenario tests if a student can successfully submit a review by filling in comments in a text box and selecting a value from the drop down list.&amp;lt;br&amp;gt;The detailed steps are as follows:&lt;br /&gt;
    1. Login as a student&lt;br /&gt;
    2. Select the test assignment for review&lt;br /&gt;
    3. Click on link &amp;quot;Others Work&amp;quot;&lt;br /&gt;
    4. Click on button &amp;quot;Request a new submission to Review&amp;quot;&lt;br /&gt;
    5. Click on the link &amp;quot;Begin&amp;quot;&lt;br /&gt;
    6. Fill in the text box with comment &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
    7. Select the value 5 from drop down list.&lt;br /&gt;
    8. Click on the button &amp;quot;Submit Review&amp;quot;.&lt;br /&gt;
    9. &amp;quot;Your response was successfully saved&amp;quot; should be displayed.&lt;br /&gt;
T2: Successfully submitting a review by filling in multi word comments. &amp;lt;br&amp;gt;This scenario tests if a student can successfully submit a review by filling in multi word comments in a text box .&amp;lt;br&amp;gt;The detailed steps are as follows:&lt;br /&gt;
    1. Login as a student&lt;br /&gt;
    2. Select the test assignment for review&lt;br /&gt;
    3. Click on link &amp;quot;Others Work&amp;quot;&lt;br /&gt;
    4. Click on button &amp;quot;Request a new submission to Review&amp;quot;&lt;br /&gt;
    5. Click on the link &amp;quot;Begin&amp;quot;&lt;br /&gt;
    6. Fill in the text box with comment &amp;quot;Excellent Work&amp;quot;.&lt;br /&gt;
    7. Click on the button &amp;quot;Submit Review&amp;quot;.&lt;br /&gt;
    8. &amp;quot;Your response was successfully saved&amp;quot; should be displayed.&lt;br /&gt;
T3: Successfully submitting a review by filling a single comment with single word. &amp;lt;br&amp;gt;This scenario tests if a student can successfully submit a review by filling in single comment with single word in a text box.&amp;lt;br&amp;gt;The detailed steps are as follows:&lt;br /&gt;
    1. Login as a student&lt;br /&gt;
    2. Select the test assignment for review&lt;br /&gt;
    3. Click on link &amp;quot;Others Work&amp;quot;&lt;br /&gt;
    4. Click on button &amp;quot;Request a new submission to Review&amp;quot;&lt;br /&gt;
    5. Click on the link &amp;quot;Begin&amp;quot;&lt;br /&gt;
    6. Fill in the text box with comment &amp;quot;Excellent&amp;quot;.&lt;br /&gt;
    7. Click on the button &amp;quot;Submit Review&amp;quot;.&lt;br /&gt;
    8. &amp;quot;Your response was successfully saved&amp;quot; should be displayed.&lt;br /&gt;
T4: Successfully submitting a review by filling in only points. &amp;lt;br&amp;gt;This scenario tests if a student can successfully submit a review by selecting a value from the drop down list.&amp;lt;br&amp;gt;The detailed steps are as follows:&lt;br /&gt;
    1. Login as a student&lt;br /&gt;
    2. Select the test assignment for review&lt;br /&gt;
    3. Click on link &amp;quot;Others Work&amp;quot;&lt;br /&gt;
    4. Click on button &amp;quot;Request a new submission to Review&amp;quot;&lt;br /&gt;
    5. Click on the link &amp;quot;Begin&amp;quot;&lt;br /&gt;
    6. Select the value 5 from drop down list.&lt;br /&gt;
    7. Click on the button &amp;quot;Submit Review&amp;quot;.&lt;br /&gt;
    8. &amp;quot;Your response was successfully saved&amp;quot; should be displayed.&lt;br /&gt;
T5: Successfully submitting an empty review. &amp;lt;br&amp;gt;This scenario tests if a student can successfully submit an empty review.&amp;lt;br&amp;gt;The detailed steps are as follows:&lt;br /&gt;
    1. Login as a student&lt;br /&gt;
    2. Select the test assignment for review&lt;br /&gt;
    3. Click on link &amp;quot;Others Work&amp;quot;&lt;br /&gt;
    4. Click on button &amp;quot;Request a new submission to Review&amp;quot;&lt;br /&gt;
    5. Click on the link &amp;quot;Begin&amp;quot;&lt;br /&gt;
    6. Click on the button &amp;quot;Submit Review&amp;quot;.&lt;br /&gt;
    7. &amp;quot;Your response was successfully saved&amp;quot; should be displayed.&lt;br /&gt;
T6: Successfully submitting an empty review with additional comments only. &amp;lt;br&amp;gt;This scenario tests if a student can successfully submit an empty review by filling in additional comments in a text box.&amp;lt;br&amp;gt;The detailed steps are as follows-&lt;br /&gt;
# Login as a student&lt;br /&gt;
    2. Select the test assignment for review&lt;br /&gt;
    3. Click on link &amp;quot;Others Work&amp;quot;&lt;br /&gt;
    4. Click on button &amp;quot;Request a new submission to Review&amp;quot;&lt;br /&gt;
    5. Click on the link &amp;quot;Begin&amp;quot;&lt;br /&gt;
    6. Fill in the additional comments text box with comment &amp;quot;Excellent work done&amp;quot;.&lt;br /&gt;
    7. Click on the button &amp;quot;Submit Review&amp;quot;.&lt;br /&gt;
    8. &amp;quot;Your response was successfully saved&amp;quot; should be displayed.&lt;br /&gt;
&lt;br /&gt;
==Execution==&lt;br /&gt;
The tests were executed by submitting the following command from  the terminal. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;bundle exec rspec spec/features/peer_review_spec.rb&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File: Screenshot.JPG]]&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Screenshot.JPG&amp;diff=100099</id>
		<title>File:Screenshot.JPG</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Screenshot.JPG&amp;diff=100099"/>
		<updated>2015-12-04T21:36:05Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015_E1591_Integration_testing_for_peer_review&amp;diff=98895</id>
		<title>CSC/ECE 517 Fall 2015 E1591 Integration testing for peer review</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015_E1591_Integration_testing_for_peer_review&amp;diff=98895"/>
		<updated>2015-11-07T19:27:58Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Background== &lt;br /&gt;
Expertiza&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza Expertiza's Github Site]&amp;lt;/ref&amp;gt; is an open-source web tool that is used for online assignment completion purpose for different courses. The software enables the students to form online teams and choose different assignment topics. Each topic has a completion deadline and the students can submit the links to their work or assignments through expertiza.&lt;br /&gt;
&lt;br /&gt;
One of the key features of expertiza is the online peer review process. Students who are enrolled in the same courses can review the works or the assignments of the fellow students. Typically for each assignment there is a link called &amp;quot;Other’s Work&amp;quot; where a student is prompted to give feedback to the works of their fellow classmates. This link becomes active after a certain date that is determined by the instructor or the administrator. After the date, a student can choose one of the assignments that are available for review through the activated link. &lt;br /&gt;
&lt;br /&gt;
After an assignment has been chosen for review, the reviewer will be presented with a review sheet that has a number of parameters based upon which the review should be done. The reviewer chooses a rating for each parameter, typically being the lowest and 5 as the highest. He can also leave a comment justifying his rating and stating the scopes of improvements for the project. The team members whose assignment has been reviewed can also review the review, i.e. provide an explanation about their work or give comments with respect to the feedback provided by the reviewer.&lt;br /&gt;
&lt;br /&gt;
For some assignments there is a scope for a re submission of an improved version of the work. After such a re-submission the reviewer can again review the assignment editing and updating his previous review based upon the resubmitted work.&lt;br /&gt;
&lt;br /&gt;
==Purpose==&lt;br /&gt;
The purpose of the project is to perform an integration testing for the peer review of a submitted assignment. We aim to write test cases that test the different positive test scenarios for which the reviewer should be able to successfully submit the review to an assignment. The review process has certain minimum guidelines which need to be adhered to. We also plan to test the negative scenarios for which the reviewer doesn’t adhere to these guidelines and hence should not be able to submit the review to the assignment. &lt;br /&gt;
The Expertiza project has been developed using Ruby on Rails. The technologies to be used for the project are RSpec&amp;lt;ref&amp;gt;[http://rspec.info/documentation/ Rspec].''Rspec Documentation''&amp;lt;/ref&amp;gt; and Capybara using Ruby on Rails as an underlying framework.  We will write the spec methods using RSpec&amp;lt;ref&amp;gt;[http://rspec.info/documentation/ Rspec].''Rspec Documentation''&amp;lt;/ref&amp;gt;. The various entities like users, assignment, questionnaire and instructor will be simulated using Capybara.&lt;br /&gt;
&lt;br /&gt;
==Technologies to be used==&lt;br /&gt;
===RSpec===&lt;br /&gt;
&lt;br /&gt;
Rspec&amp;lt;ref&amp;gt;[http://rspec.info/documentation/ Rspec].''Rspec Documentation''&amp;lt;/ref&amp;gt; is Behavior Driven Development&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Behavior-driven_development Behavior Driven Development]&amp;lt;/ref&amp;gt; framework for ruby, it is a meta gem composed of different libraries designed to work together or with other testing tools like Cucumber&amp;lt;ref&amp;gt;[https://cucumber.io/ Cucumber]&amp;lt;/ref&amp;gt;.  It has dependencies on Rspec core, Rspec expectations, Rspec mocks gems which can be loaded by using 'require'.&lt;br /&gt;
&lt;br /&gt;
Installation-&lt;br /&gt;
  gem install rspec&lt;br /&gt;
&lt;br /&gt;
===Capybara===&lt;br /&gt;
&lt;br /&gt;
Capybara&amp;lt;ref&amp;gt;[https://github.com/jnicklas/capybara Capybara github link]&amp;lt;/ref&amp;gt; is a library written in ruby, it helps you to test your web applications by pretending to be a user and following the user story, it simulates the browser to interact with app to receive pages parse the HTML and submit forms just as an actual user would do.  Capybara can interact with many different drivers which execute  tests through the same clean and simple interface.  One can choose between Selenium, Webkit or pure Ruby drivers.&lt;br /&gt;
&lt;br /&gt;
Installation-&lt;br /&gt;
&lt;br /&gt;
Capybara requires ruby 1.9.3 or later,to install add following line to your gem file and run bundle install&lt;br /&gt;
 gem 'capybara'&lt;br /&gt;
If testing a rails app add this to your test helper file&lt;br /&gt;
 require 'capybara/rails'&lt;br /&gt;
&lt;br /&gt;
===Integration Testing===&lt;br /&gt;
&lt;br /&gt;
Integration testing is a phase of software testing where units which have already been tested are combined into a component and the interface between them is tested&amp;lt;ref&amp;gt;[https://msdn.microsoft.com/en-us/library/aa292128(v=vs.71).aspx Integration Testing - Microsoft Developer Network]&amp;lt;/ref&amp;gt;. The idea is to test combination of pieces and eventually expand  the process to test the modules with those of the other group. Eventually, all the modules making up a process are tested together. &lt;br /&gt;
Integration testing identifies the problem that occurs when units are combined. Some different types of integration testing are big bang, top- down, bottom-up&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Integration_testing Integration Testing - Wikipedia]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Big Bang Integration Testing – All modules are integrated simultaneously, after which everything is tested as a whole. It is very effective for saving time in the integration testing process.&lt;br /&gt;
*The top down approach – The highest level modules are tested first. This allows high level logic and data flow to be integrated early in the process. &lt;br /&gt;
*The bottom up approach  - In this approach, lowest level components are tested first, and then used to facilitate the testing of higher level components.&lt;br /&gt;
&lt;br /&gt;
==Test Scenarios==&lt;br /&gt;
Using the testing requirements found on the Project Description&amp;lt;ref&amp;gt;[https://docs.google.com/document/d/1t0keeNQ2kP0NmcgIrtQXGi5K_GhQYcKzEVWJPPRBOHE/edit Project Description]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
T1: Login as a Student user and select a submission for review.  The submission will only contain points based review choices.  The user will successfully submit the review answering the points based review choices.&lt;br /&gt;
&lt;br /&gt;
T2: Login as a Student user and select a submission for review.  The submission will only contain points based review choices.  The user will unsuccessfully submit the review by only answering some of the points based review choices.&lt;br /&gt;
&lt;br /&gt;
T3: Login as a Student user and select a submission for review.  The submission will only contain points based review choices.  The user will unsuccessfully submit the review by answering none of the points based review choices.&lt;br /&gt;
&lt;br /&gt;
T4: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will successfully submit the review answering the text based review choices.&lt;br /&gt;
&lt;br /&gt;
T5: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will unsuccessfully submit the review by only answering some of the text based review choices.&lt;br /&gt;
&lt;br /&gt;
T6: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will unsuccessfully submit the review by answering none of the text based review choices.&lt;br /&gt;
&lt;br /&gt;
T7: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will submit the review by answering all of the text based review choices with single word answers.&lt;br /&gt;
&lt;br /&gt;
T8: Login as a Student user and select a submission for review.  The submission will only contain both points based and text based review choices.  The user will successfully submit the review answering all of the review choices.&lt;br /&gt;
&lt;br /&gt;
T9: Login as a Student user and select a submission for review.  The submission will only contain both points based and text based review choices.  The user will unsuccessfully submit the review answering only some of the review choices.&lt;br /&gt;
&lt;br /&gt;
T10: Login as a Student user and select a submission for review.  The submission will only contain both points based and text based review choices.  The user will unsuccessfully submit the review answering none of the review choices.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015_E1591_Integration_testing_for_peer_review&amp;diff=98889</id>
		<title>CSC/ECE 517 Fall 2015 E1591 Integration testing for peer review</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015_E1591_Integration_testing_for_peer_review&amp;diff=98889"/>
		<updated>2015-11-07T19:23:48Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Background== &lt;br /&gt;
Expertiza&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza Expertiza's Github Site]&amp;lt;/ref&amp;gt; is an open-source web tool that is used for online assignment completion purpose for different courses. The software enables the students to form online teams and choose different assignment topics. Each topic has a completion deadline and the students can submit the links to their work or assignments through expertiza.&lt;br /&gt;
&lt;br /&gt;
One of the key features of expertiza is the online peer review process. Students who are enrolled in the same courses can review the works or the assignments of the fellow students. Typically for each assignment there is a link called &amp;quot;Other’s Work&amp;quot; where a student is prompted to give feedback to the works of their fellow classmates. This link becomes active after a certain date that is determined by the instructor or the administrator. After the date, a student can choose one of the assignments that are available for review through the activated link. &lt;br /&gt;
&lt;br /&gt;
After an assignment has been chosen for review, the reviewer will be presented with a review sheet that has a number of parameters based upon which the review should be done. The reviewer chooses a rating for each parameter, typically being the lowest and 5 as the highest. He can also leave a comment justifying his rating and stating the scopes of improvements for the project. The team members whose assignment has been reviewed can also review the review, i.e. provide an explanation about their work or give comments with respect to the feedback provided by the reviewer.&lt;br /&gt;
&lt;br /&gt;
For some assignments there is a scope for a re submission of an improved version of the work. After such a re-submission the reviewer can again review the assignment editing and updating his previous review based upon the resubmitted work.&lt;br /&gt;
&lt;br /&gt;
==Purpose==&lt;br /&gt;
The purpose of the project is to perform an integration testing for the peer review of a submitted assignment. We aim to write test cases that test the different positive test scenarios for which the reviewer should be able to successfully submit the review to an assignment. The review process has certain minimum guidelines which need to be adhered to. We also plan to test the negative scenarios for which the reviewer doesn’t adhere to these guidelines and hence should not be able to submit the review to the assignment. &lt;br /&gt;
The Expertiza project has been developed using Ruby on Rails. The technologies to be used for the project are and Capybara using Ruby on Rails as an underlying framework.  We will write the spec methods using RSpec. The various entities like users, assignment, questionnaire and instructor will be simulated using Capybara.&lt;br /&gt;
&lt;br /&gt;
==Technologies to be used==&lt;br /&gt;
===RSpec===&lt;br /&gt;
&lt;br /&gt;
Rspec&amp;lt;ref&amp;gt;[http://rspec.info/documentation/ Rspec].''Rspec Documentation''&amp;lt;/ref&amp;gt; is &amp;lt;ref&amp;gt;Behavior Driven Development&amp;lt;/ref&amp;gt; framework for ruby, it is a meta gem composed of different libraries designed to work together or with other testing tools like &amp;lt;ref&amp;gt;Cucumber&amp;lt;/ref&amp;gt;.  It has dependencies on Rspec core, Rspec expectations, Rspec mocks gems which can be loaded by using 'require'.&lt;br /&gt;
&lt;br /&gt;
Installation-&lt;br /&gt;
  gem install rspec&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Capybara===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref&amp;gt;Capybara&amp;lt;/ref&amp;gt; is a library written in ruby, it helps you to test your web applications by pretending to be a user and following the user story, it simulates the browser to interact with app to receive pages parse the HTML and submit forms just as an actual user would do.  Capybara can interact with many different drivers which execute  tests through the same clean and simple interface.  One can choose between Selenium, Webkit or pure Ruby drivers.&lt;br /&gt;
&lt;br /&gt;
Installation-&lt;br /&gt;
&lt;br /&gt;
Capybara requires ruby 1.9.3 or later,to install add following line to your gem file and run bundle install&lt;br /&gt;
 gem 'capybara'&lt;br /&gt;
If testing a rails app add this to your test helper file&lt;br /&gt;
 require 'capybara/rails'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Integration Testing===&lt;br /&gt;
&lt;br /&gt;
Integration testing is a phase of software testing where units which have already been tested are combined into a component and the interface between them is tested&amp;lt;ref&amp;gt;[https://msdn.microsoft.com/en-us/library/aa292128(v=vs.71).aspx https://msdn.microsoft.com/en-us/library/aa292128(v=vs.71).aspx]&amp;lt;/ref&amp;gt;. The idea is to test combination of pieces and eventually expand  the process to test the modules with those of the other group. Eventually, all the modules making up a process are tested together. &lt;br /&gt;
Integration testing identifies the problem that occurs when units are combined. Some different types of integration testing are big bang, top- down, bottom-up&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Integration_testing https://en.wikipedia.org/wiki/Integration_testing]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Big Bang Integration Testing – All modules are integrated simultaneously, after which everything is tested as a whole. It is very effective for saving time in the integration testing process.&lt;br /&gt;
*The top down approach – The highest level modules are tested first. This allows high level logic and data flow to be integrated early in the process. &lt;br /&gt;
*The bottom up approach  - In this approach, lowest level components are tested first, and then used to facilitate the testing of higher level components.&lt;br /&gt;
&lt;br /&gt;
==Test Scenarios==&lt;br /&gt;
Using the testing requirements found on the Project Description:&lt;br /&gt;
&lt;br /&gt;
T1: Login as a Student user and select a submission for review.  The submission will only contain points based review choices.  The user will successfully submit the review answering the points based review choices.&lt;br /&gt;
&lt;br /&gt;
T2: Login as a Student user and select a submission for review.  The submission will only contain points based review choices.  The user will unsuccessfully submit the review by only answering some of the points based review choices.&lt;br /&gt;
&lt;br /&gt;
T3: Login as a Student user and select a submission for review.  The submission will only contain points based review choices.  The user will unsuccessfully submit the review by answering none of the points based review choices.&lt;br /&gt;
&lt;br /&gt;
T4: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will successfully submit the review answering the text based review choices.&lt;br /&gt;
&lt;br /&gt;
T5: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will unsuccessfully submit the review by only answering some of the text based review choices.&lt;br /&gt;
&lt;br /&gt;
T6: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will unsuccessfully submit the review by answering none of the text based review choices.&lt;br /&gt;
&lt;br /&gt;
T7: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will submit the review by answering all of the text based review choices with single word answers.&lt;br /&gt;
&lt;br /&gt;
T8: Login as a Student user and select a submission for review.  The submission will only contain both points based and text based review choices.  The user will successfully submit the review answering all of the review choices.&lt;br /&gt;
&lt;br /&gt;
T9: Login as a Student user and select a submission for review.  The submission will only contain both points based and text based review choices.  The user will unsuccessfully submit the review answering only some of the review choices.&lt;br /&gt;
&lt;br /&gt;
T10: Login as a Student user and select a submission for review.  The submission will only contain both points based and text based review choices.  The user will unsuccessfully submit the review answering none of the review choices.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015_E1591_Integration_testing_for_peer_review&amp;diff=98885</id>
		<title>CSC/ECE 517 Fall 2015 E1591 Integration testing for peer review</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015_E1591_Integration_testing_for_peer_review&amp;diff=98885"/>
		<updated>2015-11-07T19:19:04Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Background== &lt;br /&gt;
Expertiza&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza Expertiza's Github Site]&amp;lt;/ref&amp;gt; is an open-source web tool that is used for online assignment completion purpose for different courses. The software enables the students to form online teams and choose different assignment topics. Each topic has a completion deadline and the students can submit the links to their work or assignments through expertiza.&lt;br /&gt;
&lt;br /&gt;
One of the key features of expertiza is the online peer review process. Students who are enrolled in the same courses can review the works or the assignments of the fellow students. Typically for each assignment there is a link called &amp;quot;Other’s Work&amp;quot; where a student is prompted to give feedback to the works of their fellow classmates. This link becomes active after a certain date that is determined by the instructor or the administrator. After the date, a student can choose one of the assignments that are available for review through the activated link. &lt;br /&gt;
&lt;br /&gt;
After an assignment has been chosen for review, the reviewer will be presented with a review sheet that has a number of parameters based upon which the review should be done. The reviewer chooses a rating for each parameter, typically being the lowest and 5 as the highest. He can also leave a comment justifying his rating and stating the scopes of improvements for the project. The team members whose assignment has been reviewed can also review the review, i.e. provide an explanation about their work or give comments with respect to the feedback provided by the reviewer.&lt;br /&gt;
&lt;br /&gt;
For some assignments there is a scope for a re submission of an improved version of the work. After such a re-submission the reviewer can again review the assignment editing and updating his previous review based upon the resubmitted work.&lt;br /&gt;
&lt;br /&gt;
==Purpose==&lt;br /&gt;
The purpose of the project is to perform an integration testing for the peer review of a submitted assignment. We aim to write test cases that test the different positive test scenarios for which the reviewer should be able to successfully submit the review to an assignment. The review process has certain minimum guidelines which need to be adhered to. We also plan to test the negative scenarios for which the reviewer doesn’t adhere to these guidelines and hence should not be able to submit the review to the assignment. &lt;br /&gt;
The Expertiza project has been developed using Ruby on Rails. The technologies to be used for the project are and Capybara using Ruby on Rails as an underlying framework.  We will write the spec methods using RSpec. The various entities like users, assignment, questionnaire and instructor will be simulated using Capybara.&lt;br /&gt;
&lt;br /&gt;
==Technologies to be used==&lt;br /&gt;
===RSpec===&lt;br /&gt;
&lt;br /&gt;
Rspec is Behavior Driven Development framework for ruby, it is a meta gem composed of different libraries designed to work together or with other testing tools like Cucumber.  It has dependencies on Rspec core, Rspec expectations, Rspec mocks gems which can be loaded by using 'require'.&lt;br /&gt;
&lt;br /&gt;
Installation-&lt;br /&gt;
  gem install rspec&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Capybara===&lt;br /&gt;
&lt;br /&gt;
Capybara is a library written in ruby, it helps you to test your web applications by pretending to be a user and following the user story, it simulates the browser to interact with app to receive pages parse the HTML and submit forms just as an actual user would do.  Capybara can interact with many different drivers which execute  tests through the same clean and simple interface.  One can choose between Selenium, Webkit or pure Ruby drivers.&lt;br /&gt;
&lt;br /&gt;
Installation-&lt;br /&gt;
&lt;br /&gt;
Capybara requires ruby 1.9.3 or later,to install add following line to your gem file and run bundle install&lt;br /&gt;
 gem 'capybara'&lt;br /&gt;
If testing a rails app add this to your test helper file&lt;br /&gt;
 require 'capybara/rails'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Integration Testing===&lt;br /&gt;
&lt;br /&gt;
Integration testing is a phase of software testing where units which have already been tested are combined into a component and the interface between them is tested. The idea is to test combination of pieces and eventually expand  the process to test the modules with those of the other group. Eventually, all the modules making up a process are tested together. &lt;br /&gt;
Integration testing identifies the problem that occurs when units are combined. Some different types of integration testing are big bang, top- down, bottom-up.&lt;br /&gt;
*Big Bang Integration Testing – All modules are integrated simultaneously, after which everything is tested as a whole. It is very effective for saving time in the integration testing process.&lt;br /&gt;
*The top down approach – The highest level modules are tested first. This allows high level logic and data flow to be integrated early in the process. &lt;br /&gt;
*The bottom up approach  - In this approach, lowest level components are tested first, and then used to facilitate the testing of higher level components.&lt;br /&gt;
&lt;br /&gt;
==Test Scenarios==&lt;br /&gt;
Using the testing requirements found on the Project Description:&lt;br /&gt;
&lt;br /&gt;
T1: Login as a Student user and select a submission for review.  The submission will only contain points based review choices.  The user will successfully submit the review answering the points based review choices.&lt;br /&gt;
&lt;br /&gt;
T2: Login as a Student user and select a submission for review.  The submission will only contain points based review choices.  The user will unsuccessfully submit the review by only answering some of the points based review choices.&lt;br /&gt;
&lt;br /&gt;
T3: Login as a Student user and select a submission for review.  The submission will only contain points based review choices.  The user will unsuccessfully submit the review by answering none of the points based review choices.&lt;br /&gt;
&lt;br /&gt;
T4: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will successfully submit the review answering the text based review choices.&lt;br /&gt;
&lt;br /&gt;
T5: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will unsuccessfully submit the review by only answering some of the text based review choices.&lt;br /&gt;
&lt;br /&gt;
T6: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will unsuccessfully submit the review by answering none of the text based review choices.&lt;br /&gt;
&lt;br /&gt;
T7: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will submit the review by answering all of the text based review choices with single word answers.&lt;br /&gt;
&lt;br /&gt;
T8: Login as a Student user and select a submission for review.  The submission will only contain both points based and text based review choices.  The user will successfully submit the review answering all of the review choices.&lt;br /&gt;
&lt;br /&gt;
T9: Login as a Student user and select a submission for review.  The submission will only contain both points based and text based review choices.  The user will unsuccessfully submit the review answering only some of the review choices.&lt;br /&gt;
&lt;br /&gt;
T10: Login as a Student user and select a submission for review.  The submission will only contain both points based and text based review choices.  The user will unsuccessfully submit the review answering none of the review choices.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015_E1591_Integration_testing_for_peer_review&amp;diff=98883</id>
		<title>CSC/ECE 517 Fall 2015 E1591 Integration testing for peer review</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015_E1591_Integration_testing_for_peer_review&amp;diff=98883"/>
		<updated>2015-11-07T19:18:27Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Background== &lt;br /&gt;
Expertiza&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza Expertiza's Github Site]&amp;lt;/ref&amp;gt; is an open-source web tool that is used for online assignment completion purpose for different courses. The software enables the students to form online teams and choose different assignment topics. Each topic has a completion deadline and the students can submit the links to their work or assignments through expertiza.&lt;br /&gt;
&lt;br /&gt;
One of the key features of expertiza is the online peer review process. Students who are enrolled in the same courses can review the works or the assignments of the fellow students. Typically for each assignment there is a link called &amp;quot;Other’s Work&amp;quot; where a student is prompted to give feedback to the works of their fellow classmates. This link becomes active after a certain date that is determined by the instructor or the administrator. After the date, a student can choose one of the assignments that are available for review through the activated link. &lt;br /&gt;
&lt;br /&gt;
After an assignment has been chosen for review, the reviewer will be presented with a review sheet that has a number of parameters based upon which the review should be done. The reviewer chooses a rating for each parameter, typically being the lowest and 5 as the highest. He can also leave a comment justifying his rating and stating the scopes of improvements for the project. The team members whose assignment has been reviewed can also review the review, i.e. provide an explanation about their work or give comments with respect to the feedback provided by the reviewer.&lt;br /&gt;
&lt;br /&gt;
For some assignments there is a scope for a re submission of an improved version of the work. After such a re-submission the reviewer can again review the assignment editing and updating his previous review based upon the resubmitted work.&lt;br /&gt;
&lt;br /&gt;
==Purpose==&lt;br /&gt;
The purpose of the project is to perform an integration testing for the peer review of a submitted assignment. We aim to write test cases that test the different positive test scenarios for which the reviewer should be able to successfully submit the review to an assignment. The review process has certain minimum guidelines which need to be adhered to. We also plan to test the negative scenarios for which the reviewer doesn’t adhere to these guidelines and hence should not be able to submit the review to the assignment. &lt;br /&gt;
The Expertiza project has been developed using Ruby on Rails. The technologies to be used for the project are and Capybara using Ruby on Rails as an underlying framework.  We will write the spec methods using RSpec. The various entities like users, assignment, questionnaire and instructor will be simulated using Capybara.&lt;br /&gt;
&lt;br /&gt;
==Technologies to be used==&lt;br /&gt;
===RSpec===&lt;br /&gt;
&lt;br /&gt;
Rspec is Behavior Driven Development framework for ruby, it is a meta gem composed of different libraries designed to work together or with other testing tools like Cucumber.  It has dependencies on Rspec core, Rspec expectations, Rspec mocks gems which can be loaded by using 'require'.&lt;br /&gt;
&lt;br /&gt;
Installation-&lt;br /&gt;
  gem install rspec&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Capybara===&lt;br /&gt;
&lt;br /&gt;
Capybara is a library written in ruby, it helps you to test your web applications by pretending to be a user and following the user story, it simulates the browser to interact with app to receive pages parse the HTML and submit forms just as an actual user would do.  Capybara can interact with many different drivers which execute  tests through the same clean and simple interface.  One can choose between Selenium, Webkit or pure Ruby drivers.&lt;br /&gt;
&lt;br /&gt;
Installation-&lt;br /&gt;
&lt;br /&gt;
Capybara requires ruby 1.9.3 or later,to install add following line to your gem file and run bundle install&lt;br /&gt;
 gem 'capybara'&lt;br /&gt;
If testing a rails app add this to your test helper file&lt;br /&gt;
 require 'capybara/rails'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===ntegration Testing===&lt;br /&gt;
&lt;br /&gt;
Integration testing is a phase of software testing where units which have already been tested are combined into a component and the interface between them is tested. The idea is to test combination of pieces and eventually expand  the process to test the modules with those of the other group. Eventually, all the modules making up a process are tested together. &lt;br /&gt;
Integration testing identifies the problem that occurs when units are combined. Some different types of integration testing are big bang, top- down, bottom-up.&lt;br /&gt;
*Big Bang Integration Testing – All modules are integrated simultaneously, after which everything is tested as a whole. It is very effective for saving time in the integration testing process.&lt;br /&gt;
*The top down approach – The highest level modules are tested first. This allows high level logic and data flow to be integrated early in the process. &lt;br /&gt;
*The bottom up approach  - In this approach, lowest level components are tested first, and then used to facilitate the testing of higher level components.&lt;br /&gt;
&lt;br /&gt;
==Test Scenarios==&lt;br /&gt;
Using the testing requirements found on the Project Description:&lt;br /&gt;
&lt;br /&gt;
T1: Login as a Student user and select a submission for review.  The submission will only contain points based review choices.  The user will successfully submit the review answering the points based review choices.&lt;br /&gt;
&lt;br /&gt;
T2: Login as a Student user and select a submission for review.  The submission will only contain points based review choices.  The user will unsuccessfully submit the review by only answering some of the points based review choices.&lt;br /&gt;
&lt;br /&gt;
T3: Login as a Student user and select a submission for review.  The submission will only contain points based review choices.  The user will unsuccessfully submit the review by answering none of the points based review choices.&lt;br /&gt;
&lt;br /&gt;
T4: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will successfully submit the review answering the text based review choices.&lt;br /&gt;
&lt;br /&gt;
T5: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will unsuccessfully submit the review by only answering some of the text based review choices.&lt;br /&gt;
&lt;br /&gt;
T6: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will unsuccessfully submit the review by answering none of the text based review choices.&lt;br /&gt;
&lt;br /&gt;
T7: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will submit the review by answering all of the text based review choices with single word answers.&lt;br /&gt;
&lt;br /&gt;
T8: Login as a Student user and select a submission for review.  The submission will only contain both points based and text based review choices.  The user will successfully submit the review answering all of the review choices.&lt;br /&gt;
&lt;br /&gt;
T9: Login as a Student user and select a submission for review.  The submission will only contain both points based and text based review choices.  The user will unsuccessfully submit the review answering only some of the review choices.&lt;br /&gt;
&lt;br /&gt;
T10: Login as a Student user and select a submission for review.  The submission will only contain both points based and text based review choices.  The user will unsuccessfully submit the review answering none of the review choices.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015_E1591_Integration_testing_for_peer_review&amp;diff=98880</id>
		<title>CSC/ECE 517 Fall 2015 E1591 Integration testing for peer review</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015_E1591_Integration_testing_for_peer_review&amp;diff=98880"/>
		<updated>2015-11-07T19:16:56Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Technologies to be used */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Background== &lt;br /&gt;
Expertiza&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza]&amp;lt;/ref&amp;gt; is an open-source web tool that is used for online assignment completion purpose for different courses. The software enables the students to form online teams and choose different assignment topics. Each topic has a completion deadline and the students can submit the links to their work or assignments through expertiza.&lt;br /&gt;
&lt;br /&gt;
One of the key features of expertiza is the online peer review process. Students who are enrolled in the same courses can review the works or the assignments of the fellow students. Typically for each assignment there is a link called &amp;quot;Other’s Work&amp;quot; where a student is prompted to give feedback to the works of their fellow classmates. This link becomes active after a certain date that is determined by the instructor or the administrator. After the date, a student can choose one of the assignments that are available for review through the activated link. &lt;br /&gt;
&lt;br /&gt;
After an assignment has been chosen for review, the reviewer will be presented with a review sheet that has a number of parameters based upon which the review should be done. The reviewer chooses a rating for each parameter, typically being the lowest and 5 as the highest. He can also leave a comment justifying his rating and stating the scopes of improvements for the project. The team members whose assignment has been reviewed can also review the review, i.e. provide an explanation about their work or give comments with respect to the feedback provided by the reviewer.&lt;br /&gt;
&lt;br /&gt;
For some assignments there is a scope for a re submission of an improved version of the work. After such a re-submission the reviewer can again review the assignment editing and updating his previous review based upon the resubmitted work.&lt;br /&gt;
&lt;br /&gt;
==Purpose==&lt;br /&gt;
The purpose of the project is to perform an integration testing for the peer review of a submitted assignment. We aim to write test cases that test the different positive test scenarios for which the reviewer should be able to successfully submit the review to an assignment. The review process has certain minimum guidelines which need to be adhered to. We also plan to test the negative scenarios for which the reviewer doesn’t adhere to these guidelines and hence should not be able to submit the review to the assignment. &lt;br /&gt;
The Expertiza project has been developed using Ruby on Rails. The technologies to be used for the project are '''RSpec''' and '''Capybara''' using Ruby on Rails as an underlying framework.  We will write the spec methods using RSpec. The various entities like '''users, assignment''' '''questionnaire''' and '''instructor''' will be simulated using Capybara.&lt;br /&gt;
&lt;br /&gt;
==Technologies to be used==&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
&lt;br /&gt;
Rspec is Behavior Driven Development framework for ruby, it is a meta gem composed of different libraries designed to work together or with other testing tools like Cucumber.  It has dependencies on Rspec core, Rspec expectations, Rspec mocks gems which can be loaded by using 'require'.&lt;br /&gt;
&lt;br /&gt;
Installation-&lt;br /&gt;
  gem install rspec&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Capybara'''&lt;br /&gt;
&lt;br /&gt;
Capybara is a library written in ruby, it helps you to test your web applications by pretending to be a user and following the user story, it simulates the browser to interact with app to receive pages parse the HTML and submit forms just as an actual user would do.  Capybara can interact with many different drivers which execute  tests through the same clean and simple interface.  One can choose between Selenium, Webkit or pure Ruby drivers.&lt;br /&gt;
&lt;br /&gt;
Installation-&lt;br /&gt;
&lt;br /&gt;
Capybara requires ruby 1.9.3 or later,to install add following line to your gem file and run bundle install&lt;br /&gt;
 gem 'capybara'&lt;br /&gt;
If testing a rails app add this to your test helper file&lt;br /&gt;
 require 'capybara/rails'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Integration Testing'''&lt;br /&gt;
&lt;br /&gt;
Integration testing is a phase of software testing where units which have already been tested are combined into a component and the interface between them is tested. The idea is to test combination of pieces and eventually expand  the process to test the modules with those of the other group. Eventually, all the modules making up a process are tested together. &lt;br /&gt;
Integration testing identifies the problem that occurs when units are combined. Some different types of integration testing are big bang, top- down, bottom-up.&lt;br /&gt;
*Big Bang Integration Testing – All modules are integrated simultaneously, after which everything is tested as a whole. It is very effective for saving time in the integration testing process.&lt;br /&gt;
*The top down approach – The highest level modules are tested first. This allows high level logic and data flow to be integrated early in the process. &lt;br /&gt;
*The bottom up approach  - In this approach, lowest level components are tested first, and then used to facilitate the testing of higher level components.&lt;br /&gt;
&lt;br /&gt;
==Test Scenarios==&lt;br /&gt;
Using the testing requirements found on the Project Description:&lt;br /&gt;
&lt;br /&gt;
T1: Login as a Student user and select a submission for review.  The submission will only contain points based review choices.  The user will successfully submit the review answering the points based review choices.&lt;br /&gt;
&lt;br /&gt;
T2: Login as a Student user and select a submission for review.  The submission will only contain points based review choices.  The user will unsuccessfully submit the review by only answering some of the points based review choices.&lt;br /&gt;
&lt;br /&gt;
T3: Login as a Student user and select a submission for review.  The submission will only contain points based review choices.  The user will unsuccessfully submit the review by answering none of the points based review choices.&lt;br /&gt;
&lt;br /&gt;
T4: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will successfully submit the review answering the text based review choices.&lt;br /&gt;
&lt;br /&gt;
T5: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will unsuccessfully submit the review by only answering some of the text based review choices.&lt;br /&gt;
&lt;br /&gt;
T6: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will unsuccessfully submit the review by answering none of the text based review choices.&lt;br /&gt;
&lt;br /&gt;
T7: Login as a Student user and select a submission for review.  The submission will only contain text based review choices.  The user will submit the review by answering all of the text based review choices with single word answers.&lt;br /&gt;
&lt;br /&gt;
T8: Login as a Student user and select a submission for review.  The submission will only contain both points based and text based review choices.  The user will successfully submit the review answering all of the review choices.&lt;br /&gt;
&lt;br /&gt;
T9: Login as a Student user and select a submission for review.  The submission will only contain both points based and text based review choices.  The user will unsuccessfully submit the review answering only some of the review choices.&lt;br /&gt;
&lt;br /&gt;
T10: Login as a Student user and select a submission for review.  The submission will only contain both points based and text based review choices.  The user will unsuccessfully submit the review answering none of the review choices.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98490</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98490"/>
		<updated>2015-11-06T22:04:41Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Steps to verify changes manually */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page is about an open source project based on Expertiza OSS. This project aims to refactor Admin Controller and Course Controller. It also aims to refactor other snippets which does not follow the Ruby style guidelines.&lt;br /&gt;
Refactoring&lt;br /&gt;
Refactoring[https://en.wikipedia.org/wiki/Code_refactoring] is a technique to alter the internal structure of the code without affecting the external behaviour. It is used for:&lt;br /&gt;
Programs that are difficult to read;&lt;br /&gt;
Programs that does not follow the language specific guidelines;&lt;br /&gt;
Programs that has high coupling;&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[Expertiza][https://expertiza.ncsu.edu/] is an open source project developed using the Ruby on Rails platform. It provides features like team assignments, peer review, submission of projects, grading etc. The code can be cloned and modified from GitHub. This application provides an efficient way to manage assignments, grades and reviews.&lt;br /&gt;
Assignment.rb is the largest class in Expertiza, comprising 1105 lines of code which contains the assignment model and the related functionalities. It also contains the score module which is refactored to make the file more clean and easy to read.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line @institution = Institution.new(params[:institution]) to @institution = Institution.new(:name =&amp;gt; params[:institution][:name])&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;br /&gt;
===Views===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| views/admin/list_administrators.html.erb&lt;br /&gt;
| Removed the text field next to New Administrator button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:administrator&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_administrators.html.erb &lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_instructors.html.erb &lt;br /&gt;
| Removed the text field next to New Instructor button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:Instructor&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_super_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb &lt;br /&gt;
| Removed the Parent column from line 4 &lt;br /&gt;
| Super admins don't have any parents.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Removed &amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&lt;br /&gt;
| There can be only one super admin.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| show_admin lists out all the administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_super_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| Lists out the super administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_institutions.html.erb &lt;br /&gt;
| Added this file&lt;br /&gt;
| To add institution drop down menu in the new user creation form.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_user.html.erb&lt;br /&gt;
| Added line &amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
| To select the institution.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/list.html.erb&lt;br /&gt;
| Sending role:student as the default role for new user creation form&lt;br /&gt;
| Was throwing an error&lt;br /&gt;
|-&lt;br /&gt;
| views/users/new.html&lt;br /&gt;
| Default role is selected in new user creation form.&lt;br /&gt;
| So that if new administrator is clicked the user creation form will have admin as the pre selected role.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Re-factored Code Cases =&lt;br /&gt;
&lt;br /&gt;
== Case 1 : Refactoring admin_controller ==&lt;br /&gt;
&lt;br /&gt;
The controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. The functionality to view the list of super-admins, admins and the instructors was added. Also changes were made to add_adminstrator method for adding a new administrator in a clean way.&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     def list_instructors&lt;br /&gt;
    @users = User.&lt;br /&gt;
      instructors.&lt;br /&gt;
      order(:name).&lt;br /&gt;
      where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
      paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def add_administrator&lt;br /&gt;
    @user = User.new&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def new_administrator&lt;br /&gt;
    add_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def save_administrator # saves newly created administrator to database&lt;br /&gt;
    PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def create_administrator&lt;br /&gt;
    save_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def show&lt;br /&gt;
+    redirect_to url_for(:controller =&amp;gt; :users, :action =&amp;gt; :new)&lt;br /&gt;
+  end&lt;br /&gt;
 &lt;br /&gt;
   def list_instructors&lt;br /&gt;
     @users = User.&lt;br /&gt;
       instructors.&lt;br /&gt;
       order(:name).&lt;br /&gt;
       where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
       paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def add_administrator&lt;br /&gt;
     @user = User.new&lt;br /&gt;
+    redirect_to 'users#new'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def new_administrator&lt;br /&gt;
     add_administrator&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def save_administrator # saves newly created administrator to database&lt;br /&gt;
     PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def create_administrator&lt;br /&gt;
     save_administrator&lt;br /&gt;
+    redirect_to &amp;quot;users#new&amp;quot;&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 2 : Refactoring institution_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Before changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  def index&lt;br /&gt;
    list&lt;br /&gt;
    render :action =&amp;gt; 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
  verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
    :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
&lt;br /&gt;
  def list&lt;br /&gt;
    @institutions = Institution.all&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== After Changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index&lt;br /&gt;
-    list&lt;br /&gt;
+   # @institutions=Institution.All&lt;br /&gt;
+   list&lt;br /&gt;
     render :action =&amp;gt; 'list'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
   verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
     :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
 &lt;br /&gt;
   def list&lt;br /&gt;
-    @institutions = Institution.all&lt;br /&gt;
+    @institutions = Institution.all &lt;br /&gt;
+&lt;br /&gt;
   end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 3 : Refactoring user_controller ==&lt;br /&gt;
&lt;br /&gt;
The user_param() method in user_controller did not have any facility to include the institution of the user. After doing a db migration and creating an institution_id in the user table, an institute can be selected while creating a new user.  A mailer error is caused when a user/admin/instructor is created and the application crashes. But this is not because of an error with the functionality. Although, despite the error, one can check if the user has been created by going to Manage -&amp;gt; Users page in the user interface.&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      @user = User.new(user_params)&lt;br /&gt;
      # record the person who created this new user&lt;br /&gt;
      @user.parent_id = (session[:user]).id&lt;br /&gt;
      # set the user's timezone to its parent's&lt;br /&gt;
      @user.timezonepref = User.find(@user.parent_id).timezonepref&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @user = User.new(user_params)&lt;br /&gt;
+      @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
       # record the person who created this new user&lt;br /&gt;
       @user.parent_id = (session[:user]).id&lt;br /&gt;
       # set the user's timezone to its parent's&lt;br /&gt;
      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 4 : Refactoring list_administrators ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
-  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+   &amp;lt;% if user.role_id == 3%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
-        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-&lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
-&amp;lt;% end %&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt; &lt;br /&gt;
+&amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 5 : Refactoring list_instructors.html.erb ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+  &amp;lt;% if user.role_id == 2%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+ &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 6: Refactoring list_super_administrators.html.erb ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+  &amp;lt;input type='submit' value='New Super Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Case 7: Addition of the institution id in the view==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_institutions&amp;quot;&amp;gt;Institution&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
+    &amp;lt;%= collection_select('users',:institutions_id, Institution.all, :id, :name) %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Case 8: Adding the institution feature to user view==&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
&amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@@ -1,13 +1,14 @@&lt;br /&gt;
 &amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
   &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
+&amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
 &amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Case 9:Routes added ==&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
    collection do&lt;br /&gt;
      get :list_super_administrators&lt;br /&gt;
      get :list_administrators&lt;br /&gt;
      get :list_instructors&lt;br /&gt;
      get :new_administrator&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
     collection do&lt;br /&gt;
+      get :create_any_user&lt;br /&gt;
       get :list_super_administrators&lt;br /&gt;
       get :list_administrators&lt;br /&gt;
       get :list_instructors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Steps to verify changes manually=&lt;br /&gt;
In order to inspect the changes made, you can visit our deployed [http://152.46.16.123:3000/admin/list_administrators Expertiza] and use the credentials mentioned at the top of the page.&lt;br /&gt;
&lt;br /&gt;
===Removing the text field from New Administrator===&lt;br /&gt;
[[File:List admin.png]]&lt;br /&gt;
===Administrator as the default role===&lt;br /&gt;
[[File:New admin.png]]&lt;br /&gt;
===Adding Institutions to User creation forms and having student as the default role===&lt;br /&gt;
[[File:Student.png]]&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98489</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98489"/>
		<updated>2015-11-06T22:04:11Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Case 3 : Refactoring user_controller */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page is about an open source project based on Expertiza OSS. This project aims to refactor Admin Controller and Course Controller. It also aims to refactor other snippets which does not follow the Ruby style guidelines.&lt;br /&gt;
Refactoring&lt;br /&gt;
Refactoring[https://en.wikipedia.org/wiki/Code_refactoring] is a technique to alter the internal structure of the code without affecting the external behaviour. It is used for:&lt;br /&gt;
Programs that are difficult to read;&lt;br /&gt;
Programs that does not follow the language specific guidelines;&lt;br /&gt;
Programs that has high coupling;&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[Expertiza][https://expertiza.ncsu.edu/] is an open source project developed using the Ruby on Rails platform. It provides features like team assignments, peer review, submission of projects, grading etc. The code can be cloned and modified from GitHub. This application provides an efficient way to manage assignments, grades and reviews.&lt;br /&gt;
Assignment.rb is the largest class in Expertiza, comprising 1105 lines of code which contains the assignment model and the related functionalities. It also contains the score module which is refactored to make the file more clean and easy to read.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line @institution = Institution.new(params[:institution]) to @institution = Institution.new(:name =&amp;gt; params[:institution][:name])&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;br /&gt;
===Views===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| views/admin/list_administrators.html.erb&lt;br /&gt;
| Removed the text field next to New Administrator button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:administrator&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_administrators.html.erb &lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_instructors.html.erb &lt;br /&gt;
| Removed the text field next to New Instructor button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:Instructor&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_super_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb &lt;br /&gt;
| Removed the Parent column from line 4 &lt;br /&gt;
| Super admins don't have any parents.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Removed &amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&lt;br /&gt;
| There can be only one super admin.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| show_admin lists out all the administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_super_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| Lists out the super administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_institutions.html.erb &lt;br /&gt;
| Added this file&lt;br /&gt;
| To add institution drop down menu in the new user creation form.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_user.html.erb&lt;br /&gt;
| Added line &amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
| To select the institution.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/list.html.erb&lt;br /&gt;
| Sending role:student as the default role for new user creation form&lt;br /&gt;
| Was throwing an error&lt;br /&gt;
|-&lt;br /&gt;
| views/users/new.html&lt;br /&gt;
| Default role is selected in new user creation form.&lt;br /&gt;
| So that if new administrator is clicked the user creation form will have admin as the pre selected role.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Re-factored Code Cases =&lt;br /&gt;
&lt;br /&gt;
== Case 1 : Refactoring admin_controller ==&lt;br /&gt;
&lt;br /&gt;
The controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. The functionality to view the list of super-admins, admins and the instructors was added. Also changes were made to add_adminstrator method for adding a new administrator in a clean way.&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     def list_instructors&lt;br /&gt;
    @users = User.&lt;br /&gt;
      instructors.&lt;br /&gt;
      order(:name).&lt;br /&gt;
      where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
      paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def add_administrator&lt;br /&gt;
    @user = User.new&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def new_administrator&lt;br /&gt;
    add_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def save_administrator # saves newly created administrator to database&lt;br /&gt;
    PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def create_administrator&lt;br /&gt;
    save_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def show&lt;br /&gt;
+    redirect_to url_for(:controller =&amp;gt; :users, :action =&amp;gt; :new)&lt;br /&gt;
+  end&lt;br /&gt;
 &lt;br /&gt;
   def list_instructors&lt;br /&gt;
     @users = User.&lt;br /&gt;
       instructors.&lt;br /&gt;
       order(:name).&lt;br /&gt;
       where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
       paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def add_administrator&lt;br /&gt;
     @user = User.new&lt;br /&gt;
+    redirect_to 'users#new'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def new_administrator&lt;br /&gt;
     add_administrator&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def save_administrator # saves newly created administrator to database&lt;br /&gt;
     PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def create_administrator&lt;br /&gt;
     save_administrator&lt;br /&gt;
+    redirect_to &amp;quot;users#new&amp;quot;&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 2 : Refactoring institution_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Before changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  def index&lt;br /&gt;
    list&lt;br /&gt;
    render :action =&amp;gt; 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
  verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
    :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
&lt;br /&gt;
  def list&lt;br /&gt;
    @institutions = Institution.all&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== After Changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index&lt;br /&gt;
-    list&lt;br /&gt;
+   # @institutions=Institution.All&lt;br /&gt;
+   list&lt;br /&gt;
     render :action =&amp;gt; 'list'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
   verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
     :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
 &lt;br /&gt;
   def list&lt;br /&gt;
-    @institutions = Institution.all&lt;br /&gt;
+    @institutions = Institution.all &lt;br /&gt;
+&lt;br /&gt;
   end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 3 : Refactoring user_controller ==&lt;br /&gt;
&lt;br /&gt;
The user_param() method in user_controller did not have any facility to include the institution of the user. After doing a db migration and creating an institution_id in the user table, an institute can be selected while creating a new user.  A mailer error is caused when a user/admin/instructor is created and the application crashes. But this is not because of an error with the functionality. Although, despite the error, one can check if the user has been created by going to Manage -&amp;gt; Users page in the user interface.&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      @user = User.new(user_params)&lt;br /&gt;
      # record the person who created this new user&lt;br /&gt;
      @user.parent_id = (session[:user]).id&lt;br /&gt;
      # set the user's timezone to its parent's&lt;br /&gt;
      @user.timezonepref = User.find(@user.parent_id).timezonepref&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @user = User.new(user_params)&lt;br /&gt;
+      @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
       # record the person who created this new user&lt;br /&gt;
       @user.parent_id = (session[:user]).id&lt;br /&gt;
       # set the user's timezone to its parent's&lt;br /&gt;
      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 4 : Refactoring list_administrators ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
-  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+   &amp;lt;% if user.role_id == 3%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
-        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-&lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
-&amp;lt;% end %&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt; &lt;br /&gt;
+&amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 5 : Refactoring list_instructors.html.erb ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+  &amp;lt;% if user.role_id == 2%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+ &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 6: Refactoring list_super_administrators.html.erb ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+  &amp;lt;input type='submit' value='New Super Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Case 7: Addition of the institution id in the view==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_institutions&amp;quot;&amp;gt;Institution&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
+    &amp;lt;%= collection_select('users',:institutions_id, Institution.all, :id, :name) %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Case 8: Adding the institution feature to user view==&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
&amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@@ -1,13 +1,14 @@&lt;br /&gt;
 &amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
   &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
+&amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
 &amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Case 9:Routes added ==&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
    collection do&lt;br /&gt;
      get :list_super_administrators&lt;br /&gt;
      get :list_administrators&lt;br /&gt;
      get :list_instructors&lt;br /&gt;
      get :new_administrator&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
     collection do&lt;br /&gt;
+      get :create_any_user&lt;br /&gt;
       get :list_super_administrators&lt;br /&gt;
       get :list_administrators&lt;br /&gt;
       get :list_instructors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Steps to verify changes manually==&lt;br /&gt;
In order to inspect the changes made, you can visit our deployed [http://152.46.16.123:3000/admin/list_administrators Expertiza] and use the credentials mentioned at the top of the page.&lt;br /&gt;
&lt;br /&gt;
===Removing the text field from New Administrator===&lt;br /&gt;
[[File:List admin.png]]&lt;br /&gt;
===Administrator as the default role===&lt;br /&gt;
[[File:New admin.png]]&lt;br /&gt;
===Adding Institutions to User creation forms and having student as the default role===&lt;br /&gt;
[[File:Student.png]]&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98488</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98488"/>
		<updated>2015-11-06T22:03:56Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Case 3 : Refactoring user_controller */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page is about an open source project based on Expertiza OSS. This project aims to refactor Admin Controller and Course Controller. It also aims to refactor other snippets which does not follow the Ruby style guidelines.&lt;br /&gt;
Refactoring&lt;br /&gt;
Refactoring[https://en.wikipedia.org/wiki/Code_refactoring] is a technique to alter the internal structure of the code without affecting the external behaviour. It is used for:&lt;br /&gt;
Programs that are difficult to read;&lt;br /&gt;
Programs that does not follow the language specific guidelines;&lt;br /&gt;
Programs that has high coupling;&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[Expertiza][https://expertiza.ncsu.edu/] is an open source project developed using the Ruby on Rails platform. It provides features like team assignments, peer review, submission of projects, grading etc. The code can be cloned and modified from GitHub. This application provides an efficient way to manage assignments, grades and reviews.&lt;br /&gt;
Assignment.rb is the largest class in Expertiza, comprising 1105 lines of code which contains the assignment model and the related functionalities. It also contains the score module which is refactored to make the file more clean and easy to read.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line @institution = Institution.new(params[:institution]) to @institution = Institution.new(:name =&amp;gt; params[:institution][:name])&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;br /&gt;
===Views===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| views/admin/list_administrators.html.erb&lt;br /&gt;
| Removed the text field next to New Administrator button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:administrator&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_administrators.html.erb &lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_instructors.html.erb &lt;br /&gt;
| Removed the text field next to New Instructor button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:Instructor&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_super_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb &lt;br /&gt;
| Removed the Parent column from line 4 &lt;br /&gt;
| Super admins don't have any parents.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Removed &amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&lt;br /&gt;
| There can be only one super admin.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| show_admin lists out all the administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_super_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| Lists out the super administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_institutions.html.erb &lt;br /&gt;
| Added this file&lt;br /&gt;
| To add institution drop down menu in the new user creation form.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_user.html.erb&lt;br /&gt;
| Added line &amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
| To select the institution.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/list.html.erb&lt;br /&gt;
| Sending role:student as the default role for new user creation form&lt;br /&gt;
| Was throwing an error&lt;br /&gt;
|-&lt;br /&gt;
| views/users/new.html&lt;br /&gt;
| Default role is selected in new user creation form.&lt;br /&gt;
| So that if new administrator is clicked the user creation form will have admin as the pre selected role.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Re-factored Code Cases =&lt;br /&gt;
&lt;br /&gt;
== Case 1 : Refactoring admin_controller ==&lt;br /&gt;
&lt;br /&gt;
The controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. The functionality to view the list of super-admins, admins and the instructors was added. Also changes were made to add_adminstrator method for adding a new administrator in a clean way.&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     def list_instructors&lt;br /&gt;
    @users = User.&lt;br /&gt;
      instructors.&lt;br /&gt;
      order(:name).&lt;br /&gt;
      where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
      paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def add_administrator&lt;br /&gt;
    @user = User.new&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def new_administrator&lt;br /&gt;
    add_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def save_administrator # saves newly created administrator to database&lt;br /&gt;
    PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def create_administrator&lt;br /&gt;
    save_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def show&lt;br /&gt;
+    redirect_to url_for(:controller =&amp;gt; :users, :action =&amp;gt; :new)&lt;br /&gt;
+  end&lt;br /&gt;
 &lt;br /&gt;
   def list_instructors&lt;br /&gt;
     @users = User.&lt;br /&gt;
       instructors.&lt;br /&gt;
       order(:name).&lt;br /&gt;
       where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
       paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def add_administrator&lt;br /&gt;
     @user = User.new&lt;br /&gt;
+    redirect_to 'users#new'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def new_administrator&lt;br /&gt;
     add_administrator&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def save_administrator # saves newly created administrator to database&lt;br /&gt;
     PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def create_administrator&lt;br /&gt;
     save_administrator&lt;br /&gt;
+    redirect_to &amp;quot;users#new&amp;quot;&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 2 : Refactoring institution_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Before changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  def index&lt;br /&gt;
    list&lt;br /&gt;
    render :action =&amp;gt; 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
  verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
    :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
&lt;br /&gt;
  def list&lt;br /&gt;
    @institutions = Institution.all&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== After Changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index&lt;br /&gt;
-    list&lt;br /&gt;
+   # @institutions=Institution.All&lt;br /&gt;
+   list&lt;br /&gt;
     render :action =&amp;gt; 'list'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
   verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
     :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
 &lt;br /&gt;
   def list&lt;br /&gt;
-    @institutions = Institution.all&lt;br /&gt;
+    @institutions = Institution.all &lt;br /&gt;
+&lt;br /&gt;
   end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 3 : Refactoring user_controller ==&lt;br /&gt;
&lt;br /&gt;
The user_param() method in user_controller did not have any facility to include the institution of the user. After doing a db migration and creating an institution_id in the user table, an institute can be selected while creating a new user.  A mailer error is caused when a user/admin/instructor is created and the application crashes. But this is not because of an error with the functionality. Although, despite the error, one can check if the user has been created by going to Manage-&amp;gt;Users page in the user interface.&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      @user = User.new(user_params)&lt;br /&gt;
      # record the person who created this new user&lt;br /&gt;
      @user.parent_id = (session[:user]).id&lt;br /&gt;
      # set the user's timezone to its parent's&lt;br /&gt;
      @user.timezonepref = User.find(@user.parent_id).timezonepref&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @user = User.new(user_params)&lt;br /&gt;
+      @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
       # record the person who created this new user&lt;br /&gt;
       @user.parent_id = (session[:user]).id&lt;br /&gt;
       # set the user's timezone to its parent's&lt;br /&gt;
      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 4 : Refactoring list_administrators ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
-  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+   &amp;lt;% if user.role_id == 3%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
-        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-&lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
-&amp;lt;% end %&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt; &lt;br /&gt;
+&amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 5 : Refactoring list_instructors.html.erb ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+  &amp;lt;% if user.role_id == 2%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+ &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 6: Refactoring list_super_administrators.html.erb ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+  &amp;lt;input type='submit' value='New Super Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Case 7: Addition of the institution id in the view==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_institutions&amp;quot;&amp;gt;Institution&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
+    &amp;lt;%= collection_select('users',:institutions_id, Institution.all, :id, :name) %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Case 8: Adding the institution feature to user view==&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
&amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@@ -1,13 +1,14 @@&lt;br /&gt;
 &amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
   &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
+&amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
 &amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Case 9:Routes added ==&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
    collection do&lt;br /&gt;
      get :list_super_administrators&lt;br /&gt;
      get :list_administrators&lt;br /&gt;
      get :list_instructors&lt;br /&gt;
      get :new_administrator&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
     collection do&lt;br /&gt;
+      get :create_any_user&lt;br /&gt;
       get :list_super_administrators&lt;br /&gt;
       get :list_administrators&lt;br /&gt;
       get :list_instructors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Steps to verify changes manually==&lt;br /&gt;
In order to inspect the changes made, you can visit our deployed [http://152.46.16.123:3000/admin/list_administrators Expertiza] and use the credentials mentioned at the top of the page.&lt;br /&gt;
&lt;br /&gt;
===Removing the text field from New Administrator===&lt;br /&gt;
[[File:List admin.png]]&lt;br /&gt;
===Administrator as the default role===&lt;br /&gt;
[[File:New admin.png]]&lt;br /&gt;
===Adding Institutions to User creation forms and having student as the default role===&lt;br /&gt;
[[File:Student.png]]&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98487</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98487"/>
		<updated>2015-11-06T22:03:35Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Case 1 : Refactoring admin_controller */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page is about an open source project based on Expertiza OSS. This project aims to refactor Admin Controller and Course Controller. It also aims to refactor other snippets which does not follow the Ruby style guidelines.&lt;br /&gt;
Refactoring&lt;br /&gt;
Refactoring[https://en.wikipedia.org/wiki/Code_refactoring] is a technique to alter the internal structure of the code without affecting the external behaviour. It is used for:&lt;br /&gt;
Programs that are difficult to read;&lt;br /&gt;
Programs that does not follow the language specific guidelines;&lt;br /&gt;
Programs that has high coupling;&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[Expertiza][https://expertiza.ncsu.edu/] is an open source project developed using the Ruby on Rails platform. It provides features like team assignments, peer review, submission of projects, grading etc. The code can be cloned and modified from GitHub. This application provides an efficient way to manage assignments, grades and reviews.&lt;br /&gt;
Assignment.rb is the largest class in Expertiza, comprising 1105 lines of code which contains the assignment model and the related functionalities. It also contains the score module which is refactored to make the file more clean and easy to read.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line @institution = Institution.new(params[:institution]) to @institution = Institution.new(:name =&amp;gt; params[:institution][:name])&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;br /&gt;
===Views===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| views/admin/list_administrators.html.erb&lt;br /&gt;
| Removed the text field next to New Administrator button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:administrator&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_administrators.html.erb &lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_instructors.html.erb &lt;br /&gt;
| Removed the text field next to New Instructor button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:Instructor&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_super_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb &lt;br /&gt;
| Removed the Parent column from line 4 &lt;br /&gt;
| Super admins don't have any parents.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Removed &amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&lt;br /&gt;
| There can be only one super admin.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| show_admin lists out all the administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_super_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| Lists out the super administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_institutions.html.erb &lt;br /&gt;
| Added this file&lt;br /&gt;
| To add institution drop down menu in the new user creation form.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_user.html.erb&lt;br /&gt;
| Added line &amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
| To select the institution.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/list.html.erb&lt;br /&gt;
| Sending role:student as the default role for new user creation form&lt;br /&gt;
| Was throwing an error&lt;br /&gt;
|-&lt;br /&gt;
| views/users/new.html&lt;br /&gt;
| Default role is selected in new user creation form.&lt;br /&gt;
| So that if new administrator is clicked the user creation form will have admin as the pre selected role.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Re-factored Code Cases =&lt;br /&gt;
&lt;br /&gt;
== Case 1 : Refactoring admin_controller ==&lt;br /&gt;
&lt;br /&gt;
The controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. The functionality to view the list of super-admins, admins and the instructors was added. Also changes were made to add_adminstrator method for adding a new administrator in a clean way.&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     def list_instructors&lt;br /&gt;
    @users = User.&lt;br /&gt;
      instructors.&lt;br /&gt;
      order(:name).&lt;br /&gt;
      where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
      paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def add_administrator&lt;br /&gt;
    @user = User.new&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def new_administrator&lt;br /&gt;
    add_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def save_administrator # saves newly created administrator to database&lt;br /&gt;
    PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def create_administrator&lt;br /&gt;
    save_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def show&lt;br /&gt;
+    redirect_to url_for(:controller =&amp;gt; :users, :action =&amp;gt; :new)&lt;br /&gt;
+  end&lt;br /&gt;
 &lt;br /&gt;
   def list_instructors&lt;br /&gt;
     @users = User.&lt;br /&gt;
       instructors.&lt;br /&gt;
       order(:name).&lt;br /&gt;
       where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
       paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def add_administrator&lt;br /&gt;
     @user = User.new&lt;br /&gt;
+    redirect_to 'users#new'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def new_administrator&lt;br /&gt;
     add_administrator&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def save_administrator # saves newly created administrator to database&lt;br /&gt;
     PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def create_administrator&lt;br /&gt;
     save_administrator&lt;br /&gt;
+    redirect_to &amp;quot;users#new&amp;quot;&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 2 : Refactoring institution_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Before changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  def index&lt;br /&gt;
    list&lt;br /&gt;
    render :action =&amp;gt; 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
  verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
    :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
&lt;br /&gt;
  def list&lt;br /&gt;
    @institutions = Institution.all&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== After Changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index&lt;br /&gt;
-    list&lt;br /&gt;
+   # @institutions=Institution.All&lt;br /&gt;
+   list&lt;br /&gt;
     render :action =&amp;gt; 'list'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
   verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
     :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
 &lt;br /&gt;
   def list&lt;br /&gt;
-    @institutions = Institution.all&lt;br /&gt;
+    @institutions = Institution.all &lt;br /&gt;
+&lt;br /&gt;
   end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 3 : Refactoring user_controller ==&lt;br /&gt;
&lt;br /&gt;
The user_param() method in user_controller did not have any facility to include the institution of the user. After doing a db migration and creating an institution_id in the user table, an institute can be selected while creating a new user.&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      @user = User.new(user_params)&lt;br /&gt;
      # record the person who created this new user&lt;br /&gt;
      @user.parent_id = (session[:user]).id&lt;br /&gt;
      # set the user's timezone to its parent's&lt;br /&gt;
      @user.timezonepref = User.find(@user.parent_id).timezonepref&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @user = User.new(user_params)&lt;br /&gt;
+      @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
       # record the person who created this new user&lt;br /&gt;
       @user.parent_id = (session[:user]).id&lt;br /&gt;
       # set the user's timezone to its parent's&lt;br /&gt;
      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 4 : Refactoring list_administrators ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
-  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+   &amp;lt;% if user.role_id == 3%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
-        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-&lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
-&amp;lt;% end %&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt; &lt;br /&gt;
+&amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 5 : Refactoring list_instructors.html.erb ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+  &amp;lt;% if user.role_id == 2%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+ &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 6: Refactoring list_super_administrators.html.erb ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+  &amp;lt;input type='submit' value='New Super Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Case 7: Addition of the institution id in the view==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_institutions&amp;quot;&amp;gt;Institution&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
+    &amp;lt;%= collection_select('users',:institutions_id, Institution.all, :id, :name) %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Case 8: Adding the institution feature to user view==&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
&amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@@ -1,13 +1,14 @@&lt;br /&gt;
 &amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
   &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
+&amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
 &amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Case 9:Routes added ==&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
    collection do&lt;br /&gt;
      get :list_super_administrators&lt;br /&gt;
      get :list_administrators&lt;br /&gt;
      get :list_instructors&lt;br /&gt;
      get :new_administrator&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
     collection do&lt;br /&gt;
+      get :create_any_user&lt;br /&gt;
       get :list_super_administrators&lt;br /&gt;
       get :list_administrators&lt;br /&gt;
       get :list_instructors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Steps to verify changes manually==&lt;br /&gt;
In order to inspect the changes made, you can visit our deployed [http://152.46.16.123:3000/admin/list_administrators Expertiza] and use the credentials mentioned at the top of the page.&lt;br /&gt;
&lt;br /&gt;
===Removing the text field from New Administrator===&lt;br /&gt;
[[File:List admin.png]]&lt;br /&gt;
===Administrator as the default role===&lt;br /&gt;
[[File:New admin.png]]&lt;br /&gt;
===Adding Institutions to User creation forms and having student as the default role===&lt;br /&gt;
[[File:Student.png]]&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98486</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98486"/>
		<updated>2015-11-06T22:03:05Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Case 1 : Refactoring admin_controller */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page is about an open source project based on Expertiza OSS. This project aims to refactor Admin Controller and Course Controller. It also aims to refactor other snippets which does not follow the Ruby style guidelines.&lt;br /&gt;
Refactoring&lt;br /&gt;
Refactoring[https://en.wikipedia.org/wiki/Code_refactoring] is a technique to alter the internal structure of the code without affecting the external behaviour. It is used for:&lt;br /&gt;
Programs that are difficult to read;&lt;br /&gt;
Programs that does not follow the language specific guidelines;&lt;br /&gt;
Programs that has high coupling;&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[Expertiza][https://expertiza.ncsu.edu/] is an open source project developed using the Ruby on Rails platform. It provides features like team assignments, peer review, submission of projects, grading etc. The code can be cloned and modified from GitHub. This application provides an efficient way to manage assignments, grades and reviews.&lt;br /&gt;
Assignment.rb is the largest class in Expertiza, comprising 1105 lines of code which contains the assignment model and the related functionalities. It also contains the score module which is refactored to make the file more clean and easy to read.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line @institution = Institution.new(params[:institution]) to @institution = Institution.new(:name =&amp;gt; params[:institution][:name])&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;br /&gt;
===Views===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| views/admin/list_administrators.html.erb&lt;br /&gt;
| Removed the text field next to New Administrator button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:administrator&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_administrators.html.erb &lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_instructors.html.erb &lt;br /&gt;
| Removed the text field next to New Instructor button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:Instructor&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_super_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb &lt;br /&gt;
| Removed the Parent column from line 4 &lt;br /&gt;
| Super admins don't have any parents.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Removed &amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&lt;br /&gt;
| There can be only one super admin.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| show_admin lists out all the administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_super_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| Lists out the super administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_institutions.html.erb &lt;br /&gt;
| Added this file&lt;br /&gt;
| To add institution drop down menu in the new user creation form.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_user.html.erb&lt;br /&gt;
| Added line &amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
| To select the institution.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/list.html.erb&lt;br /&gt;
| Sending role:student as the default role for new user creation form&lt;br /&gt;
| Was throwing an error&lt;br /&gt;
|-&lt;br /&gt;
| views/users/new.html&lt;br /&gt;
| Default role is selected in new user creation form.&lt;br /&gt;
| So that if new administrator is clicked the user creation form will have admin as the pre selected role.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Re-factored Code Cases =&lt;br /&gt;
&lt;br /&gt;
== Case 1 : Refactoring admin_controller ==&lt;br /&gt;
&lt;br /&gt;
The controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. The functionality to view the list of super-admins, admins and the instructors was added. Also changes were made to add_adminstrator method for adding a new administrator in a clean way. A mailer error is caused when a user/admin/instructor is created and the application crashes. But this is not because of an error with the functionality. Although, despite the error, one can check if the user has been created by going to Manage-&amp;gt;Users page in the user interface.&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     def list_instructors&lt;br /&gt;
    @users = User.&lt;br /&gt;
      instructors.&lt;br /&gt;
      order(:name).&lt;br /&gt;
      where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
      paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def add_administrator&lt;br /&gt;
    @user = User.new&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def new_administrator&lt;br /&gt;
    add_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def save_administrator # saves newly created administrator to database&lt;br /&gt;
    PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def create_administrator&lt;br /&gt;
    save_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def show&lt;br /&gt;
+    redirect_to url_for(:controller =&amp;gt; :users, :action =&amp;gt; :new)&lt;br /&gt;
+  end&lt;br /&gt;
 &lt;br /&gt;
   def list_instructors&lt;br /&gt;
     @users = User.&lt;br /&gt;
       instructors.&lt;br /&gt;
       order(:name).&lt;br /&gt;
       where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
       paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def add_administrator&lt;br /&gt;
     @user = User.new&lt;br /&gt;
+    redirect_to 'users#new'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def new_administrator&lt;br /&gt;
     add_administrator&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def save_administrator # saves newly created administrator to database&lt;br /&gt;
     PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def create_administrator&lt;br /&gt;
     save_administrator&lt;br /&gt;
+    redirect_to &amp;quot;users#new&amp;quot;&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 2 : Refactoring institution_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Before changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  def index&lt;br /&gt;
    list&lt;br /&gt;
    render :action =&amp;gt; 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
  verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
    :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
&lt;br /&gt;
  def list&lt;br /&gt;
    @institutions = Institution.all&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== After Changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index&lt;br /&gt;
-    list&lt;br /&gt;
+   # @institutions=Institution.All&lt;br /&gt;
+   list&lt;br /&gt;
     render :action =&amp;gt; 'list'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
   verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
     :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
 &lt;br /&gt;
   def list&lt;br /&gt;
-    @institutions = Institution.all&lt;br /&gt;
+    @institutions = Institution.all &lt;br /&gt;
+&lt;br /&gt;
   end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 3 : Refactoring user_controller ==&lt;br /&gt;
&lt;br /&gt;
The user_param() method in user_controller did not have any facility to include the institution of the user. After doing a db migration and creating an institution_id in the user table, an institute can be selected while creating a new user.&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      @user = User.new(user_params)&lt;br /&gt;
      # record the person who created this new user&lt;br /&gt;
      @user.parent_id = (session[:user]).id&lt;br /&gt;
      # set the user's timezone to its parent's&lt;br /&gt;
      @user.timezonepref = User.find(@user.parent_id).timezonepref&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @user = User.new(user_params)&lt;br /&gt;
+      @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
       # record the person who created this new user&lt;br /&gt;
       @user.parent_id = (session[:user]).id&lt;br /&gt;
       # set the user's timezone to its parent's&lt;br /&gt;
      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 4 : Refactoring list_administrators ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
-  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+   &amp;lt;% if user.role_id == 3%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
-        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-&lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
-&amp;lt;% end %&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt; &lt;br /&gt;
+&amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 5 : Refactoring list_instructors.html.erb ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+  &amp;lt;% if user.role_id == 2%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+ &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 6: Refactoring list_super_administrators.html.erb ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+  &amp;lt;input type='submit' value='New Super Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Case 7: Addition of the institution id in the view==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_institutions&amp;quot;&amp;gt;Institution&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
+    &amp;lt;%= collection_select('users',:institutions_id, Institution.all, :id, :name) %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Case 8: Adding the institution feature to user view==&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
&amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@@ -1,13 +1,14 @@&lt;br /&gt;
 &amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
   &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
+&amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
 &amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Case 9:Routes added ==&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
    collection do&lt;br /&gt;
      get :list_super_administrators&lt;br /&gt;
      get :list_administrators&lt;br /&gt;
      get :list_instructors&lt;br /&gt;
      get :new_administrator&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
     collection do&lt;br /&gt;
+      get :create_any_user&lt;br /&gt;
       get :list_super_administrators&lt;br /&gt;
       get :list_administrators&lt;br /&gt;
       get :list_instructors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Steps to verify changes manually==&lt;br /&gt;
In order to inspect the changes made, you can visit our deployed [http://152.46.16.123:3000/admin/list_administrators Expertiza] and use the credentials mentioned at the top of the page.&lt;br /&gt;
&lt;br /&gt;
===Removing the text field from New Administrator===&lt;br /&gt;
[[File:List admin.png]]&lt;br /&gt;
===Administrator as the default role===&lt;br /&gt;
[[File:New admin.png]]&lt;br /&gt;
===Adding Institutions to User creation forms and having student as the default role===&lt;br /&gt;
[[File:Student.png]]&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98485</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98485"/>
		<updated>2015-11-06T21:57:58Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Case 9:Routes added */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page is about an open source project based on Expertiza OSS. This project aims to refactor Admin Controller and Course Controller. It also aims to refactor other snippets which does not follow the Ruby style guidelines.&lt;br /&gt;
Refactoring&lt;br /&gt;
Refactoring[https://en.wikipedia.org/wiki/Code_refactoring] is a technique to alter the internal structure of the code without affecting the external behaviour. It is used for:&lt;br /&gt;
Programs that are difficult to read;&lt;br /&gt;
Programs that does not follow the language specific guidelines;&lt;br /&gt;
Programs that has high coupling;&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[Expertiza][https://expertiza.ncsu.edu/] is an open source project developed using the Ruby on Rails platform. It provides features like team assignments, peer review, submission of projects, grading etc. The code can be cloned and modified from GitHub. This application provides an efficient way to manage assignments, grades and reviews.&lt;br /&gt;
Assignment.rb is the largest class in Expertiza, comprising 1105 lines of code which contains the assignment model and the related functionalities. It also contains the score module which is refactored to make the file more clean and easy to read.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line @institution = Institution.new(params[:institution]) to @institution = Institution.new(:name =&amp;gt; params[:institution][:name])&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;br /&gt;
===Views===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| views/admin/list_administrators.html.erb&lt;br /&gt;
| Removed the text field next to New Administrator button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:administrator&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_administrators.html.erb &lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_instructors.html.erb &lt;br /&gt;
| Removed the text field next to New Instructor button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:Instructor&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_super_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb &lt;br /&gt;
| Removed the Parent column from line 4 &lt;br /&gt;
| Super admins don't have any parents.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Removed &amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&lt;br /&gt;
| There can be only one super admin.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| show_admin lists out all the administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_super_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| Lists out the super administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_institutions.html.erb &lt;br /&gt;
| Added this file&lt;br /&gt;
| To add institution drop down menu in the new user creation form.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_user.html.erb&lt;br /&gt;
| Added line &amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
| To select the institution.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/list.html.erb&lt;br /&gt;
| Sending role:student as the default role for new user creation form&lt;br /&gt;
| Was throwing an error&lt;br /&gt;
|-&lt;br /&gt;
| views/users/new.html&lt;br /&gt;
| Default role is selected in new user creation form.&lt;br /&gt;
| So that if new administrator is clicked the user creation form will have admin as the pre selected role.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Re-factored Code Cases =&lt;br /&gt;
&lt;br /&gt;
== Case 1 : Refactoring admin_controller ==&lt;br /&gt;
&lt;br /&gt;
The controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. The functionality to view the list of super-admins, admins and the instructors was added. Also changes were made to add_adminstrator method for adding a new administrator in a clean way.&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     def list_instructors&lt;br /&gt;
    @users = User.&lt;br /&gt;
      instructors.&lt;br /&gt;
      order(:name).&lt;br /&gt;
      where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
      paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def add_administrator&lt;br /&gt;
    @user = User.new&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def new_administrator&lt;br /&gt;
    add_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def save_administrator # saves newly created administrator to database&lt;br /&gt;
    PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def create_administrator&lt;br /&gt;
    save_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def show&lt;br /&gt;
+    redirect_to url_for(:controller =&amp;gt; :users, :action =&amp;gt; :new)&lt;br /&gt;
+  end&lt;br /&gt;
 &lt;br /&gt;
   def list_instructors&lt;br /&gt;
     @users = User.&lt;br /&gt;
       instructors.&lt;br /&gt;
       order(:name).&lt;br /&gt;
       where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
       paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def add_administrator&lt;br /&gt;
     @user = User.new&lt;br /&gt;
+    redirect_to 'users#new'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def new_administrator&lt;br /&gt;
     add_administrator&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def save_administrator # saves newly created administrator to database&lt;br /&gt;
     PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def create_administrator&lt;br /&gt;
     save_administrator&lt;br /&gt;
+    redirect_to &amp;quot;users#new&amp;quot;&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 2 : Refactoring institution_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Before changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  def index&lt;br /&gt;
    list&lt;br /&gt;
    render :action =&amp;gt; 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
  verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
    :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
&lt;br /&gt;
  def list&lt;br /&gt;
    @institutions = Institution.all&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== After Changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index&lt;br /&gt;
-    list&lt;br /&gt;
+   # @institutions=Institution.All&lt;br /&gt;
+   list&lt;br /&gt;
     render :action =&amp;gt; 'list'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
   verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
     :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
 &lt;br /&gt;
   def list&lt;br /&gt;
-    @institutions = Institution.all&lt;br /&gt;
+    @institutions = Institution.all &lt;br /&gt;
+&lt;br /&gt;
   end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 3 : Refactoring user_controller ==&lt;br /&gt;
&lt;br /&gt;
The user_param() method in user_controller did not have any facility to include the institution of the user. After doing a db migration and creating an institution_id in the user table, an institute can be selected while creating a new user.&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      @user = User.new(user_params)&lt;br /&gt;
      # record the person who created this new user&lt;br /&gt;
      @user.parent_id = (session[:user]).id&lt;br /&gt;
      # set the user's timezone to its parent's&lt;br /&gt;
      @user.timezonepref = User.find(@user.parent_id).timezonepref&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @user = User.new(user_params)&lt;br /&gt;
+      @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
       # record the person who created this new user&lt;br /&gt;
       @user.parent_id = (session[:user]).id&lt;br /&gt;
       # set the user's timezone to its parent's&lt;br /&gt;
      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 4 : Refactoring list_administrators ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
-  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+   &amp;lt;% if user.role_id == 3%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
-        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-&lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
-&amp;lt;% end %&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt; &lt;br /&gt;
+&amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 5 : Refactoring list_instructors.html.erb ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+  &amp;lt;% if user.role_id == 2%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+ &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 6: Refactoring list_super_administrators.html.erb ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+  &amp;lt;input type='submit' value='New Super Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Case 7: Addition of the institution id in the view==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_institutions&amp;quot;&amp;gt;Institution&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
+    &amp;lt;%= collection_select('users',:institutions_id, Institution.all, :id, :name) %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Case 8: Adding the institution feature to user view==&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
&amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@@ -1,13 +1,14 @@&lt;br /&gt;
 &amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
   &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
+&amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
 &amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Case 9:Routes added ==&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
    collection do&lt;br /&gt;
      get :list_super_administrators&lt;br /&gt;
      get :list_administrators&lt;br /&gt;
      get :list_instructors&lt;br /&gt;
      get :new_administrator&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
     collection do&lt;br /&gt;
+      get :create_any_user&lt;br /&gt;
       get :list_super_administrators&lt;br /&gt;
       get :list_administrators&lt;br /&gt;
       get :list_instructors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Steps to verify changes manually==&lt;br /&gt;
In order to inspect the changes made, you can visit our deployed [http://152.46.16.123:3000/admin/list_administrators Expertiza] and use the credentials mentioned at the top of the page.&lt;br /&gt;
&lt;br /&gt;
===Removing the text field from New Administrator===&lt;br /&gt;
[[File:List admin.png]]&lt;br /&gt;
===Administrator as the default role===&lt;br /&gt;
[[File:New admin.png]]&lt;br /&gt;
===Adding Institutions to User creation forms and having student as the default role===&lt;br /&gt;
[[File:Student.png]]&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98484</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98484"/>
		<updated>2015-11-06T21:57:21Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Case 8: Adding the institution feature to user view */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page is about an open source project based on Expertiza OSS. This project aims to refactor Admin Controller and Course Controller. It also aims to refactor other snippets which does not follow the Ruby style guidelines.&lt;br /&gt;
Refactoring&lt;br /&gt;
Refactoring[https://en.wikipedia.org/wiki/Code_refactoring] is a technique to alter the internal structure of the code without affecting the external behaviour. It is used for:&lt;br /&gt;
Programs that are difficult to read;&lt;br /&gt;
Programs that does not follow the language specific guidelines;&lt;br /&gt;
Programs that has high coupling;&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[Expertiza][https://expertiza.ncsu.edu/] is an open source project developed using the Ruby on Rails platform. It provides features like team assignments, peer review, submission of projects, grading etc. The code can be cloned and modified from GitHub. This application provides an efficient way to manage assignments, grades and reviews.&lt;br /&gt;
Assignment.rb is the largest class in Expertiza, comprising 1105 lines of code which contains the assignment model and the related functionalities. It also contains the score module which is refactored to make the file more clean and easy to read.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line @institution = Institution.new(params[:institution]) to @institution = Institution.new(:name =&amp;gt; params[:institution][:name])&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;br /&gt;
===Views===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| views/admin/list_administrators.html.erb&lt;br /&gt;
| Removed the text field next to New Administrator button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:administrator&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_administrators.html.erb &lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_instructors.html.erb &lt;br /&gt;
| Removed the text field next to New Instructor button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:Instructor&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_super_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb &lt;br /&gt;
| Removed the Parent column from line 4 &lt;br /&gt;
| Super admins don't have any parents.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Removed &amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&lt;br /&gt;
| There can be only one super admin.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| show_admin lists out all the administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_super_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| Lists out the super administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_institutions.html.erb &lt;br /&gt;
| Added this file&lt;br /&gt;
| To add institution drop down menu in the new user creation form.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_user.html.erb&lt;br /&gt;
| Added line &amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
| To select the institution.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/list.html.erb&lt;br /&gt;
| Sending role:student as the default role for new user creation form&lt;br /&gt;
| Was throwing an error&lt;br /&gt;
|-&lt;br /&gt;
| views/users/new.html&lt;br /&gt;
| Default role is selected in new user creation form.&lt;br /&gt;
| So that if new administrator is clicked the user creation form will have admin as the pre selected role.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Re-factored Code Cases =&lt;br /&gt;
&lt;br /&gt;
== Case 1 : Refactoring admin_controller ==&lt;br /&gt;
&lt;br /&gt;
The controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. The functionality to view the list of super-admins, admins and the instructors was added. Also changes were made to add_adminstrator method for adding a new administrator in a clean way.&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     def list_instructors&lt;br /&gt;
    @users = User.&lt;br /&gt;
      instructors.&lt;br /&gt;
      order(:name).&lt;br /&gt;
      where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
      paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def add_administrator&lt;br /&gt;
    @user = User.new&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def new_administrator&lt;br /&gt;
    add_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def save_administrator # saves newly created administrator to database&lt;br /&gt;
    PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def create_administrator&lt;br /&gt;
    save_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def show&lt;br /&gt;
+    redirect_to url_for(:controller =&amp;gt; :users, :action =&amp;gt; :new)&lt;br /&gt;
+  end&lt;br /&gt;
 &lt;br /&gt;
   def list_instructors&lt;br /&gt;
     @users = User.&lt;br /&gt;
       instructors.&lt;br /&gt;
       order(:name).&lt;br /&gt;
       where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
       paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def add_administrator&lt;br /&gt;
     @user = User.new&lt;br /&gt;
+    redirect_to 'users#new'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def new_administrator&lt;br /&gt;
     add_administrator&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def save_administrator # saves newly created administrator to database&lt;br /&gt;
     PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def create_administrator&lt;br /&gt;
     save_administrator&lt;br /&gt;
+    redirect_to &amp;quot;users#new&amp;quot;&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 2 : Refactoring institution_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Before changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  def index&lt;br /&gt;
    list&lt;br /&gt;
    render :action =&amp;gt; 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
  verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
    :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
&lt;br /&gt;
  def list&lt;br /&gt;
    @institutions = Institution.all&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== After Changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index&lt;br /&gt;
-    list&lt;br /&gt;
+   # @institutions=Institution.All&lt;br /&gt;
+   list&lt;br /&gt;
     render :action =&amp;gt; 'list'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
   verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
     :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
 &lt;br /&gt;
   def list&lt;br /&gt;
-    @institutions = Institution.all&lt;br /&gt;
+    @institutions = Institution.all &lt;br /&gt;
+&lt;br /&gt;
   end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 3 : Refactoring user_controller ==&lt;br /&gt;
&lt;br /&gt;
The user_param() method in user_controller did not have any facility to include the institution of the user. After doing a db migration and creating an institution_id in the user table, an institute can be selected while creating a new user.&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      @user = User.new(user_params)&lt;br /&gt;
      # record the person who created this new user&lt;br /&gt;
      @user.parent_id = (session[:user]).id&lt;br /&gt;
      # set the user's timezone to its parent's&lt;br /&gt;
      @user.timezonepref = User.find(@user.parent_id).timezonepref&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @user = User.new(user_params)&lt;br /&gt;
+      @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
       # record the person who created this new user&lt;br /&gt;
       @user.parent_id = (session[:user]).id&lt;br /&gt;
       # set the user's timezone to its parent's&lt;br /&gt;
      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 4 : Refactoring list_administrators ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
-  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+   &amp;lt;% if user.role_id == 3%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
-        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-&lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
-&amp;lt;% end %&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt; &lt;br /&gt;
+&amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 5 : Refactoring list_instructors.html.erb ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+  &amp;lt;% if user.role_id == 2%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+ &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 6: Refactoring list_super_administrators.html.erb ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+  &amp;lt;input type='submit' value='New Super Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Case 7: Addition of the institution id in the view==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_institutions&amp;quot;&amp;gt;Institution&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
+    &amp;lt;%= collection_select('users',:institutions_id, Institution.all, :id, :name) %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Case 8: Adding the institution feature to user view==&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
&amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@@ -1,13 +1,14 @@&lt;br /&gt;
 &amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
   &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
+&amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
 &amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 9:Routes added ===&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
    collection do&lt;br /&gt;
      get :list_super_administrators&lt;br /&gt;
      get :list_administrators&lt;br /&gt;
      get :list_instructors&lt;br /&gt;
      get :new_administrator&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
     collection do&lt;br /&gt;
+      get :create_any_user&lt;br /&gt;
       get :list_super_administrators&lt;br /&gt;
       get :list_administrators&lt;br /&gt;
       get :list_instructors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Steps to verify changes manually==&lt;br /&gt;
In order to inspect the changes made, you can visit our deployed [http://152.46.16.123:3000/admin/list_administrators Expertiza] and use the credentials mentioned at the top of the page.&lt;br /&gt;
&lt;br /&gt;
===Removing the text field from New Administrator===&lt;br /&gt;
[[File:List admin.png]]&lt;br /&gt;
===Administrator as the default role===&lt;br /&gt;
[[File:New admin.png]]&lt;br /&gt;
===Adding Institutions to User creation forms and having student as the default role===&lt;br /&gt;
[[File:Student.png]]&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98483</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98483"/>
		<updated>2015-11-06T21:57:10Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Case 7: Addition of the institution id in the view */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page is about an open source project based on Expertiza OSS. This project aims to refactor Admin Controller and Course Controller. It also aims to refactor other snippets which does not follow the Ruby style guidelines.&lt;br /&gt;
Refactoring&lt;br /&gt;
Refactoring[https://en.wikipedia.org/wiki/Code_refactoring] is a technique to alter the internal structure of the code without affecting the external behaviour. It is used for:&lt;br /&gt;
Programs that are difficult to read;&lt;br /&gt;
Programs that does not follow the language specific guidelines;&lt;br /&gt;
Programs that has high coupling;&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[Expertiza][https://expertiza.ncsu.edu/] is an open source project developed using the Ruby on Rails platform. It provides features like team assignments, peer review, submission of projects, grading etc. The code can be cloned and modified from GitHub. This application provides an efficient way to manage assignments, grades and reviews.&lt;br /&gt;
Assignment.rb is the largest class in Expertiza, comprising 1105 lines of code which contains the assignment model and the related functionalities. It also contains the score module which is refactored to make the file more clean and easy to read.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line @institution = Institution.new(params[:institution]) to @institution = Institution.new(:name =&amp;gt; params[:institution][:name])&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;br /&gt;
===Views===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| views/admin/list_administrators.html.erb&lt;br /&gt;
| Removed the text field next to New Administrator button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:administrator&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_administrators.html.erb &lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_instructors.html.erb &lt;br /&gt;
| Removed the text field next to New Instructor button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:Instructor&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_super_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb &lt;br /&gt;
| Removed the Parent column from line 4 &lt;br /&gt;
| Super admins don't have any parents.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Removed &amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&lt;br /&gt;
| There can be only one super admin.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| show_admin lists out all the administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_super_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| Lists out the super administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_institutions.html.erb &lt;br /&gt;
| Added this file&lt;br /&gt;
| To add institution drop down menu in the new user creation form.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_user.html.erb&lt;br /&gt;
| Added line &amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
| To select the institution.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/list.html.erb&lt;br /&gt;
| Sending role:student as the default role for new user creation form&lt;br /&gt;
| Was throwing an error&lt;br /&gt;
|-&lt;br /&gt;
| views/users/new.html&lt;br /&gt;
| Default role is selected in new user creation form.&lt;br /&gt;
| So that if new administrator is clicked the user creation form will have admin as the pre selected role.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Re-factored Code Cases =&lt;br /&gt;
&lt;br /&gt;
== Case 1 : Refactoring admin_controller ==&lt;br /&gt;
&lt;br /&gt;
The controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. The functionality to view the list of super-admins, admins and the instructors was added. Also changes were made to add_adminstrator method for adding a new administrator in a clean way.&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     def list_instructors&lt;br /&gt;
    @users = User.&lt;br /&gt;
      instructors.&lt;br /&gt;
      order(:name).&lt;br /&gt;
      where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
      paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def add_administrator&lt;br /&gt;
    @user = User.new&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def new_administrator&lt;br /&gt;
    add_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def save_administrator # saves newly created administrator to database&lt;br /&gt;
    PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def create_administrator&lt;br /&gt;
    save_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def show&lt;br /&gt;
+    redirect_to url_for(:controller =&amp;gt; :users, :action =&amp;gt; :new)&lt;br /&gt;
+  end&lt;br /&gt;
 &lt;br /&gt;
   def list_instructors&lt;br /&gt;
     @users = User.&lt;br /&gt;
       instructors.&lt;br /&gt;
       order(:name).&lt;br /&gt;
       where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
       paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def add_administrator&lt;br /&gt;
     @user = User.new&lt;br /&gt;
+    redirect_to 'users#new'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def new_administrator&lt;br /&gt;
     add_administrator&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def save_administrator # saves newly created administrator to database&lt;br /&gt;
     PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def create_administrator&lt;br /&gt;
     save_administrator&lt;br /&gt;
+    redirect_to &amp;quot;users#new&amp;quot;&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 2 : Refactoring institution_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Before changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  def index&lt;br /&gt;
    list&lt;br /&gt;
    render :action =&amp;gt; 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
  verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
    :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
&lt;br /&gt;
  def list&lt;br /&gt;
    @institutions = Institution.all&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== After Changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index&lt;br /&gt;
-    list&lt;br /&gt;
+   # @institutions=Institution.All&lt;br /&gt;
+   list&lt;br /&gt;
     render :action =&amp;gt; 'list'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
   verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
     :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
 &lt;br /&gt;
   def list&lt;br /&gt;
-    @institutions = Institution.all&lt;br /&gt;
+    @institutions = Institution.all &lt;br /&gt;
+&lt;br /&gt;
   end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 3 : Refactoring user_controller ==&lt;br /&gt;
&lt;br /&gt;
The user_param() method in user_controller did not have any facility to include the institution of the user. After doing a db migration and creating an institution_id in the user table, an institute can be selected while creating a new user.&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      @user = User.new(user_params)&lt;br /&gt;
      # record the person who created this new user&lt;br /&gt;
      @user.parent_id = (session[:user]).id&lt;br /&gt;
      # set the user's timezone to its parent's&lt;br /&gt;
      @user.timezonepref = User.find(@user.parent_id).timezonepref&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @user = User.new(user_params)&lt;br /&gt;
+      @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
       # record the person who created this new user&lt;br /&gt;
       @user.parent_id = (session[:user]).id&lt;br /&gt;
       # set the user's timezone to its parent's&lt;br /&gt;
      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 4 : Refactoring list_administrators ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
-  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+   &amp;lt;% if user.role_id == 3%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
-        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-&lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
-&amp;lt;% end %&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt; &lt;br /&gt;
+&amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 5 : Refactoring list_instructors.html.erb ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+  &amp;lt;% if user.role_id == 2%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+ &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 6: Refactoring list_super_administrators.html.erb ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+  &amp;lt;input type='submit' value='New Super Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Case 7: Addition of the institution id in the view==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_institutions&amp;quot;&amp;gt;Institution&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
+    &amp;lt;%= collection_select('users',:institutions_id, Institution.all, :id, :name) %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 8: Adding the institution feature to user view===&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
&amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@@ -1,13 +1,14 @@&lt;br /&gt;
 &amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
   &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
+&amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
 &amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 9:Routes added ===&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
    collection do&lt;br /&gt;
      get :list_super_administrators&lt;br /&gt;
      get :list_administrators&lt;br /&gt;
      get :list_instructors&lt;br /&gt;
      get :new_administrator&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
     collection do&lt;br /&gt;
+      get :create_any_user&lt;br /&gt;
       get :list_super_administrators&lt;br /&gt;
       get :list_administrators&lt;br /&gt;
       get :list_instructors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Steps to verify changes manually==&lt;br /&gt;
In order to inspect the changes made, you can visit our deployed [http://152.46.16.123:3000/admin/list_administrators Expertiza] and use the credentials mentioned at the top of the page.&lt;br /&gt;
&lt;br /&gt;
===Removing the text field from New Administrator===&lt;br /&gt;
[[File:List admin.png]]&lt;br /&gt;
===Administrator as the default role===&lt;br /&gt;
[[File:New admin.png]]&lt;br /&gt;
===Adding Institutions to User creation forms and having student as the default role===&lt;br /&gt;
[[File:Student.png]]&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98481</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98481"/>
		<updated>2015-11-06T21:52:06Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Case 3 : Refactoring user_controller */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page is about an open source project based on Expertiza OSS. This project aims to refactor Admin Controller and Course Controller. It also aims to refactor other snippets which does not follow the Ruby style guidelines.&lt;br /&gt;
Refactoring&lt;br /&gt;
Refactoring[https://en.wikipedia.org/wiki/Code_refactoring] is a technique to alter the internal structure of the code without affecting the external behaviour. It is used for:&lt;br /&gt;
Programs that are difficult to read;&lt;br /&gt;
Programs that does not follow the language specific guidelines;&lt;br /&gt;
Programs that has high coupling;&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[Expertiza][https://expertiza.ncsu.edu/] is an open source project developed using the Ruby on Rails platform. It provides features like team assignments, peer review, submission of projects, grading etc. The code can be cloned and modified from GitHub. This application provides an efficient way to manage assignments, grades and reviews.&lt;br /&gt;
Assignment.rb is the largest class in Expertiza, comprising 1105 lines of code which contains the assignment model and the related functionalities. It also contains the score module which is refactored to make the file more clean and easy to read.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line @institution = Institution.new(params[:institution]) to @institution = Institution.new(:name =&amp;gt; params[:institution][:name])&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;br /&gt;
===Views===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| views/admin/list_administrators.html.erb&lt;br /&gt;
| Removed the text field next to New Administrator button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:administrator&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_administrators.html.erb &lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_instructors.html.erb &lt;br /&gt;
| Removed the text field next to New Instructor button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:Instructor&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_super_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb &lt;br /&gt;
| Removed the Parent column from line 4 &lt;br /&gt;
| Super admins don't have any parents.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Removed &amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&lt;br /&gt;
| There can be only one super admin.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| show_admin lists out all the administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_super_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| Lists out the super administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_institutions.html.erb &lt;br /&gt;
| Added this file&lt;br /&gt;
| To add institution drop down menu in the new user creation form.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_user.html.erb&lt;br /&gt;
| Added line &amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
| To select the institution.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/list.html.erb&lt;br /&gt;
| Sending role:student as the default role for new user creation form&lt;br /&gt;
| Was throwing an error&lt;br /&gt;
|-&lt;br /&gt;
| views/users/new.html&lt;br /&gt;
| Default role is selected in new user creation form.&lt;br /&gt;
| So that if new administrator is clicked the user creation form will have admin as the pre selected role.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Re-factored Code Cases =&lt;br /&gt;
&lt;br /&gt;
== Case 1 : Refactoring admin_controller ==&lt;br /&gt;
&lt;br /&gt;
The controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. The functionality to view the list of super-admins, admins and the instructors was added. Also changes were made to add_adminstrator method for adding a new administrator in a clean way.&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     def list_instructors&lt;br /&gt;
    @users = User.&lt;br /&gt;
      instructors.&lt;br /&gt;
      order(:name).&lt;br /&gt;
      where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
      paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def add_administrator&lt;br /&gt;
    @user = User.new&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def new_administrator&lt;br /&gt;
    add_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def save_administrator # saves newly created administrator to database&lt;br /&gt;
    PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def create_administrator&lt;br /&gt;
    save_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def show&lt;br /&gt;
+    redirect_to url_for(:controller =&amp;gt; :users, :action =&amp;gt; :new)&lt;br /&gt;
+  end&lt;br /&gt;
 &lt;br /&gt;
   def list_instructors&lt;br /&gt;
     @users = User.&lt;br /&gt;
       instructors.&lt;br /&gt;
       order(:name).&lt;br /&gt;
       where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
       paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def add_administrator&lt;br /&gt;
     @user = User.new&lt;br /&gt;
+    redirect_to 'users#new'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def new_administrator&lt;br /&gt;
     add_administrator&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def save_administrator # saves newly created administrator to database&lt;br /&gt;
     PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def create_administrator&lt;br /&gt;
     save_administrator&lt;br /&gt;
+    redirect_to &amp;quot;users#new&amp;quot;&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 2 : Refactoring institution_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Before changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  def index&lt;br /&gt;
    list&lt;br /&gt;
    render :action =&amp;gt; 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
  verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
    :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
&lt;br /&gt;
  def list&lt;br /&gt;
    @institutions = Institution.all&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== After Changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index&lt;br /&gt;
-    list&lt;br /&gt;
+   # @institutions=Institution.All&lt;br /&gt;
+   list&lt;br /&gt;
     render :action =&amp;gt; 'list'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
   verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
     :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
 &lt;br /&gt;
   def list&lt;br /&gt;
-    @institutions = Institution.all&lt;br /&gt;
+    @institutions = Institution.all &lt;br /&gt;
+&lt;br /&gt;
   end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 3 : Refactoring user_controller ==&lt;br /&gt;
&lt;br /&gt;
The user_param() method in user_controller did not have any facility to include the institution of the user. After doing a db migration and creating an institution_id in the user table, an institute can be selected while creating a new user.&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      @user = User.new(user_params)&lt;br /&gt;
      # record the person who created this new user&lt;br /&gt;
      @user.parent_id = (session[:user]).id&lt;br /&gt;
      # set the user's timezone to its parent's&lt;br /&gt;
      @user.timezonepref = User.find(@user.parent_id).timezonepref&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @user = User.new(user_params)&lt;br /&gt;
+      @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
       # record the person who created this new user&lt;br /&gt;
       @user.parent_id = (session[:user]).id&lt;br /&gt;
       # set the user's timezone to its parent's&lt;br /&gt;
      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 4 : Refactoring list_administrators ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
-  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+   &amp;lt;% if user.role_id == 3%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
-        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-&lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
-&amp;lt;% end %&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt; &lt;br /&gt;
+&amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 5 : Refactoring list_instructors.html.erb ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+  &amp;lt;% if user.role_id == 2%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+ &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 6: Refactoring list_super_administrators.html.erb ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+  &amp;lt;input type='submit' value='New Super Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 7: Addition of the institution id in the view===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_institutions&amp;quot;&amp;gt;Institution&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
+    &amp;lt;%= collection_select('users',:institutions_id, Institution.all, :id, :name) %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 8: Adding the institution feature to user view===&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
&amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@@ -1,13 +1,14 @@&lt;br /&gt;
 &amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
   &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
+&amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
 &amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 9:Routes added ===&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
    collection do&lt;br /&gt;
      get :list_super_administrators&lt;br /&gt;
      get :list_administrators&lt;br /&gt;
      get :list_instructors&lt;br /&gt;
      get :new_administrator&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
     collection do&lt;br /&gt;
+      get :create_any_user&lt;br /&gt;
       get :list_super_administrators&lt;br /&gt;
       get :list_administrators&lt;br /&gt;
       get :list_instructors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Steps to verify changes manually==&lt;br /&gt;
In order to inspect the changes made, you can visit our deployed [http://152.46.16.123:3000/admin/list_administrators Expertiza] and use the credentials mentioned at the top of the page.&lt;br /&gt;
&lt;br /&gt;
===Removing the text field from New Administrator===&lt;br /&gt;
[[File:List admin.png]]&lt;br /&gt;
===Administrator as the default role===&lt;br /&gt;
[[File:New admin.png]]&lt;br /&gt;
===Adding Institutions to User creation forms and having student as the default role===&lt;br /&gt;
[[File:Student.png]]&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98465</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98465"/>
		<updated>2015-11-06T21:42:03Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Case 1 : Refactoring admin_controller */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page is about an open source project based on Expertiza OSS. This project aims to refactor Admin Controller and Course Controller. It also aims to refactor other snippets which does not follow the Ruby style guidelines.&lt;br /&gt;
Refactoring&lt;br /&gt;
Refactoring[https://en.wikipedia.org/wiki/Code_refactoring] is a technique to alter the internal structure of the code without affecting the external behaviour. It is used for:&lt;br /&gt;
Programs that are difficult to read;&lt;br /&gt;
Programs that does not follow the language specific guidelines;&lt;br /&gt;
Programs that has high coupling;&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[Expertiza][https://expertiza.ncsu.edu/] is an open source project developed using the Ruby on Rails platform. It provides features like team assignments, peer review, submission of projects, grading etc. The code can be cloned and modified from GitHub. This application provides an efficient way to manage assignments, grades and reviews.&lt;br /&gt;
Assignment.rb is the largest class in Expertiza, comprising 1105 lines of code which contains the assignment model and the related functionalities. It also contains the score module which is refactored to make the file more clean and easy to read.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line @institution = Institution.new(params[:institution]) to @institution = Institution.new(:name =&amp;gt; params[:institution][:name])&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;br /&gt;
===Views===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| views/admin/list_administrators.html.erb&lt;br /&gt;
| Removed the text field next to New Administrator button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:administrator&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_administrators.html.erb &lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_instructors.html.erb &lt;br /&gt;
| Removed the text field next to New Instructor button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:Instructor&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_super_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb &lt;br /&gt;
| Removed the Parent column from line 4 &lt;br /&gt;
| Super admins don't have any parents.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Removed &amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&lt;br /&gt;
| There can be only one super admin.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| show_admin lists out all the administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_super_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| Lists out the super administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_institutions.html.erb &lt;br /&gt;
| Added this file&lt;br /&gt;
| To add institution drop down menu in the new user creation form.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_user.html.erb&lt;br /&gt;
| Added line &amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
| To select the institution.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/list.html.erb&lt;br /&gt;
| Sending role:student as the default role for new user creation form&lt;br /&gt;
| Was throwing an error&lt;br /&gt;
|-&lt;br /&gt;
| views/users/new.html&lt;br /&gt;
| Default role is selected in new user creation form.&lt;br /&gt;
| So that if new administrator is clicked the user creation form will have admin as the pre selected role.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Re-factored Code Cases =&lt;br /&gt;
&lt;br /&gt;
== Case 1 : Refactoring admin_controller ==&lt;br /&gt;
&lt;br /&gt;
The controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. The functionality to view the list of super-admins, admins and the instructors was added. Also changes were made to add_adminstrator method for adding a new administrator in a clean way.&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     def list_instructors&lt;br /&gt;
    @users = User.&lt;br /&gt;
      instructors.&lt;br /&gt;
      order(:name).&lt;br /&gt;
      where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
      paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def add_administrator&lt;br /&gt;
    @user = User.new&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def new_administrator&lt;br /&gt;
    add_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def save_administrator # saves newly created administrator to database&lt;br /&gt;
    PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def create_administrator&lt;br /&gt;
    save_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def show&lt;br /&gt;
+    redirect_to url_for(:controller =&amp;gt; :users, :action =&amp;gt; :new)&lt;br /&gt;
+  end&lt;br /&gt;
 &lt;br /&gt;
   def list_instructors&lt;br /&gt;
     @users = User.&lt;br /&gt;
       instructors.&lt;br /&gt;
       order(:name).&lt;br /&gt;
       where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
       paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def add_administrator&lt;br /&gt;
     @user = User.new&lt;br /&gt;
+    redirect_to 'users#new'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def new_administrator&lt;br /&gt;
     add_administrator&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def save_administrator # saves newly created administrator to database&lt;br /&gt;
     PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def create_administrator&lt;br /&gt;
     save_administrator&lt;br /&gt;
+    redirect_to &amp;quot;users#new&amp;quot;&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 2 : Refactoring institution_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Before changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  def index&lt;br /&gt;
    list&lt;br /&gt;
    render :action =&amp;gt; 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
  verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
    :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
&lt;br /&gt;
  def list&lt;br /&gt;
    @institutions = Institution.all&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== After Changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index&lt;br /&gt;
-    list&lt;br /&gt;
+   # @institutions=Institution.All&lt;br /&gt;
+   list&lt;br /&gt;
     render :action =&amp;gt; 'list'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
   verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
     :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
 &lt;br /&gt;
   def list&lt;br /&gt;
-    @institutions = Institution.all&lt;br /&gt;
+    @institutions = Institution.all &lt;br /&gt;
+&lt;br /&gt;
   end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 3 : Refactoring user_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      @user = User.new(user_params)&lt;br /&gt;
      # record the person who created this new user&lt;br /&gt;
      @user.parent_id = (session[:user]).id&lt;br /&gt;
      # set the user's timezone to its parent's&lt;br /&gt;
      @user.timezonepref = User.find(@user.parent_id).timezonepref&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @user = User.new(user_params)&lt;br /&gt;
+      @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
       # record the person who created this new user&lt;br /&gt;
       @user.parent_id = (session[:user]).id&lt;br /&gt;
       # set the user's timezone to its parent's&lt;br /&gt;
      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Case 4 : Refactoring list_administrators ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
-  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+   &amp;lt;% if user.role_id == 3%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
-        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-&lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
-&amp;lt;% end %&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt; &lt;br /&gt;
+&amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 5 : Refactoring list_instructors.html.erb ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+  &amp;lt;% if user.role_id == 2%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+ &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 6: Refactoring list_super_administrators.html.erb ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+  &amp;lt;input type='submit' value='New Super Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 7: Addition of the institution id in the view===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_institutions&amp;quot;&amp;gt;Institution&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
+    &amp;lt;%= collection_select('users',:institutions_id, Institution.all, :id, :name) %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 8: Adding the institution feature to user view===&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
&amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@@ -1,13 +1,14 @@&lt;br /&gt;
 &amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
   &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
+&amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
 &amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 9:Routes added ===&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
    collection do&lt;br /&gt;
      get :list_super_administrators&lt;br /&gt;
      get :list_administrators&lt;br /&gt;
      get :list_instructors&lt;br /&gt;
      get :new_administrator&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
     collection do&lt;br /&gt;
+      get :create_any_user&lt;br /&gt;
       get :list_super_administrators&lt;br /&gt;
       get :list_administrators&lt;br /&gt;
       get :list_instructors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Steps to verify changes manually==&lt;br /&gt;
In order to inspect the changes made, you can visit our deployed [http://152.46.16.123:3000/admin/list_administrators Expertiza] and use the credentials mentioned at the top of the page.&lt;br /&gt;
&lt;br /&gt;
===Removing the text field from New Administrator===&lt;br /&gt;
[[File:List admin.png]]&lt;br /&gt;
===Administrator as the default role===&lt;br /&gt;
[[File:New admin.png]]&lt;br /&gt;
===Adding Institutions to User creation forms and having student as the default role===&lt;br /&gt;
[[File:Student.png]]&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98031</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98031"/>
		<updated>2015-11-01T03:05:34Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project aimed at refactoring Admin Controller and Course Controller.&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
Expertiza is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line @institution = Institution.new(params[:institution]) to @institution = Institution.new(:name =&amp;gt; params[:institution][:name])&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;br /&gt;
===Views===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| views/admin/list_administrators.html.erb&lt;br /&gt;
| Removed the text field next to New Administrator button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:administrator&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_administrators.html.erb &lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_instructors.html.erb &lt;br /&gt;
| Removed the text field next to New Instructor button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:Instructor&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_super_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb &lt;br /&gt;
| Removed the Parent column from line 4 &lt;br /&gt;
| Super admins don't have any parents.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Removed &amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&lt;br /&gt;
| There can be only one super admin.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| show_admin lists out all the administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_super_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| Lists out the super administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_institutions.html.erb &lt;br /&gt;
| Added this file&lt;br /&gt;
| To add institution drop down menu in the new user creation form.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_user.html.erb&lt;br /&gt;
| Added line &amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
| To select the institution.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/list.html.erb&lt;br /&gt;
| Sending role:student as the default role for new user creation form&lt;br /&gt;
| Was throwing an error&lt;br /&gt;
|-&lt;br /&gt;
| views/users/new.html&lt;br /&gt;
| Default role is selected in new user creation form.&lt;br /&gt;
| So that if new administrator is clicked the user creation form will have admin as the pre selected role.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Re-factored Code Cases =&lt;br /&gt;
&lt;br /&gt;
== Case 1 : Refactoring admin_controller ==&lt;br /&gt;
&lt;br /&gt;
The consistency of these two methods shows plenty of repetitive code. In order to effectively refactor these methods and reuse the code they both need, our team merged the two methods together by enabling add_this_bookmark method to handle creation of a bookmark when a topic id is provided (main functionality of add_topic_bookmark method). Once we implemented this change on add_this_bookmark method, we deleted add_topic_bookmark method as it became obsolete. Therefore, we retained the same functionality while reducing the method by 7 repetitive lines of code. &lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     def list_instructors&lt;br /&gt;
    @users = User.&lt;br /&gt;
      instructors.&lt;br /&gt;
      order(:name).&lt;br /&gt;
      where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
      paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def add_administrator&lt;br /&gt;
    @user = User.new&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def new_administrator&lt;br /&gt;
    add_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def save_administrator # saves newly created administrator to database&lt;br /&gt;
    PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def create_administrator&lt;br /&gt;
    save_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def show&lt;br /&gt;
+    redirect_to url_for(:controller =&amp;gt; :users, :action =&amp;gt; :new)&lt;br /&gt;
+  end&lt;br /&gt;
 &lt;br /&gt;
   def list_instructors&lt;br /&gt;
     @users = User.&lt;br /&gt;
       instructors.&lt;br /&gt;
       order(:name).&lt;br /&gt;
       where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
       paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def add_administrator&lt;br /&gt;
     @user = User.new&lt;br /&gt;
+    redirect_to 'users#new'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def new_administrator&lt;br /&gt;
     add_administrator&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def save_administrator # saves newly created administrator to database&lt;br /&gt;
     PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def create_administrator&lt;br /&gt;
     save_administrator&lt;br /&gt;
+    redirect_to &amp;quot;users#new&amp;quot;&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 2 : Refactoring institution_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Before changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  def index&lt;br /&gt;
    list&lt;br /&gt;
    render :action =&amp;gt; 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
  verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
    :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
&lt;br /&gt;
  def list&lt;br /&gt;
    @institutions = Institution.all&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== After Changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index&lt;br /&gt;
-    list&lt;br /&gt;
+   # @institutions=Institution.All&lt;br /&gt;
+   list&lt;br /&gt;
     render :action =&amp;gt; 'list'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
   verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
     :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
 &lt;br /&gt;
   def list&lt;br /&gt;
-    @institutions = Institution.all&lt;br /&gt;
+    @institutions = Institution.all &lt;br /&gt;
+&lt;br /&gt;
   end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 3 : Refactoring user_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      @user = User.new(user_params)&lt;br /&gt;
      # record the person who created this new user&lt;br /&gt;
      @user.parent_id = (session[:user]).id&lt;br /&gt;
      # set the user's timezone to its parent's&lt;br /&gt;
      @user.timezonepref = User.find(@user.parent_id).timezonepref&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @user = User.new(user_params)&lt;br /&gt;
+      @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
       # record the person who created this new user&lt;br /&gt;
       @user.parent_id = (session[:user]).id&lt;br /&gt;
       # set the user's timezone to its parent's&lt;br /&gt;
      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Case 4 : Refactoring list_administrators ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
-  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+   &amp;lt;% if user.role_id == 3%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
-        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-&lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
-&amp;lt;% end %&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt; &lt;br /&gt;
+&amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 5 : Refactoring list_instructors.html.erb ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+  &amp;lt;% if user.role_id == 2%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+ &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 6: Refactoring list_super_administrators.html.erb ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+  &amp;lt;input type='submit' value='New Super Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 7: Addition of the institution id in the view===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_institutions&amp;quot;&amp;gt;Institution&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
+    &amp;lt;%= collection_select('users',:institutions_id, Institution.all, :id, :name) %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 8: Adding the institution feature to user view===&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
&amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@@ -1,13 +1,14 @@&lt;br /&gt;
 &amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
   &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
+&amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
 &amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 9:Routes added ===&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
    collection do&lt;br /&gt;
      get :list_super_administrators&lt;br /&gt;
      get :list_administrators&lt;br /&gt;
      get :list_instructors&lt;br /&gt;
      get :new_administrator&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
     collection do&lt;br /&gt;
+      get :create_any_user&lt;br /&gt;
       get :list_super_administrators&lt;br /&gt;
       get :list_administrators&lt;br /&gt;
       get :list_instructors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Steps to verify changes manually==&lt;br /&gt;
In order to inspect the changes made, you can visit our deployed [http://152.46.16.123:3000/admin/list_administrators Expertiza] and use the credentials mentioned at the top of the page.&lt;br /&gt;
&lt;br /&gt;
===Removing the text field from New Administrator===&lt;br /&gt;
[[File:List admin.png]]&lt;br /&gt;
===Administrator as the default role===&lt;br /&gt;
[[File:New admin.png]]&lt;br /&gt;
===Adding Institutions to User creation forms and having student as the default role===&lt;br /&gt;
[[File:Student.png]]&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98030</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98030"/>
		<updated>2015-11-01T03:05:20Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Steps to verify changes manually */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project aimed at refactoring Admin Controller and Course Controller.&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
Expertiza is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line @institution = Institution.new(params[:institution]) to @institution = Institution.new(:name =&amp;gt; params[:institution][:name])&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;br /&gt;
===Views===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| views/admin/list_administrators.html.erb&lt;br /&gt;
| Removed the text field next to New Administrator button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:administrator&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_administrators.html.erb &lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_instructors.html.erb &lt;br /&gt;
| Removed the text field next to New Instructor button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:Instructor&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_super_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb &lt;br /&gt;
| Removed the Parent column from line 4 &lt;br /&gt;
| Super admins don't have any parents.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Removed &amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&lt;br /&gt;
| There can be only one super admin.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| show_admin lists out all the administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_super_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| Lists out the super administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_institutions.html.erb &lt;br /&gt;
| Added this file&lt;br /&gt;
| To add institution drop down menu in the new user creation form.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_user.html.erb&lt;br /&gt;
| Added line &amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
| To select the institution.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/list.html.erb&lt;br /&gt;
| Sending role:student as the default role for new user creation form&lt;br /&gt;
| Was throwing an error&lt;br /&gt;
|-&lt;br /&gt;
| views/users/new.html&lt;br /&gt;
| Default role is selected in new user creation form.&lt;br /&gt;
| So that if new administrator is clicked the user creation form will have admin as the pre selected role.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Re-factored Code Cases =&lt;br /&gt;
&lt;br /&gt;
== Case 1 : Refactoring admin_controller ==&lt;br /&gt;
&lt;br /&gt;
The consistency of these two methods shows plenty of repetitive code. In order to effectively refactor these methods and reuse the code they both need, our team merged the two methods together by enabling add_this_bookmark method to handle creation of a bookmark when a topic id is provided (main functionality of add_topic_bookmark method). Once we implemented this change on add_this_bookmark method, we deleted add_topic_bookmark method as it became obsolete. Therefore, we retained the same functionality while reducing the method by 7 repetitive lines of code. &lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     def list_instructors&lt;br /&gt;
    @users = User.&lt;br /&gt;
      instructors.&lt;br /&gt;
      order(:name).&lt;br /&gt;
      where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
      paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def add_administrator&lt;br /&gt;
    @user = User.new&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def new_administrator&lt;br /&gt;
    add_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def save_administrator # saves newly created administrator to database&lt;br /&gt;
    PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def create_administrator&lt;br /&gt;
    save_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def show&lt;br /&gt;
+    redirect_to url_for(:controller =&amp;gt; :users, :action =&amp;gt; :new)&lt;br /&gt;
+  end&lt;br /&gt;
 &lt;br /&gt;
   def list_instructors&lt;br /&gt;
     @users = User.&lt;br /&gt;
       instructors.&lt;br /&gt;
       order(:name).&lt;br /&gt;
       where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
       paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def add_administrator&lt;br /&gt;
     @user = User.new&lt;br /&gt;
+    redirect_to 'users#new'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def new_administrator&lt;br /&gt;
     add_administrator&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def save_administrator # saves newly created administrator to database&lt;br /&gt;
     PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def create_administrator&lt;br /&gt;
     save_administrator&lt;br /&gt;
+    redirect_to &amp;quot;users#new&amp;quot;&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 2 : Refactoring institution_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Before changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  def index&lt;br /&gt;
    list&lt;br /&gt;
    render :action =&amp;gt; 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
  verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
    :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
&lt;br /&gt;
  def list&lt;br /&gt;
    @institutions = Institution.all&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== After Changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index&lt;br /&gt;
-    list&lt;br /&gt;
+   # @institutions=Institution.All&lt;br /&gt;
+   list&lt;br /&gt;
     render :action =&amp;gt; 'list'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
   verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
     :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
 &lt;br /&gt;
   def list&lt;br /&gt;
-    @institutions = Institution.all&lt;br /&gt;
+    @institutions = Institution.all &lt;br /&gt;
+&lt;br /&gt;
   end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 3 : Refactoring user_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      @user = User.new(user_params)&lt;br /&gt;
      # record the person who created this new user&lt;br /&gt;
      @user.parent_id = (session[:user]).id&lt;br /&gt;
      # set the user's timezone to its parent's&lt;br /&gt;
      @user.timezonepref = User.find(@user.parent_id).timezonepref&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @user = User.new(user_params)&lt;br /&gt;
+      @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
       # record the person who created this new user&lt;br /&gt;
       @user.parent_id = (session[:user]).id&lt;br /&gt;
       # set the user's timezone to its parent's&lt;br /&gt;
      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Case 4 : Refactoring list_administrators ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
-  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+   &amp;lt;% if user.role_id == 3%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
-        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-&lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
-&amp;lt;% end %&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt; &lt;br /&gt;
+&amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 5 : Refactoring list_instructors.html.erb ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+  &amp;lt;% if user.role_id == 2%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+ &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 6: Refactoring list_super_administrators.html.erb ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+  &amp;lt;input type='submit' value='New Super Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 7: Addition of the institution id in the view===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_institutions&amp;quot;&amp;gt;Institution&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
+    &amp;lt;%= collection_select('users',:institutions_id, Institution.all, :id, :name) %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 8: Adding the institution feature to user view===&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
&amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@@ -1,13 +1,14 @@&lt;br /&gt;
 &amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
   &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
+&amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
 &amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 9:Routes added ===&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
    collection do&lt;br /&gt;
      get :list_super_administrators&lt;br /&gt;
      get :list_administrators&lt;br /&gt;
      get :list_instructors&lt;br /&gt;
      get :new_administrator&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
     collection do&lt;br /&gt;
+      get :create_any_user&lt;br /&gt;
       get :list_super_administrators&lt;br /&gt;
       get :list_administrators&lt;br /&gt;
       get :list_instructors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Steps to verify changes manually==&lt;br /&gt;
In order to inspect the changes made, you can visit our deployed [http://152.46.16.123:3000/admin/list_administrators Expertiza] and use the credentials mentioned at the top of the page.&lt;br /&gt;
&lt;br /&gt;
===Removing the text field from New Administrator===&lt;br /&gt;
[[File:List admin.png]]&lt;br /&gt;
===Administrator as the default role===&lt;br /&gt;
[[File:New admin.png]]&lt;br /&gt;
===Adding Institutions to User creation forms and having student as the default role===&lt;br /&gt;
[[File:Student.png]]&lt;br /&gt;
===&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Student.png&amp;diff=98028</id>
		<title>File:Student.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Student.png&amp;diff=98028"/>
		<updated>2015-11-01T03:02:01Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: uploaded a new version of &amp;amp;quot;File:Student.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Student.png&amp;diff=98027</id>
		<title>File:Student.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Student.png&amp;diff=98027"/>
		<updated>2015-11-01T03:00:34Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98025</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98025"/>
		<updated>2015-11-01T02:54:24Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Administrator as the default role */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project aimed at refactoring Admin Controller and Course Controller.&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
Expertiza is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line @institution = Institution.new(params[:institution]) to @institution = Institution.new(:name =&amp;gt; params[:institution][:name])&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;br /&gt;
===Views===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| views/admin/list_administrators.html.erb&lt;br /&gt;
| Removed the text field next to New Administrator button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:administrator&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_administrators.html.erb &lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_instructors.html.erb &lt;br /&gt;
| Removed the text field next to New Instructor button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:Instructor&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_super_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb &lt;br /&gt;
| Removed the Parent column from line 4 &lt;br /&gt;
| Super admins don't have any parents.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Removed &amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&lt;br /&gt;
| There can be only one super admin.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| show_admin lists out all the administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_super_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| Lists out the super administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_institutions.html.erb &lt;br /&gt;
| Added this file&lt;br /&gt;
| To add institution drop down menu in the new user creation form.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_user.html.erb&lt;br /&gt;
| Added line &amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
| To select the institution.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/list.html.erb&lt;br /&gt;
| Sending role:student as the default role for new user creation form&lt;br /&gt;
| Was throwing an error&lt;br /&gt;
|-&lt;br /&gt;
| views/users/new.html&lt;br /&gt;
| Default role is selected in new user creation form.&lt;br /&gt;
| So that if new administrator is clicked the user creation form will have admin as the pre selected role.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Re-factored Code Cases =&lt;br /&gt;
&lt;br /&gt;
== Case 1 : Refactoring admin_controller ==&lt;br /&gt;
&lt;br /&gt;
The consistency of these two methods shows plenty of repetitive code. In order to effectively refactor these methods and reuse the code they both need, our team merged the two methods together by enabling add_this_bookmark method to handle creation of a bookmark when a topic id is provided (main functionality of add_topic_bookmark method). Once we implemented this change on add_this_bookmark method, we deleted add_topic_bookmark method as it became obsolete. Therefore, we retained the same functionality while reducing the method by 7 repetitive lines of code. &lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     def list_instructors&lt;br /&gt;
    @users = User.&lt;br /&gt;
      instructors.&lt;br /&gt;
      order(:name).&lt;br /&gt;
      where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
      paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def add_administrator&lt;br /&gt;
    @user = User.new&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def new_administrator&lt;br /&gt;
    add_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def save_administrator # saves newly created administrator to database&lt;br /&gt;
    PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def create_administrator&lt;br /&gt;
    save_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def show&lt;br /&gt;
+    redirect_to url_for(:controller =&amp;gt; :users, :action =&amp;gt; :new)&lt;br /&gt;
+  end&lt;br /&gt;
 &lt;br /&gt;
   def list_instructors&lt;br /&gt;
     @users = User.&lt;br /&gt;
       instructors.&lt;br /&gt;
       order(:name).&lt;br /&gt;
       where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
       paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def add_administrator&lt;br /&gt;
     @user = User.new&lt;br /&gt;
+    redirect_to 'users#new'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def new_administrator&lt;br /&gt;
     add_administrator&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def save_administrator # saves newly created administrator to database&lt;br /&gt;
     PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def create_administrator&lt;br /&gt;
     save_administrator&lt;br /&gt;
+    redirect_to &amp;quot;users#new&amp;quot;&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 2 : Refactoring institution_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Before changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  def index&lt;br /&gt;
    list&lt;br /&gt;
    render :action =&amp;gt; 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
  verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
    :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
&lt;br /&gt;
  def list&lt;br /&gt;
    @institutions = Institution.all&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== After Changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index&lt;br /&gt;
-    list&lt;br /&gt;
+   # @institutions=Institution.All&lt;br /&gt;
+   list&lt;br /&gt;
     render :action =&amp;gt; 'list'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
   verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
     :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
 &lt;br /&gt;
   def list&lt;br /&gt;
-    @institutions = Institution.all&lt;br /&gt;
+    @institutions = Institution.all &lt;br /&gt;
+&lt;br /&gt;
   end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 3 : Refactoring user_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      @user = User.new(user_params)&lt;br /&gt;
      # record the person who created this new user&lt;br /&gt;
      @user.parent_id = (session[:user]).id&lt;br /&gt;
      # set the user's timezone to its parent's&lt;br /&gt;
      @user.timezonepref = User.find(@user.parent_id).timezonepref&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @user = User.new(user_params)&lt;br /&gt;
+      @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
       # record the person who created this new user&lt;br /&gt;
       @user.parent_id = (session[:user]).id&lt;br /&gt;
       # set the user's timezone to its parent's&lt;br /&gt;
      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Case 4 : Refactoring list_administrators ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
-  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+   &amp;lt;% if user.role_id == 3%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
-        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-&lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
-&amp;lt;% end %&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt; &lt;br /&gt;
+&amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 5 : Refactoring list_instructors.html.erb ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+  &amp;lt;% if user.role_id == 2%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+ &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 6: Refactoring list_super_administrators.html.erb ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+  &amp;lt;input type='submit' value='New Super Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 7: Addition of the institution id in the view===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_institutions&amp;quot;&amp;gt;Institution&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
+    &amp;lt;%= collection_select('users',:institutions_id, Institution.all, :id, :name) %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 8: Adding the institution feature to user view===&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
&amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@@ -1,13 +1,14 @@&lt;br /&gt;
 &amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
   &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
+&amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
 &amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 9:Routes added ===&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
    collection do&lt;br /&gt;
      get :list_super_administrators&lt;br /&gt;
      get :list_administrators&lt;br /&gt;
      get :list_instructors&lt;br /&gt;
      get :new_administrator&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
     collection do&lt;br /&gt;
+      get :create_any_user&lt;br /&gt;
       get :list_super_administrators&lt;br /&gt;
       get :list_administrators&lt;br /&gt;
       get :list_instructors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Steps to verify changes manually==&lt;br /&gt;
In order to inspect the changes made, you can visit our deployed [http://152.46.16.123:3000/admin/list_administrators Expertiza] and use the credentials mentioned at the top of the page.&lt;br /&gt;
&lt;br /&gt;
===Removing the text field from New Administrator===&lt;br /&gt;
&amp;lt;p&amp;gt;'''Visit the url [http://152.46.16.123:3000/admin/list_administrators http://152.46.16.123:3000/admin/list_administrators]'''&amp;lt;/p&amp;gt;&lt;br /&gt;
[[File:List admin.png]]&lt;br /&gt;
===Administrator as the default role===&lt;br /&gt;
&amp;lt;p&amp;gt;'''Visit the url [http://152.46.16.123:3000/users/new?utf8=%E2%9C%93&amp;amp;role=Administrator&amp;amp;commit=New+Administrator]'''&amp;lt;/p&amp;gt;&lt;br /&gt;
[[File:New admin.png]]&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98024</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98024"/>
		<updated>2015-11-01T02:54:09Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Removing the text field from New Administrator */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project aimed at refactoring Admin Controller and Course Controller.&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
Expertiza is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line @institution = Institution.new(params[:institution]) to @institution = Institution.new(:name =&amp;gt; params[:institution][:name])&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;br /&gt;
===Views===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| views/admin/list_administrators.html.erb&lt;br /&gt;
| Removed the text field next to New Administrator button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:administrator&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_administrators.html.erb &lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_instructors.html.erb &lt;br /&gt;
| Removed the text field next to New Instructor button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:Instructor&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_super_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb &lt;br /&gt;
| Removed the Parent column from line 4 &lt;br /&gt;
| Super admins don't have any parents.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Removed &amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&lt;br /&gt;
| There can be only one super admin.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| show_admin lists out all the administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_super_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| Lists out the super administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_institutions.html.erb &lt;br /&gt;
| Added this file&lt;br /&gt;
| To add institution drop down menu in the new user creation form.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_user.html.erb&lt;br /&gt;
| Added line &amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
| To select the institution.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/list.html.erb&lt;br /&gt;
| Sending role:student as the default role for new user creation form&lt;br /&gt;
| Was throwing an error&lt;br /&gt;
|-&lt;br /&gt;
| views/users/new.html&lt;br /&gt;
| Default role is selected in new user creation form.&lt;br /&gt;
| So that if new administrator is clicked the user creation form will have admin as the pre selected role.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Re-factored Code Cases =&lt;br /&gt;
&lt;br /&gt;
== Case 1 : Refactoring admin_controller ==&lt;br /&gt;
&lt;br /&gt;
The consistency of these two methods shows plenty of repetitive code. In order to effectively refactor these methods and reuse the code they both need, our team merged the two methods together by enabling add_this_bookmark method to handle creation of a bookmark when a topic id is provided (main functionality of add_topic_bookmark method). Once we implemented this change on add_this_bookmark method, we deleted add_topic_bookmark method as it became obsolete. Therefore, we retained the same functionality while reducing the method by 7 repetitive lines of code. &lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     def list_instructors&lt;br /&gt;
    @users = User.&lt;br /&gt;
      instructors.&lt;br /&gt;
      order(:name).&lt;br /&gt;
      where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
      paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def add_administrator&lt;br /&gt;
    @user = User.new&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def new_administrator&lt;br /&gt;
    add_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def save_administrator # saves newly created administrator to database&lt;br /&gt;
    PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def create_administrator&lt;br /&gt;
    save_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def show&lt;br /&gt;
+    redirect_to url_for(:controller =&amp;gt; :users, :action =&amp;gt; :new)&lt;br /&gt;
+  end&lt;br /&gt;
 &lt;br /&gt;
   def list_instructors&lt;br /&gt;
     @users = User.&lt;br /&gt;
       instructors.&lt;br /&gt;
       order(:name).&lt;br /&gt;
       where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
       paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def add_administrator&lt;br /&gt;
     @user = User.new&lt;br /&gt;
+    redirect_to 'users#new'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def new_administrator&lt;br /&gt;
     add_administrator&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def save_administrator # saves newly created administrator to database&lt;br /&gt;
     PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def create_administrator&lt;br /&gt;
     save_administrator&lt;br /&gt;
+    redirect_to &amp;quot;users#new&amp;quot;&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 2 : Refactoring institution_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Before changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  def index&lt;br /&gt;
    list&lt;br /&gt;
    render :action =&amp;gt; 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
  verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
    :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
&lt;br /&gt;
  def list&lt;br /&gt;
    @institutions = Institution.all&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== After Changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index&lt;br /&gt;
-    list&lt;br /&gt;
+   # @institutions=Institution.All&lt;br /&gt;
+   list&lt;br /&gt;
     render :action =&amp;gt; 'list'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
   verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
     :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
 &lt;br /&gt;
   def list&lt;br /&gt;
-    @institutions = Institution.all&lt;br /&gt;
+    @institutions = Institution.all &lt;br /&gt;
+&lt;br /&gt;
   end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 3 : Refactoring user_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      @user = User.new(user_params)&lt;br /&gt;
      # record the person who created this new user&lt;br /&gt;
      @user.parent_id = (session[:user]).id&lt;br /&gt;
      # set the user's timezone to its parent's&lt;br /&gt;
      @user.timezonepref = User.find(@user.parent_id).timezonepref&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @user = User.new(user_params)&lt;br /&gt;
+      @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
       # record the person who created this new user&lt;br /&gt;
       @user.parent_id = (session[:user]).id&lt;br /&gt;
       # set the user's timezone to its parent's&lt;br /&gt;
      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Case 4 : Refactoring list_administrators ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
-  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+   &amp;lt;% if user.role_id == 3%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
-        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-&lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
-&amp;lt;% end %&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt; &lt;br /&gt;
+&amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 5 : Refactoring list_instructors.html.erb ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+  &amp;lt;% if user.role_id == 2%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+ &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 6: Refactoring list_super_administrators.html.erb ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+  &amp;lt;input type='submit' value='New Super Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 7: Addition of the institution id in the view===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_institutions&amp;quot;&amp;gt;Institution&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
+    &amp;lt;%= collection_select('users',:institutions_id, Institution.all, :id, :name) %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 8: Adding the institution feature to user view===&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
&amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@@ -1,13 +1,14 @@&lt;br /&gt;
 &amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
   &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
+&amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
 &amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 9:Routes added ===&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
    collection do&lt;br /&gt;
      get :list_super_administrators&lt;br /&gt;
      get :list_administrators&lt;br /&gt;
      get :list_instructors&lt;br /&gt;
      get :new_administrator&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
     collection do&lt;br /&gt;
+      get :create_any_user&lt;br /&gt;
       get :list_super_administrators&lt;br /&gt;
       get :list_administrators&lt;br /&gt;
       get :list_instructors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Steps to verify changes manually==&lt;br /&gt;
In order to inspect the changes made, you can visit our deployed [http://152.46.16.123:3000/admin/list_administrators Expertiza] and use the credentials mentioned at the top of the page.&lt;br /&gt;
&lt;br /&gt;
===Removing the text field from New Administrator===&lt;br /&gt;
&amp;lt;p&amp;gt;'''Visit the url [http://152.46.16.123:3000/admin/list_administrators http://152.46.16.123:3000/admin/list_administrators]'''&amp;lt;/p&amp;gt;&lt;br /&gt;
[[File:List admin.png]]&lt;br /&gt;
===Administrator as the default role===&lt;br /&gt;
&amp;lt;p&amp;gt;'''Visit the url [http://152.46.16.123:3000/users/new?utf8=%E2%9C%93&amp;amp;role=Administrator&amp;amp;commit=New+Administrator]'''&amp;lt;/p&amp;gt;&lt;br /&gt;
[[File:List admin.png]]&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:New_admin.png&amp;diff=98023</id>
		<title>File:New admin.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:New_admin.png&amp;diff=98023"/>
		<updated>2015-11-01T02:53:39Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:List_admin.png&amp;diff=98022</id>
		<title>File:List admin.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:List_admin.png&amp;diff=98022"/>
		<updated>2015-11-01T02:47:56Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: uploaded a new version of &amp;amp;quot;File:List admin.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:List_admin.png&amp;diff=98020</id>
		<title>File:List admin.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:List_admin.png&amp;diff=98020"/>
		<updated>2015-11-01T02:47:15Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: uploaded a new version of &amp;amp;quot;File:List admin.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98019</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98019"/>
		<updated>2015-11-01T02:46:43Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Removing the text field from New Administrator */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project aimed at refactoring Admin Controller and Course Controller.&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
Expertiza is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line @institution = Institution.new(params[:institution]) to @institution = Institution.new(:name =&amp;gt; params[:institution][:name])&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;br /&gt;
===Views===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| views/admin/list_administrators.html.erb&lt;br /&gt;
| Removed the text field next to New Administrator button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:administrator&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_administrators.html.erb &lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_instructors.html.erb &lt;br /&gt;
| Removed the text field next to New Instructor button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:Instructor&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_super_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb &lt;br /&gt;
| Removed the Parent column from line 4 &lt;br /&gt;
| Super admins don't have any parents.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Removed &amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&lt;br /&gt;
| There can be only one super admin.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| show_admin lists out all the administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_super_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| Lists out the super administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_institutions.html.erb &lt;br /&gt;
| Added this file&lt;br /&gt;
| To add institution drop down menu in the new user creation form.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_user.html.erb&lt;br /&gt;
| Added line &amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
| To select the institution.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/list.html.erb&lt;br /&gt;
| Sending role:student as the default role for new user creation form&lt;br /&gt;
| Was throwing an error&lt;br /&gt;
|-&lt;br /&gt;
| views/users/new.html&lt;br /&gt;
| Default role is selected in new user creation form.&lt;br /&gt;
| So that if new administrator is clicked the user creation form will have admin as the pre selected role.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Re-factored Code Cases =&lt;br /&gt;
&lt;br /&gt;
== Case 1 : Refactoring admin_controller ==&lt;br /&gt;
&lt;br /&gt;
The consistency of these two methods shows plenty of repetitive code. In order to effectively refactor these methods and reuse the code they both need, our team merged the two methods together by enabling add_this_bookmark method to handle creation of a bookmark when a topic id is provided (main functionality of add_topic_bookmark method). Once we implemented this change on add_this_bookmark method, we deleted add_topic_bookmark method as it became obsolete. Therefore, we retained the same functionality while reducing the method by 7 repetitive lines of code. &lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     def list_instructors&lt;br /&gt;
    @users = User.&lt;br /&gt;
      instructors.&lt;br /&gt;
      order(:name).&lt;br /&gt;
      where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
      paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def add_administrator&lt;br /&gt;
    @user = User.new&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def new_administrator&lt;br /&gt;
    add_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def save_administrator # saves newly created administrator to database&lt;br /&gt;
    PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def create_administrator&lt;br /&gt;
    save_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def show&lt;br /&gt;
+    redirect_to url_for(:controller =&amp;gt; :users, :action =&amp;gt; :new)&lt;br /&gt;
+  end&lt;br /&gt;
 &lt;br /&gt;
   def list_instructors&lt;br /&gt;
     @users = User.&lt;br /&gt;
       instructors.&lt;br /&gt;
       order(:name).&lt;br /&gt;
       where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
       paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def add_administrator&lt;br /&gt;
     @user = User.new&lt;br /&gt;
+    redirect_to 'users#new'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def new_administrator&lt;br /&gt;
     add_administrator&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def save_administrator # saves newly created administrator to database&lt;br /&gt;
     PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def create_administrator&lt;br /&gt;
     save_administrator&lt;br /&gt;
+    redirect_to &amp;quot;users#new&amp;quot;&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 2 : Refactoring institution_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Before changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  def index&lt;br /&gt;
    list&lt;br /&gt;
    render :action =&amp;gt; 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
  verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
    :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
&lt;br /&gt;
  def list&lt;br /&gt;
    @institutions = Institution.all&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== After Changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index&lt;br /&gt;
-    list&lt;br /&gt;
+   # @institutions=Institution.All&lt;br /&gt;
+   list&lt;br /&gt;
     render :action =&amp;gt; 'list'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
   verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
     :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
 &lt;br /&gt;
   def list&lt;br /&gt;
-    @institutions = Institution.all&lt;br /&gt;
+    @institutions = Institution.all &lt;br /&gt;
+&lt;br /&gt;
   end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 3 : Refactoring user_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      @user = User.new(user_params)&lt;br /&gt;
      # record the person who created this new user&lt;br /&gt;
      @user.parent_id = (session[:user]).id&lt;br /&gt;
      # set the user's timezone to its parent's&lt;br /&gt;
      @user.timezonepref = User.find(@user.parent_id).timezonepref&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @user = User.new(user_params)&lt;br /&gt;
+      @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
       # record the person who created this new user&lt;br /&gt;
       @user.parent_id = (session[:user]).id&lt;br /&gt;
       # set the user's timezone to its parent's&lt;br /&gt;
      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Case 4 : Refactoring list_administrators ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
-  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+   &amp;lt;% if user.role_id == 3%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
-        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-&lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
-&amp;lt;% end %&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt; &lt;br /&gt;
+&amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 5 : Refactoring list_instructors.html.erb ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+  &amp;lt;% if user.role_id == 2%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+ &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 6: Refactoring list_super_administrators.html.erb ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+  &amp;lt;input type='submit' value='New Super Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 7: Addition of the institution id in the view===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_institutions&amp;quot;&amp;gt;Institution&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
+    &amp;lt;%= collection_select('users',:institutions_id, Institution.all, :id, :name) %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 8: Adding the institution feature to user view===&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
&amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@@ -1,13 +1,14 @@&lt;br /&gt;
 &amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
   &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
+&amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
 &amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 9:Routes added ===&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
    collection do&lt;br /&gt;
      get :list_super_administrators&lt;br /&gt;
      get :list_administrators&lt;br /&gt;
      get :list_instructors&lt;br /&gt;
      get :new_administrator&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
     collection do&lt;br /&gt;
+      get :create_any_user&lt;br /&gt;
       get :list_super_administrators&lt;br /&gt;
       get :list_administrators&lt;br /&gt;
       get :list_instructors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Steps to verify changes manually==&lt;br /&gt;
In order to inspect the changes made, you can visit our deployed [http://152.46.16.123:3000/admin/list_administrators Expertiza] and use the credentials mentioned at the top of the page.&lt;br /&gt;
&lt;br /&gt;
==='''Removing the text field from New Administrator'''===&lt;br /&gt;
&amp;lt;p&amp;gt;'''Visit the url [http://152.46.16.123:3000/admin/list_administrators http://152.46.16.123:3000/admin/list_administrators]'''&amp;lt;/p&amp;gt;&lt;br /&gt;
[[File:List admin.png]]&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98018</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98018"/>
		<updated>2015-11-01T02:46:19Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Removing the text field from New Administrator */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project aimed at refactoring Admin Controller and Course Controller.&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
Expertiza is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line @institution = Institution.new(params[:institution]) to @institution = Institution.new(:name =&amp;gt; params[:institution][:name])&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;br /&gt;
===Views===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| views/admin/list_administrators.html.erb&lt;br /&gt;
| Removed the text field next to New Administrator button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:administrator&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_administrators.html.erb &lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_instructors.html.erb &lt;br /&gt;
| Removed the text field next to New Instructor button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:Instructor&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_super_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb &lt;br /&gt;
| Removed the Parent column from line 4 &lt;br /&gt;
| Super admins don't have any parents.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Removed &amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&lt;br /&gt;
| There can be only one super admin.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| show_admin lists out all the administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_super_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| Lists out the super administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_institutions.html.erb &lt;br /&gt;
| Added this file&lt;br /&gt;
| To add institution drop down menu in the new user creation form.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_user.html.erb&lt;br /&gt;
| Added line &amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
| To select the institution.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/list.html.erb&lt;br /&gt;
| Sending role:student as the default role for new user creation form&lt;br /&gt;
| Was throwing an error&lt;br /&gt;
|-&lt;br /&gt;
| views/users/new.html&lt;br /&gt;
| Default role is selected in new user creation form.&lt;br /&gt;
| So that if new administrator is clicked the user creation form will have admin as the pre selected role.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Re-factored Code Cases =&lt;br /&gt;
&lt;br /&gt;
== Case 1 : Refactoring admin_controller ==&lt;br /&gt;
&lt;br /&gt;
The consistency of these two methods shows plenty of repetitive code. In order to effectively refactor these methods and reuse the code they both need, our team merged the two methods together by enabling add_this_bookmark method to handle creation of a bookmark when a topic id is provided (main functionality of add_topic_bookmark method). Once we implemented this change on add_this_bookmark method, we deleted add_topic_bookmark method as it became obsolete. Therefore, we retained the same functionality while reducing the method by 7 repetitive lines of code. &lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     def list_instructors&lt;br /&gt;
    @users = User.&lt;br /&gt;
      instructors.&lt;br /&gt;
      order(:name).&lt;br /&gt;
      where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
      paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def add_administrator&lt;br /&gt;
    @user = User.new&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def new_administrator&lt;br /&gt;
    add_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def save_administrator # saves newly created administrator to database&lt;br /&gt;
    PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def create_administrator&lt;br /&gt;
    save_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def show&lt;br /&gt;
+    redirect_to url_for(:controller =&amp;gt; :users, :action =&amp;gt; :new)&lt;br /&gt;
+  end&lt;br /&gt;
 &lt;br /&gt;
   def list_instructors&lt;br /&gt;
     @users = User.&lt;br /&gt;
       instructors.&lt;br /&gt;
       order(:name).&lt;br /&gt;
       where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
       paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def add_administrator&lt;br /&gt;
     @user = User.new&lt;br /&gt;
+    redirect_to 'users#new'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def new_administrator&lt;br /&gt;
     add_administrator&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def save_administrator # saves newly created administrator to database&lt;br /&gt;
     PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def create_administrator&lt;br /&gt;
     save_administrator&lt;br /&gt;
+    redirect_to &amp;quot;users#new&amp;quot;&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 2 : Refactoring institution_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Before changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  def index&lt;br /&gt;
    list&lt;br /&gt;
    render :action =&amp;gt; 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
  verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
    :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
&lt;br /&gt;
  def list&lt;br /&gt;
    @institutions = Institution.all&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== After Changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index&lt;br /&gt;
-    list&lt;br /&gt;
+   # @institutions=Institution.All&lt;br /&gt;
+   list&lt;br /&gt;
     render :action =&amp;gt; 'list'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
   verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
     :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
 &lt;br /&gt;
   def list&lt;br /&gt;
-    @institutions = Institution.all&lt;br /&gt;
+    @institutions = Institution.all &lt;br /&gt;
+&lt;br /&gt;
   end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 3 : Refactoring user_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      @user = User.new(user_params)&lt;br /&gt;
      # record the person who created this new user&lt;br /&gt;
      @user.parent_id = (session[:user]).id&lt;br /&gt;
      # set the user's timezone to its parent's&lt;br /&gt;
      @user.timezonepref = User.find(@user.parent_id).timezonepref&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @user = User.new(user_params)&lt;br /&gt;
+      @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
       # record the person who created this new user&lt;br /&gt;
       @user.parent_id = (session[:user]).id&lt;br /&gt;
       # set the user's timezone to its parent's&lt;br /&gt;
      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Case 4 : Refactoring list_administrators ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
-  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+   &amp;lt;% if user.role_id == 3%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
-        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-&lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
-&amp;lt;% end %&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt; &lt;br /&gt;
+&amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 5 : Refactoring list_instructors.html.erb ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+  &amp;lt;% if user.role_id == 2%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+ &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 6: Refactoring list_super_administrators.html.erb ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+  &amp;lt;input type='submit' value='New Super Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 7: Addition of the institution id in the view===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_institutions&amp;quot;&amp;gt;Institution&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
+    &amp;lt;%= collection_select('users',:institutions_id, Institution.all, :id, :name) %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 8: Adding the institution feature to user view===&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
&amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@@ -1,13 +1,14 @@&lt;br /&gt;
 &amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
   &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
+&amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
 &amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 9:Routes added ===&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
    collection do&lt;br /&gt;
      get :list_super_administrators&lt;br /&gt;
      get :list_administrators&lt;br /&gt;
      get :list_instructors&lt;br /&gt;
      get :new_administrator&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
     collection do&lt;br /&gt;
+      get :create_any_user&lt;br /&gt;
       get :list_super_administrators&lt;br /&gt;
       get :list_administrators&lt;br /&gt;
       get :list_instructors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Steps to verify changes manually==&lt;br /&gt;
In order to inspect the changes made, you can visit our deployed [http://152.46.16.123:3000/admin/list_administrators Expertiza] and use the credentials mentioned at the top of the page.&lt;br /&gt;
&lt;br /&gt;
==='''Removing the text field from New Administrator'''===&lt;br /&gt;
&amp;lt;p&amp;gt;'''Visit the url [http://152.46.16.123:3000/admin/list_administrators http://152.46.16.123:3000/admin/list_administrators]'''&amp;lt;/p&amp;gt;&lt;br /&gt;
[[File:List_admin.png]]&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:List_admin.png&amp;diff=98017</id>
		<title>File:List admin.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:List_admin.png&amp;diff=98017"/>
		<updated>2015-11-01T02:46:01Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: uploaded a new version of &amp;amp;quot;File:List admin.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98016</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98016"/>
		<updated>2015-11-01T02:45:02Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Steps to verify changes manually */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project aimed at refactoring Admin Controller and Course Controller.&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
Expertiza is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line @institution = Institution.new(params[:institution]) to @institution = Institution.new(:name =&amp;gt; params[:institution][:name])&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;br /&gt;
===Views===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| views/admin/list_administrators.html.erb&lt;br /&gt;
| Removed the text field next to New Administrator button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:administrator&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_administrators.html.erb &lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_instructors.html.erb &lt;br /&gt;
| Removed the text field next to New Instructor button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:Instructor&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_super_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb &lt;br /&gt;
| Removed the Parent column from line 4 &lt;br /&gt;
| Super admins don't have any parents.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Removed &amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&lt;br /&gt;
| There can be only one super admin.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| show_admin lists out all the administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_super_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| Lists out the super administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_institutions.html.erb &lt;br /&gt;
| Added this file&lt;br /&gt;
| To add institution drop down menu in the new user creation form.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_user.html.erb&lt;br /&gt;
| Added line &amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
| To select the institution.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/list.html.erb&lt;br /&gt;
| Sending role:student as the default role for new user creation form&lt;br /&gt;
| Was throwing an error&lt;br /&gt;
|-&lt;br /&gt;
| views/users/new.html&lt;br /&gt;
| Default role is selected in new user creation form.&lt;br /&gt;
| So that if new administrator is clicked the user creation form will have admin as the pre selected role.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Re-factored Code Cases =&lt;br /&gt;
&lt;br /&gt;
== Case 1 : Refactoring admin_controller ==&lt;br /&gt;
&lt;br /&gt;
The consistency of these two methods shows plenty of repetitive code. In order to effectively refactor these methods and reuse the code they both need, our team merged the two methods together by enabling add_this_bookmark method to handle creation of a bookmark when a topic id is provided (main functionality of add_topic_bookmark method). Once we implemented this change on add_this_bookmark method, we deleted add_topic_bookmark method as it became obsolete. Therefore, we retained the same functionality while reducing the method by 7 repetitive lines of code. &lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     def list_instructors&lt;br /&gt;
    @users = User.&lt;br /&gt;
      instructors.&lt;br /&gt;
      order(:name).&lt;br /&gt;
      where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
      paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def add_administrator&lt;br /&gt;
    @user = User.new&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def new_administrator&lt;br /&gt;
    add_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def save_administrator # saves newly created administrator to database&lt;br /&gt;
    PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def create_administrator&lt;br /&gt;
    save_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def show&lt;br /&gt;
+    redirect_to url_for(:controller =&amp;gt; :users, :action =&amp;gt; :new)&lt;br /&gt;
+  end&lt;br /&gt;
 &lt;br /&gt;
   def list_instructors&lt;br /&gt;
     @users = User.&lt;br /&gt;
       instructors.&lt;br /&gt;
       order(:name).&lt;br /&gt;
       where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
       paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def add_administrator&lt;br /&gt;
     @user = User.new&lt;br /&gt;
+    redirect_to 'users#new'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def new_administrator&lt;br /&gt;
     add_administrator&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def save_administrator # saves newly created administrator to database&lt;br /&gt;
     PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def create_administrator&lt;br /&gt;
     save_administrator&lt;br /&gt;
+    redirect_to &amp;quot;users#new&amp;quot;&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 2 : Refactoring institution_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Before changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  def index&lt;br /&gt;
    list&lt;br /&gt;
    render :action =&amp;gt; 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
  verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
    :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
&lt;br /&gt;
  def list&lt;br /&gt;
    @institutions = Institution.all&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== After Changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index&lt;br /&gt;
-    list&lt;br /&gt;
+   # @institutions=Institution.All&lt;br /&gt;
+   list&lt;br /&gt;
     render :action =&amp;gt; 'list'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
   verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
     :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
 &lt;br /&gt;
   def list&lt;br /&gt;
-    @institutions = Institution.all&lt;br /&gt;
+    @institutions = Institution.all &lt;br /&gt;
+&lt;br /&gt;
   end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 3 : Refactoring user_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      @user = User.new(user_params)&lt;br /&gt;
      # record the person who created this new user&lt;br /&gt;
      @user.parent_id = (session[:user]).id&lt;br /&gt;
      # set the user's timezone to its parent's&lt;br /&gt;
      @user.timezonepref = User.find(@user.parent_id).timezonepref&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @user = User.new(user_params)&lt;br /&gt;
+      @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
       # record the person who created this new user&lt;br /&gt;
       @user.parent_id = (session[:user]).id&lt;br /&gt;
       # set the user's timezone to its parent's&lt;br /&gt;
      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Case 4 : Refactoring list_administrators ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
-  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+   &amp;lt;% if user.role_id == 3%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
-        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-&lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
-&amp;lt;% end %&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt; &lt;br /&gt;
+&amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 5 : Refactoring list_instructors.html.erb ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+  &amp;lt;% if user.role_id == 2%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+ &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 6: Refactoring list_super_administrators.html.erb ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+  &amp;lt;input type='submit' value='New Super Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 7: Addition of the institution id in the view===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_institutions&amp;quot;&amp;gt;Institution&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
+    &amp;lt;%= collection_select('users',:institutions_id, Institution.all, :id, :name) %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 8: Adding the institution feature to user view===&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
&amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@@ -1,13 +1,14 @@&lt;br /&gt;
 &amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
   &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
+&amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
 &amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 9:Routes added ===&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
    collection do&lt;br /&gt;
      get :list_super_administrators&lt;br /&gt;
      get :list_administrators&lt;br /&gt;
      get :list_instructors&lt;br /&gt;
      get :new_administrator&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
     collection do&lt;br /&gt;
+      get :create_any_user&lt;br /&gt;
       get :list_super_administrators&lt;br /&gt;
       get :list_administrators&lt;br /&gt;
       get :list_instructors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Steps to verify changes manually==&lt;br /&gt;
In order to inspect the changes made, you can visit our deployed [http://152.46.16.123:3000/admin/list_administrators Expertiza] and use the credentials mentioned at the top of the page.&lt;br /&gt;
&lt;br /&gt;
==='''Removing the text field from New Administrator'''===&lt;br /&gt;
&amp;lt;p&amp;gt;'''Visit the url [http://152.46.16.123:3000/admin/list_administrators http://152.46.16.123:3000/admin/list_administrators]'''&amp;lt;/p&amp;gt;&lt;br /&gt;
[[File:List admin.png]]&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:List_admin.png&amp;diff=98015</id>
		<title>File:List admin.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:List_admin.png&amp;diff=98015"/>
		<updated>2015-11-01T02:39:46Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: uploaded a new version of &amp;amp;quot;File:List admin.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:List_admin.png&amp;diff=98012</id>
		<title>File:List admin.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:List_admin.png&amp;diff=98012"/>
		<updated>2015-11-01T02:32:25Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: uploaded a new version of &amp;amp;quot;File:List admin.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:List_admin.png&amp;diff=98011</id>
		<title>File:List admin.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:List_admin.png&amp;diff=98011"/>
		<updated>2015-11-01T02:30:30Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98005</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=98005"/>
		<updated>2015-11-01T02:13:46Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project aimed at refactoring Admin Controller and Course Controller.&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
Expertiza is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line @institution = Institution.new(params[:institution]) to @institution = Institution.new(:name =&amp;gt; params[:institution][:name])&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;br /&gt;
===Views===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| views/admin/list_administrators.html.erb&lt;br /&gt;
| Removed the text field next to New Administrator button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:administrator&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_administrators.html.erb &lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_instructors.html.erb &lt;br /&gt;
| Removed the text field next to New Instructor button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:Instructor&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_super_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb &lt;br /&gt;
| Removed the Parent column from line 4 &lt;br /&gt;
| Super admins don't have any parents.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Removed &amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&lt;br /&gt;
| There can be only one super admin.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| show_admin lists out all the administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_super_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| Lists out the super administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_institutions.html.erb &lt;br /&gt;
| Added this file&lt;br /&gt;
| To add institution drop down menu in the new user creation form.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_user.html.erb&lt;br /&gt;
| Added line &amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
| To select the institution.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/list.html.erb&lt;br /&gt;
| Sending role:student as the default role for new user creation form&lt;br /&gt;
| Was throwing an error&lt;br /&gt;
|-&lt;br /&gt;
| views/users/new.html&lt;br /&gt;
| Default role is selected in new user creation form.&lt;br /&gt;
| So that if new administrator is clicked the user creation form will have admin as the pre selected role.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Re-factored Code Cases =&lt;br /&gt;
&lt;br /&gt;
== Case 1 : Refactoring admin_controller ==&lt;br /&gt;
&lt;br /&gt;
The consistency of these two methods shows plenty of repetitive code. In order to effectively refactor these methods and reuse the code they both need, our team merged the two methods together by enabling add_this_bookmark method to handle creation of a bookmark when a topic id is provided (main functionality of add_topic_bookmark method). Once we implemented this change on add_this_bookmark method, we deleted add_topic_bookmark method as it became obsolete. Therefore, we retained the same functionality while reducing the method by 7 repetitive lines of code. &lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     def list_instructors&lt;br /&gt;
    @users = User.&lt;br /&gt;
      instructors.&lt;br /&gt;
      order(:name).&lt;br /&gt;
      where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
      paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def add_administrator&lt;br /&gt;
    @user = User.new&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def new_administrator&lt;br /&gt;
    add_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def save_administrator # saves newly created administrator to database&lt;br /&gt;
    PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def create_administrator&lt;br /&gt;
    save_administrator&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def show&lt;br /&gt;
+    redirect_to url_for(:controller =&amp;gt; :users, :action =&amp;gt; :new)&lt;br /&gt;
+  end&lt;br /&gt;
 &lt;br /&gt;
   def list_instructors&lt;br /&gt;
     @users = User.&lt;br /&gt;
       instructors.&lt;br /&gt;
       order(:name).&lt;br /&gt;
       where(&amp;quot;parent_id = ?&amp;quot;, current_user.id).&lt;br /&gt;
       paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 50)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def add_administrator&lt;br /&gt;
     @user = User.new&lt;br /&gt;
+    redirect_to 'users#new'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def new_administrator&lt;br /&gt;
     add_administrator&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def save_administrator # saves newly created administrator to database&lt;br /&gt;
     PgUsersController.create(Role.administrator.id, :admin_controller, :list_administrators, :add_administrator)&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def create_administrator&lt;br /&gt;
     save_administrator&lt;br /&gt;
+    redirect_to &amp;quot;users#new&amp;quot;&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   def list_administrators&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 2 : Refactoring institution_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Before changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  def index&lt;br /&gt;
    list&lt;br /&gt;
    render :action =&amp;gt; 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
  verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
    :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
&lt;br /&gt;
  def list&lt;br /&gt;
    @institutions = Institution.all&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== After Changes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index&lt;br /&gt;
-    list&lt;br /&gt;
+   # @institutions=Institution.All&lt;br /&gt;
+   list&lt;br /&gt;
     render :action =&amp;gt; 'list'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)&lt;br /&gt;
   verify :method =&amp;gt; :post, :only =&amp;gt; [ :destroy, :create, :update ],&lt;br /&gt;
     :redirect_to =&amp;gt; { :action =&amp;gt; :list }&lt;br /&gt;
 &lt;br /&gt;
   def list&lt;br /&gt;
-    @institutions = Institution.all&lt;br /&gt;
+    @institutions = Institution.all &lt;br /&gt;
+&lt;br /&gt;
   end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 3 : Refactoring user_controller ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      @user = User.new(user_params)&lt;br /&gt;
      # record the person who created this new user&lt;br /&gt;
      @user.parent_id = (session[:user]).id&lt;br /&gt;
      # set the user's timezone to its parent's&lt;br /&gt;
      @user.timezonepref = User.find(@user.parent_id).timezonepref&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @user = User.new(user_params)&lt;br /&gt;
+      @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
       # record the person who created this new user&lt;br /&gt;
       @user.parent_id = (session[:user]).id&lt;br /&gt;
       # set the user's timezone to its parent's&lt;br /&gt;
      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Case 4 : Refactoring list_administrators ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
-  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+   &amp;lt;% if user.role_id == 3%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
-        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-&lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag({:action =&amp;gt; 'new_administrator'}, {:method =&amp;gt; 'post'}) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
-&amp;lt;% end %&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt; &lt;br /&gt;
+&amp;lt;input type='submit' value='New Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 5 : Refactoring list_instructors.html.erb ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
  &amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;h1&amp;gt;Instructors&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;%= will_paginate @users %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Email Address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
-  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
+  &amp;lt;% for user in User.all %&amp;gt;&lt;br /&gt;
+  &amp;lt;% if user.role_id == 2%&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_instructor',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
+  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;%= form_tag('new_instructor', method: :get) do %&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
-  &amp;lt;br&amp;gt;&lt;br /&gt;
-  &amp;lt;%= text_field_tag('name', '', {'size' =&amp;gt; 30}) %&amp;gt;&lt;br /&gt;
-  &amp;amp;nbsp;&lt;br /&gt;
-  &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+ &amp;lt;input type='submit' value='New Instructor'/&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Case 6: Refactoring list_super_administrators.html.erb ==&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
        :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;% end -%&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;h1&amp;gt;Super-Administrators&amp;lt;/h1&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Full name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;E-mail address&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Parent&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% for user in @users %&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show',&lt;br /&gt;
         :id =&amp;gt; user.id %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.fullname %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%= user.email %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
-      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.parent_id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
+      &amp;lt;td&amp;gt;&amp;lt;%= (User.find(user.id)).name  %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;% end -%&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;hr/&amp;gt;&lt;br /&gt;
-&amp;lt;p&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
+&amp;lt;%= form_tag(new_admin_path, method: :get) do %&amp;gt;&lt;br /&gt;
+  &amp;lt;input type='submit' value='New Super Administrator'/&amp;gt;&lt;br /&gt;
+&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 7: Addition of the institution id in the view===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_institutions&amp;quot;&amp;gt;Institution&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
+    &amp;lt;%= collection_select('users',:institutions_id, Institution.all, :id, :name) %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 8: Adding the institution feature to user view===&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
&amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
&amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@@ -1,13 +1,14 @@&lt;br /&gt;
 &amp;lt;%= error_messages_for 'user' %&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;!--[form:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;user_name&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
   &amp;lt;%= text_field 'user', 'name'  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;% new_user ||= false %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/name' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/email' %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/password', :locals =&amp;gt; { :new_user =&amp;gt; new_user } %&amp;gt;&lt;br /&gt;
 &amp;lt;%= render :partial =&amp;gt; 'users/prefs' %&amp;gt;&lt;br /&gt;
+&amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
 &amp;lt;!--[eoform:user]--&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Case 9:Routes added ===&lt;br /&gt;
&lt;br /&gt;
===Before Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
    collection do&lt;br /&gt;
      get :list_super_administrators&lt;br /&gt;
      get :list_administrators&lt;br /&gt;
      get :list_instructors&lt;br /&gt;
      get :new_administrator&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===After Changes===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  resources :admin do&lt;br /&gt;
     collection do&lt;br /&gt;
+      get :create_any_user&lt;br /&gt;
       get :list_super_administrators&lt;br /&gt;
       get :list_administrators&lt;br /&gt;
       get :list_instructors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Steps to verify changes manually==&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97997</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97997"/>
		<updated>2015-11-01T01:49:44Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Changes Made */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project aimed at refactoring Admin Controller and Course Controller.&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
Expertiza is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line @institution = Institution.new(params[:institution]) to @institution = Institution.new(:name =&amp;gt; params[:institution][:name])&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;br /&gt;
===Views===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| views/admin/list_administrators.html.erb&lt;br /&gt;
| Removed the text field next to New Administrator button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:administrator&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_administrators.html.erb &lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_instructors.html.erb &lt;br /&gt;
| Removed the text field next to New Instructor button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:Instructor&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_super_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb &lt;br /&gt;
| Removed the Parent column from line 4 &lt;br /&gt;
| Super admins don't have any parents.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/list_super_administrators.html.erb&lt;br /&gt;
| Removed &amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&lt;br /&gt;
| There can be only one super admin.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| show_admin lists out all the administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/admin/show_super_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| Lists out the super administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_institutions.html.erb &lt;br /&gt;
| Added this file&lt;br /&gt;
| To add institution drop down menu in the new user creation form.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_user.html.erb&lt;br /&gt;
| Added line &amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
| To select the institution.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/list.html.erb&lt;br /&gt;
| Sending role:student as the default role for new user creation form&lt;br /&gt;
| Was throwing an error&lt;br /&gt;
|-&lt;br /&gt;
| views/users/new.html&lt;br /&gt;
| Default role is selected in new user creation form.&lt;br /&gt;
| So that if new administrator is clicked the user creation form will have admin as the pre selected role.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97996</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97996"/>
		<updated>2015-11-01T01:48:32Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Views/admin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project aimed at refactoring Admin Controller and Course Controller.&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
Expertiza is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
===Views===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| list_administrators.html.erb&lt;br /&gt;
| Removed the text field next to New Administrator button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:administrator&lt;br /&gt;
|-&lt;br /&gt;
| list_administrators.html.erb &lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller&lt;br /&gt;
|-&lt;br /&gt;
| list_instructors.html.erb &lt;br /&gt;
| Removed the text field next to New Instructor button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:Instructor&lt;br /&gt;
|-&lt;br /&gt;
| list_super_administrators.html.erb&lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_super_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller.&lt;br /&gt;
|-&lt;br /&gt;
| list_super_administrators.html.erb &lt;br /&gt;
| Removed the Parent column from line 4 &lt;br /&gt;
| Super admins don't have any parents.&lt;br /&gt;
|-&lt;br /&gt;
| list_super_administrators.html.erb&lt;br /&gt;
| Removed &amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&lt;br /&gt;
| There can be only one super admin.&lt;br /&gt;
|-&lt;br /&gt;
| show_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| show_admin lists out all the administrator.&lt;br /&gt;
|-&lt;br /&gt;
| show_super_admin.html.erb&lt;br /&gt;
| Added this file.&lt;br /&gt;
| Lists out the super administrator.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_institutions.html.erb &lt;br /&gt;
| Added this file&lt;br /&gt;
| To add institution drop down menu in the new user creation form.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/_user.html.erb&lt;br /&gt;
| Added line &amp;lt;%= render :partial =&amp;gt; 'users/institutions' %&amp;gt;&lt;br /&gt;
| To select the institution.&lt;br /&gt;
|-&lt;br /&gt;
| views/users/list.html.erb&lt;br /&gt;
| Sending role:student as the default role for new user creation form&lt;br /&gt;
| Was throwing an error&lt;br /&gt;
|-&lt;br /&gt;
| views/users/new.html&lt;br /&gt;
| Default role is selected in new user creation form.&lt;br /&gt;
| So that if new administrator is clicked the user creation form will have admin as the pre selected role.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line @institution = Institution.new(params[:institution]) to @institution = Institution.new(:name =&amp;gt; params[:institution][:name])&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97975</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97975"/>
		<updated>2015-11-01T01:28:00Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Changes Made */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project aimed at refactoring Admin Controller and Course Controller.&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
Expertiza is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
===Views/admin===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| list_administrators.html.erb&lt;br /&gt;
| Removed the text field next to New Administrator button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:administrator&lt;br /&gt;
|-&lt;br /&gt;
| list_administrators.html.erb &lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller&lt;br /&gt;
|-&lt;br /&gt;
| list_instructors.html.erb &lt;br /&gt;
| Removed the text field next to New Instructor button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:Instructor&lt;br /&gt;
|-&lt;br /&gt;
| list_super_administrators.html.erb&lt;br /&gt;
| Changed line 7 to &amp;lt;%= link_to user.name, :action =&amp;gt; 'show_super_admin',:id =&amp;gt; user.id %&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller.&lt;br /&gt;
|-&lt;br /&gt;
| list_super_administrators.html.erb &lt;br /&gt;
| Removed the Parent column from line 4 &lt;br /&gt;
| Super admins don't have any parents.&lt;br /&gt;
|-&lt;br /&gt;
| list_super_administrators.html.erb&lt;br /&gt;
| Removed &amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&lt;br /&gt;
| There can be only one super admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line @institution = Institution.new(params[:institution]) to @institution = Institution.new(:name =&amp;gt; params[:institution][:name])&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line @user.institutions_id=params[:users][:institutions_id]&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97970</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97970"/>
		<updated>2015-11-01T01:26:11Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Changes Made */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project aimed at refactoring Admin Controller and Course Controller.&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
Expertiza is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
===Views/admin===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| list_administrators.html.erb&lt;br /&gt;
| Removed the text field next to New Administrator button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:administrator&lt;br /&gt;
|-&lt;br /&gt;
| list_administrators.html.erb &lt;br /&gt;
| Changed line 7 to &amp;lt;pre&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_admin',:id =&amp;gt; user.id %&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller&lt;br /&gt;
|-&lt;br /&gt;
| list_instructors.html.erb &lt;br /&gt;
| Removed the text field next to New Instructor button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:Instructor&lt;br /&gt;
|-&lt;br /&gt;
| list_super_administrators.html.erb&lt;br /&gt;
| Changed line 7 to &amp;lt;pre&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_super_admin',:id =&amp;gt; user.id %&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller.&lt;br /&gt;
|-&lt;br /&gt;
| list_super_administrators.html.erb &lt;br /&gt;
| Removed the Parent column from line 4 &lt;br /&gt;
| Super admins don't have any parents.&lt;br /&gt;
|-&lt;br /&gt;
| list_super_administrators.html.erb&lt;br /&gt;
| Removed &amp;lt;pre&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
| There can be only one super admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line&amp;lt;pre&amp;gt; @institution = Institution.new(params[:institution])&amp;lt;/pre&amp;gt; to &amp;lt;pre&amp;gt;@institution = Institution.new(:name =&amp;gt; params[:institution][:name])&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line &amp;lt;pre&amp;gt;@user.institutions_id=params[:users][:institutions_id]&amp;lt;/pre&amp;gt;&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97969</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97969"/>
		<updated>2015-11-01T01:25:44Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Views/admin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project aimed at refactoring Admin Controller and Course Controller.&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
Expertiza is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line&amp;lt;pre&amp;gt; @institution = Institution.new(params[:institution])&amp;lt;/pre&amp;gt; to &amp;lt;pre&amp;gt;@institution = Institution.new(:name =&amp;gt; params[:institution][:name])&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line &amp;lt;pre&amp;gt;@user.institutions_id=params[:users][:institutions_id]&amp;lt;/pre&amp;gt;&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;br /&gt;
===Views/admin===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| list_administrators.html.erb&lt;br /&gt;
| Removed the text field next to New Administrator button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:administrator&lt;br /&gt;
|-&lt;br /&gt;
| list_administrators.html.erb &lt;br /&gt;
| Changed line 7 to &amp;lt;pre&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_admin',:id =&amp;gt; user.id %&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller&lt;br /&gt;
|-&lt;br /&gt;
| list_instructors.html.erb &lt;br /&gt;
| Removed the text field next to New Instructor button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:Instructor&lt;br /&gt;
|-&lt;br /&gt;
| list_super_administrators.html.erb&lt;br /&gt;
| Changed line 7 to &amp;lt;pre&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_super_admin',:id =&amp;gt; user.id %&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller.&lt;br /&gt;
|-&lt;br /&gt;
| list_super_administrators.html.erb &lt;br /&gt;
| Removed the Parent column from line 4 &lt;br /&gt;
| Super admins don't have any parents.&lt;br /&gt;
|-&lt;br /&gt;
| list_super_administrators.html.erb&lt;br /&gt;
| Removed &amp;lt;pre&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
| There can be only one super admin.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97968</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97968"/>
		<updated>2015-11-01T01:25:30Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Views/admin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project aimed at refactoring Admin Controller and Course Controller.&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
Expertiza is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line&amp;lt;pre&amp;gt; @institution = Institution.new(params[:institution])&amp;lt;/pre&amp;gt; to &amp;lt;pre&amp;gt;@institution = Institution.new(:name =&amp;gt; params[:institution][:name])&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line &amp;lt;pre&amp;gt;@user.institutions_id=params[:users][:institutions_id]&amp;lt;/pre&amp;gt;&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;br /&gt;
===Views/admin===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| list_administrators.html.erb&lt;br /&gt;
| Removed the text field next to New Administrator button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:administrator&lt;br /&gt;
|-&lt;br /&gt;
| list_administrators.html.erb &lt;br /&gt;
| Changed line 7 to &amp;lt;pre&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_admin',:id =&amp;gt; user.id %&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller&lt;br /&gt;
|-&lt;br /&gt;
| list_instructors.html.erb &lt;br /&gt;
| Removed the text field next to New Instructor button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:Instructor&lt;br /&gt;
|-&lt;br /&gt;
| list_super_administrators.html.erb&lt;br /&gt;
| Changed line 7 to &amp;lt;pre&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_super_admin',:id =&amp;gt; user.id %&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller.&lt;br /&gt;
|-&lt;br /&gt;
| list_super_administrators.html.erb &lt;br /&gt;
| Removed the Parent column from line 4 &lt;br /&gt;
| Super admins don't have any parents.&lt;br /&gt;
|-&lt;br /&gt;
| list_super_administrators.html.erb&lt;br /&gt;
| Removed &amp;lt;pre&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
| There can be only one superadmin.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97967</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97967"/>
		<updated>2015-11-01T01:25:12Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Views */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project aimed at refactoring Admin Controller and Course Controller.&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
Expertiza is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line&amp;lt;pre&amp;gt; @institution = Institution.new(params[:institution])&amp;lt;/pre&amp;gt; to &amp;lt;pre&amp;gt;@institution = Institution.new(:name =&amp;gt; params[:institution][:name])&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line &amp;lt;pre&amp;gt;@user.institutions_id=params[:users][:institutions_id]&amp;lt;/pre&amp;gt;&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;br /&gt;
===Views/admin===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| list_administrators.html.erb&lt;br /&gt;
| Removed the text field next to New Administrator button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:administrator&lt;br /&gt;
|-&lt;br /&gt;
| list_administrators.html.erb &lt;br /&gt;
| Changed line 7 to &amp;lt;pre&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_admin',:id =&amp;gt; user.id %&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller&lt;br /&gt;
|-&lt;br /&gt;
| list_instructors.html.erb &lt;br /&gt;
| Removed the text field next to New Instructor button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:Instructor&lt;br /&gt;
|-&lt;br /&gt;
| list_super_administrators.html.erb&lt;br /&gt;
| Changed line 7 to &amp;lt;pre&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_super_admin',:id =&amp;gt; user.id %&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller.&lt;br /&gt;
|-&lt;br /&gt;
| list_super_administrators.html.erb &lt;br /&gt;
| Removed the Parent column from line 4 &lt;br /&gt;
| Super admins don't have any parents.&lt;br /&gt;
|-&lt;br /&gt;
| list_super_administrators.html.erb&lt;br /&gt;
| Removed &amp;lt;pre&amp;gt;&amp;lt;%= link_to 'New Super administrator', :action =&amp;gt; 'new' %&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
| There can be only one superadmin.|}&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97963</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97963"/>
		<updated>2015-11-01T01:21:47Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Views */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project aimed at refactoring Admin Controller and Course Controller.&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
Expertiza is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line&amp;lt;pre&amp;gt; @institution = Institution.new(params[:institution])&amp;lt;/pre&amp;gt; to &amp;lt;pre&amp;gt;@institution = Institution.new(:name =&amp;gt; params[:institution][:name])&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line &amp;lt;pre&amp;gt;@user.institutions_id=params[:users][:institutions_id]&amp;lt;/pre&amp;gt;&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;br /&gt;
===Views===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| list_administrators.html.erb&lt;br /&gt;
| Removed the text field next to New Administrator button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:administrator&lt;br /&gt;
|-&lt;br /&gt;
| list_administrators.html.erb &lt;br /&gt;
| Changed line 7 to &amp;lt;pre&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_admin',:id =&amp;gt; user.id %&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller&lt;br /&gt;
|-&lt;br /&gt;
| list_instructors.html.erb &lt;br /&gt;
| Removed the text field next to New Instructor button&lt;br /&gt;
| The button redirects to a new user page and passes a hidden field with role:Instructor&lt;br /&gt;
|-&lt;br /&gt;
| list_super_administrators.html.erb&lt;br /&gt;
| Changed line 7 to &amp;lt;pre&amp;gt;&amp;lt;%= link_to user.name, :action =&amp;gt; 'show_super_admin',:id =&amp;gt; user.id %&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
| There is no show method in Admin Controller.&lt;br /&gt;
|-&lt;br /&gt;
| search_alltags_foruser &lt;br /&gt;
| |Merged search_alltags_allusers and search_alltags_foruser functions into search_alltags function&lt;br /&gt;
| Duplicate code present in both the functions. They differed only with the usage of parameters passed.&lt;br /&gt;
|-&lt;br /&gt;
| search_fortags_allusers&lt;br /&gt;
| | Merged search_fortags_allusers and search_fortags_foruser functions into search_fortags function&lt;br /&gt;
| Duplicate code present in both the functions. They differed only with the usage of parameters passed.&lt;br /&gt;
|-&lt;br /&gt;
| search_fortags_foruser&lt;br /&gt;
| Merged search_fortags_allusers and search_fortags_foruser functions into search_fortags function&lt;br /&gt;
| Duplicate code present in both the functions. They differed only with the usage of parameters passed.&lt;br /&gt;
|-&lt;br /&gt;
| add_new_bookmark &lt;br /&gt;
| Changed the method name to &amp;quot;create&amp;quot;&lt;br /&gt;
| It is a much more meaningful and simpler name for a method that creates a new bookmark&lt;br /&gt;
|-&lt;br /&gt;
| edit_this_bookmark &lt;br /&gt;
| Changed the name to &amp;quot;edit&amp;quot;&lt;br /&gt;
| It is a much more appropriate name for a method that edits the bookmark it was called on&lt;br /&gt;
|-&lt;br /&gt;
| add_bmapping&lt;br /&gt;
| Moved to class 'Bmapping'&lt;br /&gt;
| This method helps in creating new bmapping. Hence it makes more sense if it belongs to bmapping class itself.&lt;br /&gt;
|-&lt;br /&gt;
| add_bmapping_signuptopic&lt;br /&gt;
| Moved to class 'Bmapping'&lt;br /&gt;
| This method helps in adding a signup topic to a newly created bmapping. Hence it makes more sense if it belongs to bmapping class itself.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97950</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97950"/>
		<updated>2015-11-01T01:08:01Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Changes Made */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project aimed at refactoring Admin Controller and Course Controller.&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
Expertiza is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line&amp;lt;pre&amp;gt; @institution = Institution.new(params[:institution])&amp;lt;/pre&amp;gt; to &amp;lt;pre&amp;gt;@institution = Institution.new(:name =&amp;gt; params[:institution][:name])&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line &amp;lt;pre&amp;gt;@user.institutions_id=params[:users][:institutions_id]&amp;lt;/pre&amp;gt;&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;br /&gt;
===Views===&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97948</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97948"/>
		<updated>2015-11-01T01:07:35Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* User Controller */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project aimed at refactoring Admin Controller and Course Controller.&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
Expertiza is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line&amp;lt;pre&amp;gt; @institution = Institution.new(params[:institution])&amp;lt;/pre&amp;gt; to &amp;lt;pre&amp;gt;@institution = Institution.new(:name =&amp;gt; params[:institution][:name])&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Added the line &amp;lt;pre&amp;gt;@user.institutions_id=params[:users][:institutions_id]&amp;lt;/pre&amp;gt;&lt;br /&gt;
| To include institution for newly created users&lt;br /&gt;
|-&lt;br /&gt;
| user_params &lt;br /&gt;
| Added the parameter institutions ID.&lt;br /&gt;
| To include institution for newly created users.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97943</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97943"/>
		<updated>2015-11-01T01:02:36Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Changes Made */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project aimed at refactoring Admin Controller and Course Controller.&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
Expertiza is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line&amp;lt;pre&amp;gt; @institution = Institution.new(params[:institution])&amp;lt;/pre&amp;gt; to &amp;lt;pre&amp;gt;@institution = Institution.new(:name =&amp;gt; params[:institution][:name])&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;br /&gt;
===User Controller===&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97942</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97942"/>
		<updated>2015-11-01T01:00:35Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Modified the methods add_administrator and create_administrator */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project aimed at refactoring Admin Controller and Course Controller.&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
Expertiza is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Institution Controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| create&lt;br /&gt;
| Changed line&amp;lt;pre&amp;gt; @institution = Institution.new(params[:institution])&amp;lt;/pre&amp;gt; to &amp;lt;pre&amp;gt;@institution = Institution.new(:name =&amp;gt; params[:institution][:name])&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Was throwing error&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97909</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97909"/>
		<updated>2015-11-01T00:41:14Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: /* Admin Controller */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project aimed at refactoring Admin Controller and Course Controller.&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
Expertiza is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:13%;&amp;quot;|Method Name&lt;br /&gt;
! style=&amp;quot;width:33%;&amp;quot;|Changes Made &lt;br /&gt;
! style=&amp;quot;width:43%;&amp;quot;|Reason For Change&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| show_super_admin&lt;br /&gt;
| Added this method to controller&lt;br /&gt;
| This method helps in displaying the specified super_admin &lt;br /&gt;
|-&lt;br /&gt;
| show_admin &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in displaying the specified admin&lt;br /&gt;
|-&lt;br /&gt;
| remove_instructor &lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an instructor.&lt;br /&gt;
|-&lt;br /&gt;
| remove_administrator&lt;br /&gt;
| Added this method to Admin Controller&lt;br /&gt;
| This method helps in destroying an administrator.&lt;br /&gt;
|-&lt;br /&gt;
| remove_super_administrator &lt;br /&gt;
| Added this method to Admin Controller.&lt;br /&gt;
| This method helps in destroying a super_admin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Modified the methods &amp;lt;code&amp;gt;add_administrator&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;create_administrator&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_administrator&lt;br /&gt;
    @user = User.new&lt;br /&gt;
  end&lt;br /&gt;
  def create_administrator&lt;br /&gt;
    save_administrator&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_administrator&lt;br /&gt;
    @user = User.new&lt;br /&gt;
    redirect_to 'users#new'&lt;br /&gt;
  end&lt;br /&gt;
  def create_administrator&lt;br /&gt;
    save_administrator&lt;br /&gt;
    redirect_to &amp;quot;users#new&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97883</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97883"/>
		<updated>2015-11-01T00:21:40Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project aimed at refactoring Admin Controller and Course Controller.&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
Expertiza is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Admin Controller===&lt;br /&gt;
=== Modified the methods &amp;lt;code&amp;gt;add_administrator&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;create_administrator&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_administrator&lt;br /&gt;
    @user = User.new&lt;br /&gt;
  end&lt;br /&gt;
  def create_administrator&lt;br /&gt;
    save_administrator&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_administrator&lt;br /&gt;
    @user = User.new&lt;br /&gt;
    redirect_to 'users#new'&lt;br /&gt;
  end&lt;br /&gt;
  def create_administrator&lt;br /&gt;
    save_administrator&lt;br /&gt;
    redirect_to &amp;quot;users#new&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97882</id>
		<title>CSC/ECE 517 Fall 2015/oss E1565 AAJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1565_AAJ&amp;diff=97882"/>
		<updated>2015-11-01T00:19:39Z</updated>

		<summary type="html">&lt;p&gt;Athakur3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1565: Refactoring Admin Controller and Course Controller'''&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project aimed at refactoring Admin Controller and Course Controller.&lt;br /&gt;
&lt;br /&gt;
'''In order to run our code visit the link 152.46.16.123:3000 and use the following credentials - username: admin, password: admin.'''&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
Expertiza is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
&amp;lt;p&amp;gt;'''Files involved'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin_controller.rb&lt;br /&gt;
views in app/views/admin folder&lt;br /&gt;
user_controller&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What they do: '''&amp;lt;/p&amp;gt;&lt;br /&gt;
The admin controller defines the changes that can be done on other types of users by super-admin and provides the view accordingly. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''What needs to be done: ''' &amp;lt;/p&amp;gt;&lt;br /&gt;
* The text field for adding a new admin/instructor has to be removed, leaving only the button.&lt;br /&gt;
* When the button is clicked, it should be redirected to new user creation view making the role (super-admin, admin or instructor) selected as default.&lt;br /&gt;
* Make sure that user creation works for super-admin/admin/instructor.&lt;br /&gt;
* Associate the users with the institution table&lt;br /&gt;
* Add a drop down to the view of creating users so that new account creator can select the institute and save it. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Changes Made==&lt;br /&gt;
===Part A===&lt;br /&gt;
====admin_controller.rb====&lt;br /&gt;
=== Modified the methods &amp;lt;code&amp;gt;add_administrator&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;create_administrator&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_administrator&lt;br /&gt;
    @user = User.new&lt;br /&gt;
  end&lt;br /&gt;
  def create_administrator&lt;br /&gt;
    save_administrator&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_administrator&lt;br /&gt;
    @user = User.new&lt;br /&gt;
    redirect_to 'users#new'&lt;br /&gt;
  end&lt;br /&gt;
  def create_administrator&lt;br /&gt;
    save_administrator&lt;br /&gt;
    redirect_to &amp;quot;users#new&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Athakur3</name></author>
	</entry>
</feed>