Project

parole

0.0
No commit activity in last 3 years
No release in over 3 years
Parole adds the ability to comment on ActiveRecord models.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0
~> 2.14

Runtime

 Project Readme

Parole
Parole adds the ability to comment on ActiveRecord records.


Installation

Add this line to your application's Gemfile:

gem 'parole'

Then run the task to generate the migration:

$ rails generate parole:install

Usage

You should now be able to mark models as commentable:

class Article < ActiveRecord::Base
  acts_as_commentable
end

You’re pretty much done after that. You’re now able to do this:

user = User.find(1)
article = Article.find(1)

article.comments.create(commenter: user, comment: 'Hello world!')
article.comments.count # => 1

You can also provide roles for comments, so you can have multiple type of comments per record.

class Article < ActiveRecord::Base
  acts_as_commentable roles: [:photos, :videos]
end

user = User.find(1)
article = Article.find(1)

article.photos_comments.create(commenter: user, comment: 'Hello world!')
article.photos_comments.count # => 1
article.comments.count # => 1

Cache counters

Whenever a comment is created or destroyed, Parole looks into the commentable record and the commenter record and check if there’s a <role>_comments_count column and/or a comments_count column. If so, it updates them so they reflect the total number of comments and the number of comments of this role for the record.

Note: The commenter model must implements a has_many relationship that fetch its comments.

So let’s say the Article model has the following columns: photos_comments_count, videos_comments_count and comments_count, and the User model has the following column: comments_count.

class Article < ActiveRecord::Base
  acts_as_commentable roles: [:photos, :videos]
end
class User < ActiveRecord::Base
  has_many :comments, -> { where(commenter_type: 'User') }, foreign_key: :commenter_id
end

user = User.find(1)
article = Article.find(1)

article.photos_comments.create(commenter: user, comment: 'Hello world!')
article.photos_comments_count # => 1
article.videos_comments_count # => 0
article.comments_count # => 1
user.comments_count # => 1

article.videos_comments.create(commenter: user, comment: 'Hello world again!')
article.photos_comments_count # => 1
article.videos_comments_count # => 1
article.comments_count # => 2
user.comments_count # => 2

License

Parole is © 2013-2015 Mirego and may be freely distributed under the New BSD license. See the LICENSE.md file.

About Mirego

Mirego is a team of passionate people who believe that work is a place where you can innovate and have fun. We're a team of talented people who imagine and build beautiful Web and mobile applications. We come together to share ideas and change the world.

We also love open-source software and we try to give back to the community as much as we can.