Spring2019 E1907 refactor response controller

From Expertiza_Wiki
Revision as of 03:51, 26 March 2019 by Agodava (talk | contribs)
Jump to navigation Jump to search

Introduction

Expertiza is an open source webapp built on Ruby on Rails stack. It provides a platform to students with various features like peer-reviewing projects, submitting work, form teams, viewing grades etc. The project is being built and maintained by students and faculty at NCSU.

About response_controller.rb

The file response_controller.rb handles the operations on responses based on user permissions and redirects the user to the appropriate place after the action is complete. The responses here constitute of peer reviews/questionnaires/survey. The controller takes care of tasks such as creating, saving, editing, updating and deleting these responses.

Pull request

The pull request for this task can be viewed at [1]

Github forked repo

https://github.com/Anusha-Godavarthi/expertiza

=""Team branches ""

https://github.com/Anusha-Godavarthi/expertiza/branches

Tasks accomplished

1. Renamed edit_allowed function to view_allowed in the response_controller.rb file


2. Moved the pending_surveys function to survey_deployment_controller.rb

Made changes in the following files and folders:

  • app/controllers/response_controller.rb
  • app/controllers/survey_deployment_controller.rb
  • config/routes.rb
  • spec/controllers/respose_controller_spec.rb
  • Moved pending_surveys.html.erb from views/response to views/survey_deployment


3. Removed assign_instance_vars section as it was not needed and combined in Edit and New sections

Original assign_instance_vars method :-


def assign_instance_vars
    case params[:action]
    when 'edit'
      @header = 'Edit'
      @next_action = 'update'
      @response = Response.find(params[:id])
      @map = @response.map
      @contributor = @map.contributor
    when 'new'
      @header = 'New'
      @next_action = 'create'
      @feedback = params[:feedback]
      @map = ResponseMap.find(params[:id])
      @modified_object = @map.id
    end
    @return = params[:return]
  end


Moved the assign_instance_vars for the Edit action to the edit method.

  def edit
    # instance variables for Edit action
    @header = 'Edit'
    @next_action = 'update'
    @response = Response.find(params[:id])
    @map = @response.map
    @contributor = @map.contributor
    @prev = Response.where(map_id: @map.id)
    @review_scores = @prev.to_a
    if @prev.present?
      @sorted = @review_scores.sort {|m1, m2| m1.version_num.to_i && m2.version_num.to_i ? m2.version_num.to_i <=> m1.version_num.to_i : (m1.version_num ? -1 : 1) }
      @largest_version_num = @sorted[0]
    end
    @modified_object = @response.response_id
    # set more handy variables for the view
    set_content
    @review_scores = []
    @questions.each do |question|
      @review_scores << Answer.where(response_id: @response.response_id, question_id: question.id).first
    end
    @questionnaire = set_questionnaire
    render action: 'response'
  end

Moved assign_instance_vars for the New action inside the new method : -


def new
    # instance variable for New action
    @header = 'New'
    @next_action = 'create'
    @feedback = params[:feedback]
    @map = ResponseMap.find(params[:id])
    @modified_object = @map.id
    set_content(true)
    @stage = @assignment.get_current_stage(SignedUpTeam.topic_id(@participant.parent_id, @participant.user_id)) if @assignment
      team = AssignmentTeam.find(@map.reviewee_id)
    @response = Response.where(map_id: @map.id, round: @current_round.to_i).order(updated_at: :desc).first
    if @response.nil? || team.most_recent_submission.updated_at > @response.updated_at
      @response = Response.create(map_id: @map.id, additional_comment: '', round: @current_round, is_submitted: 0)
    end
    questions = sort_questions(@questionnaire.questions)
    init_answers(questions)
    render action: 'response'
  end

4. Removed was_submitted. Changed to previously_submitted in the in create method.


5. Added comments in private methods


6. Introduced temporary explaining variables in the redirect method

Code Climate and Travis CI

There are only cyclomatic , cognitive errors with code climate whereas there are no integration errors with Travis CI

References

1. Expertiza Main Repo [2]

2. Expertiza Documentation [3]

3. Pull Request [4]

4. Github branches [5]