make_voteable icon indicating copy to clipboard operation
make_voteable copied to clipboard

[Unmaintained] User-centric voting system for Rails 3 applications

= MakeVoteable

MakeVoteable is an extension for building a user-centric voting system for Rails 3 applications. It currently supports ActiveRecord models.

  • This repository is unfortunately no longer maintained. If this library is still relevant and you want to maintain it, I am happy to hand this repository over.

== Installation

add MakeVoteable to your Gemfile

gem 'make_voteable'

afterwards execute

bundle install

generate the required migration file

rails generate make_voteable

also add +up_votes+ and +down_votes+ columns to the voter (e.g. User) and voteable (e.g. Question) model migrations

add_column :users, :up_votes, :integer, :null => false, :default => 0 add_column :users, :down_votes, :integer, :null => false, :default => 0 add_column :questions, :up_votes, :integer, :null => false, :default => 0 add_column :questions, :down_votes, :integer, :null => false, :default => 0

migrate the database

rake db:migrate

== Usage

Specify a voteable model.

class Question < ActiveRecord::Base make_voteable end

Specify a voter model.

class User < ActiveRecord::Base make_voter end

Votes up the question by the user.

If the user already voted the question up then an AlreadyVotedError is raised.

If the same user already voted the question down then the vote is changed to an up vote.

user.up_vote(question)

Votes the question up, but without raising an AlreadyVotedError when the user

already voted the question up (it just ignores the vote).

user.up_vote!(question)

Votes down the question by the user.

If the user already voted the question down then an AlreadyVotedError is raised.

If the same user already voted the question up then the vote is changed to an down vote.

user.down_vote(question)

Votes the question down, but without raising an AlreadyVotedError when the user

already voted the question down (it just ignores the vote).

user.down_vote!(question)

Clears a already done vote by an user.

If the user didn't vote for the question then a NotVotedError is raised.

user.unvote(question)

Does not raise a NotVotedError if the user didn't vote for the question

(it just ignores the unvote).

user.unvote!(question)

The number of up votes for this question.

question.up_votes

The number of down votes for this question.

question.down_votes

The number of up votes the user did.

user.up_votes

The number of down votes the user did.

user.down_votes

up votes - down votes (may also be negative if there are more down votes than up votes)

question.votes

Returns true if the question was voted by the user

user.voted?(question)

Returns true if the question was up voted by the user, false otherwise

user.up_voted?(question)

Returns true if the question was down voted by the user, false otherwise

user.down_voted?(question)

Access votings through voter

voting = user.votings.first voting.up_vote? # true if up vote, false if down vote

Access votings through voteable

voting = question.votings.first voting.up_vote? # true if up vote, false if down vote

== Testing

MakeVoteable uses RSpec for testing and has a rake task for executing the provided specs

rake spec

Copyright © 2010-2011 Kai Schlamp (http://www.medihack.org), released under the MIT license