ece517-p3/expertiza

View on GitHub
app/controllers/automated_metareviews_controller.rb

Summary

Maintainability
B
5 hrs
Test Coverage
# require 'automated_metareview'
class AutomatedMetareviewsController < ApplicationController
  attr_accessor :automated_metareviews
  def index
    @automated_metareviews = AutomatedMetareview.all
    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render xml: @automated_metareviews }
    end
  end

  def list
    @automated_metareview = AutomatedMetareview.new
    # pass in the response id as a parameter
    @response = Response.find_by(map_id: params[:id])
    @automated_metareview.calculate_metareview_metrics(@response, params[:id])
    if @automated_metareview.save!
      flash[:notice] = 'The automated meta-review was saved!'
    else
      flash[:error] = 'An error occurred and the automated meta-review was not saved!'
    end

    # fetching average metrics values
    avg_existing_metareviews = AutomatedMetareview.find_by_sql(["select avg(relevance) as relevance, avg(content_summative) as summative,
                                                                avg(content_problem) as problem, avg(content_advisory) as advisory,
                                                                avg(tone_positive) as positive, avg(tone_negative) as negative,
                                                                avg(tone_neutral) as neutral, avg(quantity) as quantity from automated_metareviews where response_id <> ?",
                                                                @automated_metareview.response_id])[0]
    unless avg_existing_metareviews.nil?
      # if any of the values are -ve, set them as 0 (for graph display)
      avg_existing_metareviews.relevance = 0 if avg_existing_metareviews.relevance.nil? or avg_existing_metareviews.relevance < 0
      avg_existing_metareviews.summative = 0 if avg_existing_metareviews.summative.nil? or avg_existing_metareviews.summative.to_f < 0
      avg_existing_metareviews.problem = 0 if avg_existing_metareviews.problem.nil? or avg_existing_metareviews.problem.to_f < 0
      avg_existing_metareviews.advisory = 0 if avg_existing_metareviews.advisory.nil? or avg_existing_metareviews.advisory.to_f < 0
      avg_existing_metareviews.positive = 0 if avg_existing_metareviews.positive.nil? or avg_existing_metareviews.positive.to_f < 0
      avg_existing_metareviews.negative = 0 if avg_existing_metareviews.negative.nil? or avg_existing_metareviews.negative.to_f < 0
      avg_existing_metareviews.neutral = 0 if avg_existing_metareviews.neutral.nil? or avg_existing_metareviews.neutral.to_f < 0
    end

    # for current metareview values
    @automated_metareview.relevance = 0 if @automated_metareview.relevance.to_f < 0
    @automated_metareview.content_summative = 0 if @automated_metareview.content_summative.to_f < 0
    @automated_metareview.content_problem = 0 if @automated_metareview.content_problem.to_f < 0
    @automated_metareview.content_advisory = 0 if @automated_metareview.content_advisory.to_f < 0
    @automated_metareview.tone_positive = 0 if @automated_metareview.tone_positive.to_f < 0
    @automated_metareview.tone_negative = 0 if @automated_metareview.tone_negative.to_f < 0
    @automated_metareview.tone_neutral = 0 if @automated_metareview.tone_neutral.to_f < 0
    # creating the arrays to be graphed
    current_metareview_data = [@automated_metareview.relevance.to_f, @automated_metareview.content_summative.to_f,
                               @automated_metareview.content_problem.to_f, @automated_metareview.content_advisory.to_f,
                               @automated_metareview.tone_positive.to_f,
                               @automated_metareview.tone_negative.to_f, @automated_metareview.tone_neutral.to_f]

    existing_metareview_data = [avg_existing_metareviews.relevance.to_f, avg_existing_metareviews.summative.to_f,
                                avg_existing_metareviews.problem.to_f, avg_existing_metareviews.advisory.to_f, avg_existing_metareviews.positive.to_f,
                                avg_existing_metareviews.negative.to_f, avg_existing_metareviews.neutral.to_f]

    color1 = 'c53711'
    color2 = '0000ff'
    # labels in reverse order of content being displayed
    names_array = ["Neutral Tone", "Negative Tone", "Positive Tone", "Advisory Content", "Problem Content", "Summative Content", "Relevance"]
    GoogleChart::BarChart.new("500x450", "Your work Vs Average performance on reviews", :horizontal, false) do |bc|
      bc.data "Your work", current_metareview_data, color1
      bc.data "Avg. performance on reviews", existing_metareview_data, color2
      bc.axis :y, labels: names_array, font_size: 10
      bc.axis :x, range: [0, 1]
      bc.show_legend = true
      bc.stacked = false
      bc.data_encoding = :extended
      bc.shape_marker :circle, color: '00ff00', data_set_index: 0, data_point_index: -1, pixel_size: 10
      @graph = bc.to_url
    end
  end
end