class Card::Eventable::SystemCommenter 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" "#{event.creator.name} assigned this to #{event.assignees.pluck(:name).to_sentence}." when "card_unassigned" "#{event.creator.name} unassigned from #{event.assignees.pluck(:name).to_sentence}." when "card_closed" "Moved to “Done” by #{event.creator.name}" when "card_reopened" "Reopened by #{event.creator.name}" when "card_postponed" "#{event.creator.name} moved this to “Not Now”" when "card_auto_postponed" "Moved to “Not Now” due to inactivity" when "card_title_changed" "#{event.creator.name} changed the title from “#{event.particulars.dig('particulars', 'old_title')}” to “#{event.particulars.dig('particulars', 'new_title')}”." when "card_board_changed" "#{event.creator.name} moved this from “#{event.particulars.dig('particulars', 'old_board')}” to “#{event.particulars.dig('particulars', 'new_board')}”." when "card_triaged" "#{event.creator.name} moved this to “#{event.particulars.dig('particulars', 'column')}”" when "card_sent_back_to_triage" "#{event.creator.name} moved this back to “Maybe?”" end end end