The neeto-comments-nano
manages comments within an application, notifying mentioned users via email based on their preferences.
Contents
- Development with Host Application
- Instructions for Publishing
Development with Host Application
Engine
The engine handles the backend of the comments table and notifies preferred users via email upon the creation of a new comment.
Installation
-
Add this line to your application's Gemfile:
source "NEETO_GEM_SERVER_URL" do
gem "neeto-comments-engine"
end
-
And then execute:
bundle install
-
Add this line to your application's config/routes.rb
file:
mount NeetoCommentsEngine::Engine => "/neeto_comments_engine"
-
Run the command to bring in all migrations required from the engine to the host application:
bundle exec rails neeto_comments_engine:install:migrations
-
Add the migrations to the database:
bundle exec rails db:migrate
Usage
Model
This model has the following polymorphic associations
belongs_to :commentable, polymorphic: true
belongs_to :creator, polymorphic: true
Here, commentable
is the entity for which we add a comment.
For example, In NeetoPlanner
, Task
is a commentable entity. We can add comments in a Task as follows:
has_many :comments, as: :commentable, dependent: :destroy
Similarly creator
is the entity which created the comment.
In the host app, we can use the Comment
model by inheriting from it as follows:
class Comment < NeetoCommentsEngine::Comment
self.table_name = "neeto_comments_engine_comments"
end
The following methods are required in the inherited model of the host app to notify users mentioned in the comment as soon as a comment is created:
def email_data
{
preference_link:,
organization_name:,
link_title:,
subject:,
reply_to:
}
end
The get_mentioned_ids_from_content
method returns the list of ids of the mentioned users that needs to be notified and can be used as follows:
def notifiable_users
user_list = get_mentioned_ids_from_content(content)
User.where(id: user_list)
end
Controllers
In the host app, we can inherit the CommentsController
as follows:
class Api::V1::CommentsController < NeetoCommentsEngine::Api::V1::CommentsController
private
def load_commentable!
end
end
Concern
Include the following concern to the commentable
model
include NeetoCommentsEngine::NotificationPreferences
The notify_mentioned_user?(user)
returns a boolean value which decides whether to send email to that user or not. By default the method returns true
. This can be overriden by the host application.
def notify_mentioned_user?(user)
true
end
The notify_mentions_via_email?
returns a boolean value which decides whether to send email for that commentable entity or not. By default the method returns true
. This can be overriden by the host application.
def notify_mentions_via_email?
true
end
Instructions for Publishing
Consult the building and releasing packages guide for details on how to publish.