README.md


# Votex

**Implements vote / like / follow functionality for Ecto models**
> Inspired from [acts_as_votable][acts_as_votable] in ROR

[acts_as_votable]: https://github.com/ryanto/acts_as_votable

### Features

  - Any model can be voted
  - Any model can vote
  - Easy to understand syntax

### Installation

Add Votex to your project dependencies `mix.exs`
```
defp deps do
  [{:votex, "~> 0.1.0"}]
end
```
Specify your root project's repo in config
```
config :votex, Votex.DB,
	repo: MyApp.Repo
```
Votex needs a table in DB to store votes information
Install votex and generate votex schema migration
```
mix deps.get
mix votex.gen.migration
mix ecto.migrate
```

### Usage
##### Configure Models
```
defmodule User do
	use Ecto.Schema
    use Votex.Voter
end

defmodule Post do
	use Ecto.Schema
	use Votex.Votable
end
```
#### Vote / Unvote
```
post |> Post.vote_by user
user |> User.voted_for? post
# true
post |> Post.votes_for |> length
# 1

post |> Post.votes_for
[
  %{
    id: 1,
    votable_id: 3,
    votable_type: "posts",
    voter: %Sample.User{
      id: 5,
      name: "John"
    },
    voter_id: 5,
    voter_type: "users"
  }
]

post |> Post.unvote_by user
```