[Unmaintained] User-centric flagging system for Rails 3 applications.
Ruby
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
gemfiles
lib
spec
.gitignore
.travis.yml
Appraisals
Gemfile
MIT-LICENSE
README.rdoc
Rakefile
make_flaggable.gemspec

README.rdoc

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 (www.medihack.org), released under the MIT license