refactors voted debates
This commit is contained in:
@@ -37,7 +37,7 @@ class ApplicationController < ActionController::Base
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_voted_values(debates_ids)
|
def set_debate_votes(debates)
|
||||||
@voted_values = current_user ? current_user.votes_on_debates(debates_ids) : {}
|
@voted_values = current_user ? current_user.debate_votes(debates) : {}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -3,17 +3,12 @@ class DebatesController < ApplicationController
|
|||||||
load_and_authorize_resource
|
load_and_authorize_resource
|
||||||
|
|
||||||
def index
|
def index
|
||||||
if params[:tag]
|
@debates = Debate.search(params)
|
||||||
@debates = Debate.tagged_with(params[:tag]).order(id: :desc)
|
set_debate_votes(@debates)
|
||||||
set_voted_values @debates.map(&:id)
|
|
||||||
else
|
|
||||||
@debates = Debate.all.order(id: :desc)
|
|
||||||
set_voted_values @debates.map(&:id)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
set_voted_values [@debate.id]
|
set_debate_votes(@debate)
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
@@ -40,7 +35,7 @@ class DebatesController < ApplicationController
|
|||||||
|
|
||||||
def vote
|
def vote
|
||||||
@debate.vote_by(voter: current_user, vote: params[:value])
|
@debate.vote_by(voter: current_user, vote: params[:value])
|
||||||
set_voted_values [@debate.id]
|
set_debate_votes(@debate)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ class WelcomeController < ApplicationController
|
|||||||
skip_authorization_check
|
skip_authorization_check
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@featured_debates = Debate.order("created_at DESC").limit(9)
|
@featured_debates = Debate.limit(9)
|
||||||
set_voted_values @featured_debates.map(&:id)
|
set_debate_votes(@featured_debates)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
@@ -13,12 +13,9 @@ class User < ActiveRecord::Base
|
|||||||
use_nickname? ? nickname : "#{first_name} #{last_name}"
|
use_nickname? ? nickname : "#{first_name} #{last_name}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def votes_on_debates(debates_ids = [])
|
def debate_votes(debates)
|
||||||
debates_ids = debates_ids.flatten.compact.uniq
|
voted = votes.for_debates.in(debates)
|
||||||
return {} if debates_ids.empty?
|
voted.each_with_object({}) { |v,_| _[v.votable_id] = v.value }
|
||||||
|
|
||||||
voted = votes.where("votable_type = ? AND votable_id IN (?)", "Debate", debates_ids)
|
|
||||||
voted.each_with_object({}){ |v,_| _[v.votable_id] = v.vote_flag }
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def administrator?
|
def administrator?
|
||||||
|
|||||||
13
config/initializers/vote_extensions.rb
Normal file
13
config/initializers/vote_extensions.rb
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
ActsAsVotable::Vote.class_eval do
|
||||||
|
def self.for_debates
|
||||||
|
where(votable_type: 'Debate')
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.in(debates)
|
||||||
|
where(votable_id: debates)
|
||||||
|
end
|
||||||
|
|
||||||
|
def value
|
||||||
|
vote_flag
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -2,13 +2,11 @@ require 'rails_helper'
|
|||||||
|
|
||||||
describe User do
|
describe User do
|
||||||
|
|
||||||
describe "#votes_on_debates" do
|
describe "#debate_votes" do
|
||||||
let(:user) { create(:user) }
|
let(:user) { create(:user) }
|
||||||
|
|
||||||
it "returns {} if no debate" do
|
it "returns {} if no debate" do
|
||||||
expect(user.votes_on_debates()).to eq({})
|
expect(user.debate_votes([])).to eq({})
|
||||||
expect(user.votes_on_debates([])).to eq({})
|
|
||||||
expect(user.votes_on_debates([nil, nil])).to eq({})
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns a hash of debates ids and votes" do
|
it "returns a hash of debates ids and votes" do
|
||||||
@@ -18,7 +16,7 @@ describe User do
|
|||||||
create(:vote, voter: user, votable: debate1, vote_flag: true)
|
create(:vote, voter: user, votable: debate1, vote_flag: true)
|
||||||
create(:vote, voter: user, votable: debate3, vote_flag: false)
|
create(:vote, voter: user, votable: debate3, vote_flag: false)
|
||||||
|
|
||||||
voted = user.votes_on_debates([debate1.id, debate2.id, debate3.id])
|
voted = user.debate_votes([debate1, debate2, debate3])
|
||||||
|
|
||||||
expect(voted[debate1.id]).to eq(true)
|
expect(voted[debate1.id]).to eq(true)
|
||||||
expect(voted[debate2.id]).to eq(nil)
|
expect(voted[debate2.id]).to eq(nil)
|
||||||
|
|||||||
46
spec/models/vote_spec.rb
Normal file
46
spec/models/vote_spec.rb
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
describe 'Vote' do
|
||||||
|
|
||||||
|
describe '#for_debates' do
|
||||||
|
it 'returns votes for debates' do
|
||||||
|
debate = create(:debate)
|
||||||
|
create(:vote, votable: debate)
|
||||||
|
|
||||||
|
expect(Vote.for_debates.count).to eq(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not returns votes for other votables' do
|
||||||
|
comment = create(:comment)
|
||||||
|
create(:vote, votable: comment)
|
||||||
|
|
||||||
|
expect(Vote.for_debates.count).to eq(0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#in' do
|
||||||
|
it 'returns debates send in parameters' do
|
||||||
|
debate = create(:debate)
|
||||||
|
create(:vote, votable: debate)
|
||||||
|
|
||||||
|
expect(Vote.in(debate).count).to eq(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not return debates not in parameters' do
|
||||||
|
debate = create(:debate)
|
||||||
|
create(:vote, votable: debate)
|
||||||
|
|
||||||
|
expect(Vote.in([]).count).to eq(0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#value' do
|
||||||
|
it 'returns vote flag' do
|
||||||
|
vote = create(:vote, vote_flag: true)
|
||||||
|
expect(vote.value).to eq(true)
|
||||||
|
|
||||||
|
vote = create(:vote, vote_flag: false)
|
||||||
|
expect(vote.value).to eq(false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user