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
- .matrix ⇒ Object
- .publish(event, title:, body: nil, path: nil, bell_to: [], email_to: [], lines: [], diff: nil, link_url: nil) ⇒ Object
Class Method Details
.matrix ⇒ Object
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 |