Skip to content

mirego/parole

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.