Add an event prefix named after the model now that events are generic

This commit is contained in:
Jorge Manrubia
2025-04-24 13:20:09 +02:00
parent b746987712
commit 18cc24e1d3
12 changed files with 64 additions and 60 deletions
+21 -21
View File
@@ -1,9 +1,9 @@
module EventsHelper
def event_column(event)
case event.action
when "closed"
when "card_closed"
3
when "published"
when "card_published"
1
else
2
@@ -32,9 +32,9 @@ module EventsHelper
def render_column_headers(day_timeline)
headers = {
"Added" => day_timeline.events.where(action: "published").count,
"Added" => day_timeline.events.where(action: "card_published").count,
"Updated" => nil,
"Closed" => day_timeline.events.where(action: "closed").count
"Closed" => day_timeline.events.where(action: "card_closed").count
}
headers.map do |header, count|
@@ -45,46 +45,46 @@ module EventsHelper
def event_action_sentence(event)
case event.action
when "assigned"
when "card_assigned"
if event.assignees.include?(Current.user)
"#{ event.creator == Current.user ? "You" : event.creator.name } will handle <span style='color: var(--card-color)'>#{ event.eventable.title }</span>".html_safe
else
"#{ event.creator == Current.user ? "You" : event.creator.name } assigned #{ event.assignees.pluck(:name).to_sentence } to <span style='color: var(--card-color)'>#{ event.eventable.title }</span>".html_safe
end
when "unassigned"
when "card_unassigned"
"#{ event.creator == Current.user ? "You" : event.creator.name } unassigned #{ event.assignees.include?(Current.user) ? "yourself" : event.assignees.pluck(:name).to_sentence } from <span style='color: var(--card-color)'>#{ event.eventable.title }</span>".html_safe
when "commented"
when "card_commented"
"#{ event.creator == Current.user ? "You" : event.creator.name } commented on <span style='color: var(--card-color)'>#{ event.eventable.title }</span>".html_safe
when "published"
when "card_published"
"#{ event.creator == Current.user ? "You" : event.creator.name } added <span style='color: var(--card-color)'>#{ event.eventable.title }</span>".html_safe
when "closed"
when "card_closed"
"#{ event.creator == Current.user ? "You" : event.creator.name } closed <span style='color: var(--card-color)'>#{ event.eventable.title }</span>".html_safe
when "staged"
when "card_staged"
"#{event.creator == Current.user ? "You" : event.creator.name} moved <span style='color: var(--card-color)'>#{ event.eventable.title }</span> to the #{event.stage_name} stage".html_safe
when "unstaged"
when "card_unstaged"
"#{event.creator == Current.user ? "You" : event.creator.name} moved <span style='color: var(--card-color)'>#{ event.eventable.title }</span> out ofthe #{event.stage_name} stage".html_safe
when "due_date_added"
when "card_due_date_added"
"#{event.creator == Current.user ? "You" : event.creator.name} set the date to #{event.particulars.dig('particulars', 'due_date').to_date.strftime('%B %-d')} on <span style='color: var(--card-color)'>#{ event.eventable.title }</span>".html_safe
when "due_date_changed"
when "card_due_date_changed"
"#{event.creator == Current.user ? "You" : event.creator.name} changed the date to #{event.particulars.dig('particulars', 'due_date').to_date.strftime('%B %-d')} on <span style='color: var(--card-color)'>#{ event.eventable.title }</span>".html_safe
when "due_date_removed"
when "card_due_date_removed"
"#{event.creator == Current.user ? "You" : event.creator.name} removed the date on <span style='color: var(--card-color)'>#{ event.eventable.title }</span>"
when "title_changed"
when "card_title_changed"
"#{event.creator == Current.user ? "You" : event.creator.name} renamed <span style='color: var(--card-color)'>#{ event.eventable.title }</span> (was: '#{event.particulars.dig('particulars', 'old_title')})'".html_safe
end
end
def event_action_icon(event)
case event.action
when "assigned"
"assigned"
when "staged"
when "card_assigned"
"card_assigned"
when "card_staged"
"bolt"
when "unstaged"
when "card_unstaged"
"bolt"
when "commented"
when "card_commented"
"comment"
when "title_changed"
when "card_title_changed"
"rename"
else
"person"
+6 -6
View File
@@ -1,8 +1,8 @@
module NotificationsHelper
def event_notification_title(event)
case event_notification_action(event)
when "commented" then "RE: " + event.eventable.title
when "assigned" then "Assigned to you: " + event.eventable.title
when "card_commented" then "RE: " + event.eventable.title
when "card_assigned" then "Assigned to you: " + event.eventable.title
else event.eventable.title
end
end
@@ -11,9 +11,9 @@ module NotificationsHelper
name = event.creator.name
case event_notification_action(event)
when "closed" then "Closed by #{name}"
when "published" then "Added by #{name}"
when "commented" then comment_notification_body(event)
when "card_closed" then "Closed by #{name}"
when "card_published" then "Added by #{name}"
when "card_commented" then comment_notification_body(event)
else name
end
end
@@ -49,7 +49,7 @@ module NotificationsHelper
private
def event_notification_action(event)
if event.initial_assignment?
"assigned"
"card_assigned"
else
event.action
end
+4 -4
View File
@@ -31,18 +31,18 @@ module Card::Eventable
def track_due_date_change
if due_on.present?
if due_on_before_last_save.nil?
track_event("due_date_added", particulars: { due_date: due_on })
track_event("card_due_date_added", particulars: { due_date: due_on })
else
track_event("due_date_changed", particulars: { due_date: due_on })
track_event("card_due_date_changed", particulars: { due_date: due_on })
end
elsif due_on_before_last_save.present?
track_event("due_date_removed")
track_event("card_due_date_removed")
end
end
def track_title_change
if title_before_last_save.present?
track_event "title_changed", particulars: { old_title: title_before_last_save, new_title: title }
track_event "card_title_changed", particulars: { old_title: title_before_last_save, new_title: title }
end
end
end
+1 -1
View File
@@ -24,6 +24,6 @@ class Event < ApplicationRecord
# TODO: This doesn't belong here anymore
def initial_assignment?
action == "published" && eventable.assigned_to?(creator)
action == "card_published" && eventable.assigned_to?(creator)
end
end
+9 -9
View File
@@ -13,23 +13,23 @@ class EventSummary < ApplicationRecord
def summarize(event)
case event.action
when "assigned"
when "card_assigned"
"Assigned to #{event.assignees.pluck(:name).to_sentence}."
when "unassigned"
when "card_unassigned"
"Unassigned from #{event.assignees.pluck(:name).to_sentence}."
when "staged"
when "card_staged"
"#{event.creator.name} moved this to '#{event.stage_name}'."
when "closed"
when "card_closed"
"Closed by #{ event.creator.name }"
when "unstaged"
when "card_unstaged"
"#{event.creator.name} removed this from '#{event.stage_name}'."
when "due_date_added"
when "card_due_date_added"
"#{event.creator.name} set due date to #{event.particulars.dig('particulars', 'due_date').to_date.strftime('%B %-d')}."
when "due_date_changed"
when "card_due_date_changed"
"#{event.creator.name} changed due date to #{event.particulars.dig('particulars', 'due_date').to_date.strftime('%B %-d')}."
when "due_date_removed"
when "card_due_date_removed"
"#{event.creator.name} removed the date."
when "title_changed"
when "card_title_changed"
"#{event.creator.name} changed title from '#{event.particulars.dig('particulars', 'old_title')}' to '#{event.particulars.dig('particulars', 'new_title')}'."
end
end
+5 -1
View File
@@ -7,7 +7,7 @@ module Eventable
def track_event(action, creator: Current.user, collection: self.collection, **particulars)
if should_track_event?
collection.events.create!(action:, creator:, collection:, eventable: self, particulars:)
collection.events.create!(action: "#{eventable_prefix}_#{action}", creator:, collection:, eventable: self, particulars:)
end
end
@@ -18,4 +18,8 @@ module Eventable
def should_track_event?
true
end
def eventable_prefix
self.class.name.demodulize.underscore
end
end
+3 -3
View File
@@ -5,11 +5,11 @@ class Notifier::EventNotifier < Notifier
private
def recipients
case source.action
when "assigned"
when "card_assigned"
source.assignees.excluding(source.collection.access_only_users)
when "published"
when "card_published"
watchers_and_subscribers(include_only_watching: true).without(creator, *card.mentionees)
when "commented"
when "card_commented"
watchers_and_subscribers.without(creator, *source.comment.mentionees)
else
watchers_and_subscribers.without(creator)
+1 -1
View File
@@ -22,7 +22,7 @@
<% end %>
</div>
<% if event.action == "commented" && !strip_tags(event&.comment&.body_html).blank? %>
<% if event.action == "card_commented" && !strip_tags(event&.comment&.body_html).blank? %>
<span class="txt-break overflow-line-clamp txt-tight-lines">
<%= strip_tags(event.comment.body_html).truncate(200) -%>
</span>
+9 -9
View File
@@ -2,7 +2,7 @@ logo_published:
creator: david
collection: writebook
eventable: logo (Card)
action: published
action: card_published
summary: logo_initial_activity
created_at: <%= 1.week.ago %>
@@ -10,7 +10,7 @@ logo_assignment_jz:
creator: david
collection: writebook
eventable: logo (Card)
action: assigned
action: card_assigned
summary: logo_initial_activity
particulars: <%= { assignee_ids: [ ActiveRecord::FixtureSet.identify(:jz) ] }.to_json %>
created_at: <%= 1.week.ago + 1.hour %>
@@ -19,7 +19,7 @@ logo_assignment_km:
creator: david
collection: writebook
eventable: logo (Card)
action: assigned
action: card_assigned
summary: logo_second_activity
particulars: <%= { assignee_ids: [ ActiveRecord::FixtureSet.identify(:kevin) ] }.to_json %>
created_at: <%= 1.day.ago %>
@@ -28,7 +28,7 @@ layout_published:
creator: david
collection: writebook
eventable: layout (Card)
action: published
action: card_published
summary: layout_initial_activity
created_at: <%= 1.week.ago %>
@@ -36,7 +36,7 @@ layout_commented:
creator: david
collection: writebook
eventable: layout (Card)
action: commented
action: card_commented
summary: layout_initial_activity
particulars: <%= { comment_id: ActiveRecord::FixtureSet.identify(:layout_overflowing_david) }.to_json %>
created_at: <%= 1.week.ago %>
@@ -45,7 +45,7 @@ layout_assignment_jz:
creator: david
collection: writebook
eventable: layout (Card)
action: assigned
action: card_assigned
summary: layout_initial_activity
particulars: <%= { assignee_ids: [ ActiveRecord::FixtureSet.identify(:jz) ] }.to_json %>
created_at: <%= 1.hour.ago %>
@@ -54,7 +54,7 @@ text_published:
creator: kevin
collection: writebook
eventable: text (Card)
action: published
action: card_published
summary: text_initial_activity
created_at: <%= 1.week.ago %>
@@ -62,7 +62,7 @@ shipping_published:
creator: kevin
collection: writebook
eventable: shipping (Card)
action: published
action: card_published
summary: shipping_initial_activity
created_at: <%= 1.week.ago %>
@@ -70,6 +70,6 @@ shipping_closed:
creator: kevin
collection: writebook
eventable: shipping (Card)
action: closed
action: card_closed
summary: shipping_initial_activity
created_at: <%= 2.days.ago %>
+1 -1
View File
@@ -24,6 +24,6 @@ class CardMessagesTest < ActionDispatch::IntegrationTest
assert_equal 3, card.messages.count
assert_predicate card.messages.last, :event_summary?
assert_equal 1, card.messages.last.event_summary.events.count
assert_equal "assigned", card.messages.last.messageable.events.last.action
assert_equal "card_assigned", card.messages.last.messageable.events.last.action
end
end
+1 -1
View File
@@ -4,7 +4,7 @@ class Card::StagedTest < ActiveSupport::TestCase
setup { Current.session = sessions(:david) }
test "change stage" do
assert_difference -> { Event.where(action: :staged).count }, +1 do
assert_difference -> { Event.where(action: :card_staged).count }, +1 do
cards(:logo).change_stage_to(workflow_stages(:qa_in_progress))
assert_equal workflow_stages(:qa_in_progress), cards(:logo).reload.stage
end
+3 -3
View File
@@ -25,14 +25,14 @@ class CardTest < ActiveSupport::TestCase
cards(:logo).toggle_assignment users(:kevin)
end
assert_not cards(:logo).assigned_to?(users(:kevin))
assert_equal "unassigned", Event.last.action
assert_equal "card_unassigned", Event.last.action
assert_equal [ users(:kevin) ], Event.last.assignees
assert_difference %w[ cards(:logo).assignees.count Event.count ], +1 do
cards(:logo).toggle_assignment users(:kevin)
end
assert cards(:logo).assigned_to?(users(:kevin))
assert_equal "assigned", Event.last.action
assert_equal "card_assigned", Event.last.action
assert_equal [ users(:kevin) ], Event.last.assignees
end
@@ -74,7 +74,7 @@ class CardTest < ActiveSupport::TestCase
assert_equal cards(:logo, :layout, :text), Card.open
end
test "unassigned" do
test "card_unassigned" do
assert_equal cards(:shipping, :text), Card.unassigned
end