consul/consul

View on GitHub
app/controllers/notifications_controller.rb

Summary

Maintainability
A
0 mins
Test Coverage
class NotificationsController < ApplicationController
  before_action :authenticate_user!
  skip_authorization_check

  respond_to :html, :js

  def index
    @notifications = current_user.notifications.unread
  end

  def show
    @notification = current_user.notifications.find(params[:id])
    @notification.mark_as_read
    redirect_to linkable_resource_path(@notification), allow_other_host: true
  end

  def read
    @notifications = current_user.notifications.read
  end

  def mark_all_as_read
    current_user.notifications.unread.each(&:mark_as_read)
    redirect_to notifications_path
  end

  def mark_as_read
    @notification = current_user.notifications.find(params[:id])
    @notification.mark_as_read
  end

  def mark_as_unread
    @notification = current_user.notifications.find(params[:id])
    @notification.mark_as_unread
  end

  private

    def linkable_resource_path(notification)
      if notification.linkable_resource.is_a?(AdminNotification)
        notification.linkable_resource.link || notifications_path
      else
        polymorphic_path(notification.linkable_resource)
      end
    end
end