mezuro_plugin_profile_controller.rb 2.73 KB
class MezuroPluginProfileController < ProfileController

  append_view_path File.join(File.dirname(__FILE__) + '/../views')

  rescue_from Exception do |exception|
    message = URI.escape(CGI.escape(exception.message),'.')
    redirect_to_error_page message
  end

  def error_page
    @message = params[:message]
  end

  def project_state
    @content = profile.articles.find(params[:id])
    project = @content.project
    redirect_to_error_page(project.errors[0].message) if not project.errors.empty?
    state = project.kalibro_error.nil? ? project.state : "ERROR"
    render :text => state
  end

  def project_error
    @content = profile.articles.find(params[:id])
    @project = @content.project
    render :partial => 'content_viewer/project_error'
  end

  def project_result
    @content = profile.articles.find(params[:id])
    date = params[:date]
    @project_result = date.nil? ? @content.project_result : @content.project_result_with_date(date)
    render :partial => 'content_viewer/project_result'
  end 	

  def module_result
    @content = profile.articles.find(params[:id])
    @module_result = @content.module_result(params)
    render :partial => 'content_viewer/module_result'
  end

  def project_tree
    @content = profile.articles.find(params[:id])
    date = params[:date]
    project_result = date.nil? ? @content.project_result : @content.project_result_with_date(date)
    @project_name = @content.project.name
    @source_tree = project_result.node_of(params[:module_name])
    render :partial =>'content_viewer/source_tree'
  end

  def module_metrics_history
    metric_name = params[:metric_name]
    @content = profile.articles.find(params[:id])
    module_history = @content.result_history(params[:module_name])
    @score_history = filtering_metric_history(metric_name, module_history)
    render :partial => 'content_viewer/score_history'
  end

  def module_grade_history
    @content = profile.articles.find(params[:id])
    modules_results = @content.result_history(params[:module_name])
    @score_history = modules_results.collect { |module_result| module_result.grade }
    render :partial => 'content_viewer/score_history'
  end
  
  private
  
  def filtering_metric_history(metric_name, module_history)
    metrics_history = module_history.map do |module_result|
      module_result.metric_results
    end
    metric_history =  metrics_history.map do |array_of_metric_result|
      (array_of_metric_result.select do |metric_result|
        metric_result.metric.name.delete("() ") == metric_name
      end).first
    end
    metric_history.map do |metric_result|
      metric_result.value
    end
  end

  def redirect_to_error_page(message)
    redirect_to "/profile/#{profile.identifier}/plugin/mezuro/error_page?message=#{message}"
  end

end