make_flaggable

[Unmaintained] User-centric flagging system for Rails 3 applications.

MIT License

Downloads
9.2K
Stars
91
Committers
11

= MakeFlaggable

MakeFlaggable is an extension for building a user-centric flagging system for Rails 3 and 4 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 MakeFlaggable to your Gemfile

gem 'make_flaggable'

afterwards execute

bundle install

generate the required migration file

rails generate make_flaggable

migrate the database

rake db:migrate

== Usage

Specify a model that can be flagged.

class Article < ActiveRecord::Base make_flaggable end

Specify a model that can flag another model.

class User < ActiveRecord::Base make_flagger end

You can specify that a flagger can only flag a flaggable once.

class User < ActiveRecord::Base make_flagger :flag_once => true end

The user can now flag the flaggable.

If the user already flagged the flaggable and :flag_once was set then an AlreadyFlaggedError is raised.

user.flag!(article, reason)

The method without bang(!) does not raise the AlreadyFlaggedError when the user flags the flaggable more than once.

Instead it just returns false and ignores the flagging.

If :flag_once was not set then this method behaves like flag! method.

user.flag(article, reason)

The user may unflag an already done flagging.

If the user never flagged the flaggable then an NotFlaggedError is raised.

user.unflag!(article)

The method without bang(!) does not raise the NotFlaggedError, but just returns false if the user never flagged

the flaggable.

user.unflag(article)

Get all flaggings of a flaggable.

article.flaggings

Get the flagging with a specified flag.

article.flaggings.with_flag(:flag_name)

Get the flagger of the flagging.

flagging = article.flaggings.with_flag(:flag_name).first user = flagging.flagger

Returns true if the flagger flagged the flaggable, false otherwise.

user.flagged?(article, :flag_name)

Get the reason of a flagging.

flagging = article.flaggings.first flagging.reason

Get the flagger of the flagging.

flagging = article.flaggings.first user = flagging.flagger

Returns true if the flagger flagged the flaggable, false otherwise.

user.flagged?(article)

Return true if the flaggable was flagged by the flagger, false otherwise.

article.flagged_by?(user)

Returns true if the article was flagged by any flagger at all, false otherwise.

article.flagged?

Flaggings can also be accessed by its flagger.

flagger.flaggings

In order to obtain all flaggers of a resource, the flaggers method can be invoked on the class

Passing no argument would return flaggers that have flagged across any flaggable resource

User.flaggers

An optional argument can be passed, restricting the detection to a particular resource

User.flaggers(Article)

== Testing

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

rake spec

or simply

rake

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