Wrap text
module VotedFor
def votes
@votes = logged_in? ? current_user.votes : (session[:votes] ? Vote.find(session[:votes]) : [])
end
def add_session_vote(vote)
(session[:votes] ||= []) << vote.id unless logged_in?
end
def remove_session_vote(vote)
Vote.find(session[:votes]).delete_if{|v| v[:ballot_candidate_id] == vote[:ballot_candidate_id]} if !logged_in? && !session[:votes].nil?
end
# pass {:type => 'ballot', :id => 1234}
def voted?(opts)
logged_in? ? (return user_voted?(opts)) : (return anonymously_voted?(opts))
end
def anonymously_voted?(opts)
Vote.find(session[:votes]).each{|v| return v if v["#{opts[:type]}_id"] == opts[:id] } unless session[:votes].nil?
nil
end
def user_voted?(opts)
return current_user.votes.find(:first, :conditions => "#{opts[:type]}_id = #{opts[:id]}")
nil
end
def update_logged_out_votes
if logged_in? && !session[:votes].nil?
Vote.find(session[:votes]).each do |vote|
if anonymously_voted?({:type => :ballot, :id => vote.ballot_candidate_id}).nil?
vote.update_attribute(:user_id, current_user.id)
else
vote.destroy
end
remove_session_vote(vote)
end
end
end
end