class Card::Eventable::SystemCommenter
include ERB::Util
attr_reader :card, :event
def initialize(card, event)
@card, @event = card, event
end
def comment
return unless comment_body.present?
card.comments.create! creator: card.account.system_user, body: comment_body, created_at: event.created_at
end
private
def comment_body
case event.action
when "card_assigned"
"#{creator_name} assigned this to #{assignee_names}."
when "card_unassigned"
"#{creator_name} unassigned from #{assignee_names}."
when "card_closed"
"Moved to “Done” by #{creator_name}"
when "card_reopened"
"Reopened by #{creator_name}"
when "card_postponed"
"#{creator_name} moved this to “Not Now”"
when "card_auto_postponed"
"Moved to “Not Now” due to inactivity"
when "card_title_changed"
"#{creator_name} changed the title from “#{old_title}” to “#{new_title}”."
when "card_board_changed"
"#{creator_name} moved this from “#{old_board}” to “#{new_board}”."
when "card_triaged"
"#{creator_name} moved this to “#{column}”"
when "card_sent_back_to_triage"
"#{creator_name} moved this back to “Maybe?”"
end
end
def creator_name
h event.creator.name
end
def assignee_names
h event.assignees.pluck(:name).to_sentence
end
def old_title
h event.particulars.dig("particulars", "old_title")
end
def new_title
h event.particulars.dig("particulars", "new_title")
end
def old_board
h event.particulars.dig("particulars", "old_board")
end
def new_board
h event.particulars.dig("particulars", "new_board")
end
def column
h event.particulars.dig("particulars", "column")
end
end