Class: SimpleDiscussion::ForumPostNotificationJob

Inherits:
ApplicationJob
  • Object
show all
Defined in:
app/jobs/simple_discussion/forum_post_notification_job.rb

Instance Method Summary collapse

Instance Method Details

#perform(forum_post) ⇒ Object



4
5
6
7
# File 'app/jobs/simple_discussion/forum_post_notification_job.rb', line 4

def perform(forum_post)
  send_emails(forum_post) if SimpleDiscussion.send_email_notifications
  send_webhook(forum_post) if SimpleDiscussion.send_slack_notifications
end

#send_emails(forum_post) ⇒ Object



9
10
11
12
13
14
15
# File 'app/jobs/simple_discussion/forum_post_notification_job.rb', line 9

def send_emails(forum_post)
  forum_thread = forum_post.forum_thread
  users = forum_thread.subscribed_users - [forum_post.user]
  users.each do |user|
    SimpleDiscussion::UserMailer.new_post(forum_post, user).deliver_later
  end
end

#send_webhook(forum_post) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'app/jobs/simple_discussion/forum_post_notification_job.rb', line 17

def send_webhook(forum_post)
  slack_webhook_url = Rails.application.secrets.simple_discussion_slack_url
  return if slack_webhook_url.blank?

  forum_thread = forum_post.forum_thread
  payload = {
    fallback: "#{forum_post.user.name} replied to <#{forum_thread_url(forum_thread, anchor: ActionView::RecordIdentifier.dom_id(forum_post))}|#{forum_thread.title}>",
    pretext: "#{forum_post.user.name} replied to <#{forum_thread_url(forum_thread, anchor: ActionView::RecordIdentifier.dom_id(forum_post))}|#{forum_thread.title}>",
    fields: [
      {
        title: "Thread",
        value: forum_thread.title,
        short: true
      },
      {
        title: "Posted By",
        value: forum_post.user.name,
        short: true
      }
    ],
    ts: forum_post.created_at.to_i
  }

  SimpleDiscussion::Slack.new(slack_webhook_url).post(payload)
end