Module: HrLite::Notifications

Defined in:
lib/hr_lite/notifications.rb

Overview

Central event bus. Domain code publishes an event; the per-event channel row (host-overridable via config.notification_matrix) decides which channels fire. Channel semantics:

bell:             in-app notification (config.notify) to `bell_to` users
email:            EventMailer to each `email_to` user
leadership_email: ONE email to every configured leadership address
leadership_bell:  in-app notification to each leadership user record

Recipients are computed by the publishing site (it knows the domain); the matrix is purely the on/off routing table.

Constant Summary collapse

DEFAULT_MATRIX =
{
  "leave.requested"       => { bell: true,  email: false, leadership_email: true,  leadership_bell: true  },
  "leave.approved"        => { bell: true,  email: true,  leadership_email: true,  leadership_bell: false },
  "leave.rejected"        => { bell: true,  email: true,  leadership_email: true,  leadership_bell: false },
  "leave.cancelled"       => { bell: true,  email: false, leadership_email: true,  leadership_bell: false },
  "attendance.flagged"    => { bell: true,  email: false, leadership_email: false, leadership_bell: false },
  "attendance.regularized" => { bell: true, email: true,  leadership_email: true,  leadership_bell: false },
  "payroll.finalized"     => { bell: false, email: false, leadership_email: true,  leadership_bell: true  },
  "payroll.published"     => { bell: true,  email: true,  leadership_email: true,  leadership_bell: false },
  "kudos.mentioned"       => { bell: true,  email: true,  leadership_email: false, leadership_bell: false },
  "appraisal.shared"      => { bell: true,  email: true,  leadership_email: true,  leadership_bell: false },
  "promotion.recorded"    => { bell: true,  email: true,  leadership_email: true,  leadership_bell: true  },
  "policy.changed"        => { bell: false, email: false, leadership_email: true,  leadership_bell: true  },
  "digest.daily"          => { bell: false, email: false, leadership_email: true,  leadership_bell: false },
  "resignation.submitted" => { bell: true,  email: false, leadership_email: true,  leadership_bell: true  },
  "resignation.accepted"  => { bell: true,  email: true,  leadership_email: true,  leadership_bell: false },
  "resignation.withdrawn" => { bell: true,  email: false, leadership_email: true,  leadership_bell: false },
  "employee.onboarded"    => { bell: true,  email: true,  leadership_email: true,  leadership_bell: false },
  "payroll.draft_ready"   => { bell: false, email: false, leadership_email: true,  leadership_bell: true  }
}.freeze

Class Method Summary collapse

Class Method Details

.matrixObject



36
37
38
# File 'lib/hr_lite/notifications.rb', line 36

def matrix
  HrLite.config.notification_matrix || DEFAULT_MATRIX
end

.publish(event, title:, body: nil, path: nil, bell_to: [], email_to: [], lines: [], diff: nil, link_url: nil) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/hr_lite/notifications.rb', line 40

def publish(event, title:, body: nil, path: nil, bell_to: [], email_to: [], lines: [], diff: nil, link_url: nil)
  row = matrix[event.to_s]
  unless row
    Rails.logger.warn("[hr_lite] unknown notification event #{event}")
    return
  end

  deliver_bells(event, row, bell_to, title, body, path)
  deliver_emails(row, email_to, title, body, path, lines, link_url)
  deliver_leadership_email(event, row, title, body, path, lines, diff)
  deliver_leadership_bells(event, row, bell_to, title, body, path)
  nil
end