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 }, "leave.team_notice" => { bell: true, email: true, leadership_email: false, leadership_bell: false }, "comp_off.requested" => { bell: true, email: false, leadership_email: true, leadership_bell: true }, "comp_off.approved" => { bell: true, email: true, leadership_email: true, leadership_bell: false }, "comp_off.rejected" => { bell: true, email: true, leadership_email: false, leadership_bell: false }, "comp_off.cancelled" => { bell: true, email: false, leadership_email: true, leadership_bell: false }, "regularization.requested" => { bell: true, email: false, leadership_email: true, leadership_bell: false }, "regularization.approved" => { bell: true, email: true, leadership_email: true, leadership_bell: false }, "regularization.rejected" => { bell: true, email: true, leadership_email: false, leadership_bell: false }, "regularization.cancelled" => { bell: true, email: false, leadership_email: true, leadership_bell: false } }.freeze
Class Method Summary collapse
-
.matrix ⇒ Object
DEFAULT under the host override: a host matrix pinned on an older gem version keeps working when new events ship (rows it doesn't know about fall back to the defaults instead of vanishing).
- .publish(event, title:, body: nil, path: nil, bell_to: [], email_to: [], lines: [], diff: nil, link_url: nil) ⇒ Object
Class Method Details
.matrix ⇒ Object
DEFAULT under the host override: a host matrix pinned on an older gem version keeps working when new events ship (rows it doesn't know about fall back to the defaults instead of vanishing).
48 49 50 |
# File 'lib/hr_lite/notifications.rb', line 48 def matrix DEFAULT_MATRIX.merge(HrLite.config.notification_matrix || {}) end |
.publish(event, title:, body: nil, path: nil, bell_to: [], email_to: [], lines: [], diff: nil, link_url: nil) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/hr_lite/notifications.rb', line 52 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 |