/notifications

Notifications Center engine like GitHub or other application for any Rails applications.

Primary LanguageRubyMIT LicenseMIT

Notifications

Rails mountable Notification for any applications.

Gem Version Build Status Code Climate codecov.io

Example:

2016-03-29 10 48 16

Installation

# Gemfile
gem 'notifications'

And then run bundle install.

Now you have notifications generator in Rails application:

$ rails g notifications:install

And, you can generate views, controller if you need custom them:

$ rails g notifications:views
$ rails g notifications:controllers

Usage

Create a Notification

class User
  def follow(user)
    Notification.create(notify_type: 'follow', actor: self, user: user)
  end
end

class Comment
  belongs_to :post
  belongs_user :user

  after_commit :create_notifications, on: [:create]
  def create_notifications
    Notification.create(
      notify_type: 'comment',
      actor: self.user,
      user: self.post.user,
      target: self)
  end
end

Get user unread count:

count = Notification.unread_count(current_user)

Write your custom Notification partial view for notify_types:

If you create a notify_type, you need add a partial view in app/views/notifications/ path, for example:

# There have two notify_type
Notification.create(notify_type: 'follow' ....)
Notification.create(notify_type: 'mention', target: @reply, second_target: @topic, ....)

You app must be have:

  • app/views/notifications/_follow.html.erb
  • app/views/notifications/_mention.html.erb
# app/views/notifications/_follow.html.erb
<div class="media-heading">
  <%= link_to notification.actor.title, notification.actor %> just followed you.
</div>
# app/views/notifications/_mention.html.erb
<div class="media-heading">
  <%= link_to notification.actor.title, notification.actor %> has mention you in
  <%= link_to notification.second_target.title, topic_path(notification.second_target) %>
</div>
<div class="media-content">
  <%= notification.target.body %>
</div>

About Notification template N+1 performance

Suggest you to use second_level_cache for solve N+1 performance issue.

Contributing

Contribution directions go here.

Site Used

License

The gem is available as open source under the terms of the MIT License.