jnaqsh/nerdnews

View on GitHub
app/controllers/votes_controller.rb

Summary

Maintainability
A
1 hr
Test Coverage
#encoding: utf-8

class VotesController < ApplicationController
  load_and_authorize_resource

  def create
    begin
      @rating         = Rating.find(votes_params[:rating_id])
      @user           = current_user
      @vote           = Vote.new()
      voteable_helper = VoteableHelper.new(votes_params, @vote)
      @voteable       = voteable_helper.voteable_object
      @vote.voteable  = @voteable
      @vote.rating    = @rating
      @vote.user      = @user
    rescue ActiveRecord::RecordNotFound
      redirect_to stories_path, flash:{error: t('controllers.votes.create.flash.error')}
      return
    end

    type = votes_params[:positive].present? and votes_params[:positive] == true

    respond_to do |format|
      if @vote.save
        record_log(@voteable, @vote)

        voteable_helper.increment_votes_count(type)
        voteable_helper.calculate_total_point
        rate_user 1
        format.html { redirect_to story_path(@voteable), notice: t('controllers.votes.create.flash.success') }
        format.js
      else
        format.html { redirect_to story_path(@voteable), flash:{error: t('controllers.votes.create.flash.error')} }
      end
    end
  end

private
  def record_log(voteable, vote)
    vote = vote.reload

    if voteable.class.name == "Story"
      record_activity %Q(به خبر #{view_context.link_to voteable.title.truncate(40), story_path(voteable)} امتیاز #{vote.rating.name} را داد)
    elsif voteable.class.name == "Comment"
      record_activity %Q(به دیدگاه #{view_context.link_to voteable.content.truncate(40), story_path(voteable.story, :anchor => "comment_#{voteable.id}")} امتیاز #{vote.rating.name} را داد)
    end
  end

  def votes_params
    # params.permit!
    params.permit(:positive, :rating_id, :voteable, :controller, :story_id, :comment_id)
  end
end