CSC/ECE 517 Fall 2021 - E2147. Role-based reviewing
E2147. Role-based reviewing
This page provides a description of the Expertiza based OSS project.
About Expertiza
Problem Statement
In various agile methodologies, such as Scrum, different team members take on different roles, such as architect, facilitator, and implementer. One might want to use a different rubric for evaluating the contribution of members with different roles. Thus, this would not be separate from teammate review, but it would be a specialization of teammate review.
The following tasks were accomplished in this project:
- Created a new database table, model, view, and controller for duties.
- Allow assignments to be marked for role-based reviewing.
- Certain users can add and edit roles for assignments.
Due to naming issues all of the backend components for role-based reviewing are known as duty or duties. When referring to the backend this documentation will refer to them as duty or duties and when referring to frontend components they will be called role or roles.
About Current Reviewing
Solutions Implemented and Delivered
* Created a new database table, model, view, and controller for duties.
Database
We created a new duty table using scaffolding. In the database, each duty entry has an assignment_id, a max_duty_limit, and a duty_name.
- The assignment_id is the id of the assignment to which this duty belongs to.
- The max_duty_limit field is an integer and is the maximum number of students who are allowed to have a specific duty (e.g. 1 scrum master but 5 developers are allowed).
- The duty_name is the name of the duty and will be displayed as Role name on the frontend.
Model
The model for duty is simple and simply marks a duty as belonging to assignment:
class Duty < ActiveRecord::Base belongs_to :assignment end
Views
There were quite a few new views added for the implementation, they will simply be mentioned in this section and then explained in the corresponding solution description.
The new views were:
- actions
- add_duties
- add_duty
- checkbox
- duty
- table_header
- table_line
- edit
- new
Controller
We created a new duties controller which allows for creation, editing, and deletion of duties from an assignment. The controller has a check to see if the current user is authorized to make the request.
* Allow assignments to be marked for role-based reviewing.
Under the Review Strategy Tab of an assignment a checkbox was added that when clicked marks the assignment as role-based reviewing and displays an interface for adding, editing, and deleting roles.
In the Review Strategy Tab under the self review checkbox we added a render call to the checkbox view:
<% if current_page?(action: 'edit') %> <!--E2147 Duty Based Reviewing--> <tr> <td id='is_duty_based_assignment'> <input name="assignment_form[assignment][is_duty_based_assignment]" type="hidden" value="false"/> <%= check_box_tag('assignment_form[assignment][is_duty_based_assignment]', 'true', @assignment_form.assignment.is_duty_based_assignment, {:id => "is_duty_checkbox", :onChange => 'hasDutiesChanged()'}) %> <%= label_tag('duty_assignment', 'Is Role-Based Reviewing?') %> <img src="/assets/info.png" title='Check the box if this assignment allows role assignments within the team'> <div id="add_duties" <%= "hidden" if not @assignment_form.assignment.is_duty_based_assignment %> > <br> <%= render '/duties/add_duties' %> </div> </td> </tr> <% end %>
The checkbox view checks if the current page is being edited rather than created since duties rely on an assignment existing to link via id. This functionality is similar to how topics are added to the assignment.
If the checkbox is checked and saved the assignment will be marked as a role-based reviewing assignment via the database column is_duty_based_assignment in the assignment table. When the checkbox is checked the add_duties view is rendered and displayed as well. When unchecked the view is hidden and the is_duty_based_assignment is marked as false when saved.
If the assignment has no duties in the backend the add_duties view will display a note with the text "Roles have not yet been created.", if there are duties linked to the currently edited assignment then the view will render a table header from the table_header view and a line for each duty from the table_line view. At the end of this view, the add_duty partial view is rendered.
The table_header view displays a table header with three items. Role name, Maximum member limit, and Actions, each with respective widths of 45%, 45%, and 10%.
The table_line view crafts a table row based on the duty that was passed to it. The first column is the duty's duty_name with a link to the editing page for the duty if clicked. The next column is the duty's max_duty_limit, and the final column is a list of actions for the current duty which is rendered using the actions view.
The actions view displays two linked images, these are named "Edit Role" and "Delete Role", and are linked to their respective actions. The icons used for these actions are in line with other parts of expertiza for the actions that they represent.
The add_duty view is a link to the new view and is labelled "New role".
* Certain users can add and edit roles for assignments.
Users with TA privileges are able to add a role (added as duty to backend for clarity) to an assignment.