Extract description object to remove the helper salad
Lots of repetition with the helpers and params
This commit is contained in:
@@ -55,100 +55,20 @@ module EventsHelper
|
||||
tag.div class: "events__time-block", style: "grid-area: #{row}/#{col}", &
|
||||
end
|
||||
|
||||
def event_action_sentence_tag(event)
|
||||
creator = event_creator_name_tag(event)
|
||||
card = event.action.comment_created? ? event.eventable.card : event.eventable
|
||||
card_title = event_card_title(card)
|
||||
event_action_sentence(creator, card_title, event).html_safe
|
||||
end
|
||||
|
||||
def event_action_sentence_text(event)
|
||||
creator = event_creator_name_text(event)
|
||||
card = event.action.comment_created? ? event.eventable.card : event.eventable
|
||||
card_title = card.title
|
||||
event_action_sentence(creator, card_title, event)
|
||||
end
|
||||
|
||||
def event_creator_name_tag(event)
|
||||
tag.span data: { creator_id: event.creator.id } do
|
||||
safe_join([
|
||||
tag.span("You", data: { only_visible_to_you: true }),
|
||||
tag.span(h(event.creator.name), data: { only_visible_to_others: true })
|
||||
])
|
||||
end
|
||||
end
|
||||
|
||||
def event_creator_name_text(event)
|
||||
event.creator == Current.user ? "You" : h(event.creator.name)
|
||||
end
|
||||
|
||||
def event_action_sentence(event_creator, event_card_title, event)
|
||||
if event.action.comment_created?
|
||||
comment_event_action_sentence(event_creator, event_card_title, event)
|
||||
def event_action_icon(event)
|
||||
case event.action
|
||||
when "card_assigned"
|
||||
"assigned"
|
||||
when "card_unassigned"
|
||||
"minus"
|
||||
when "comment_created"
|
||||
"comment"
|
||||
when "card_title_changed"
|
||||
"rename"
|
||||
when "card_board_changed"
|
||||
"move"
|
||||
else
|
||||
card_event_action_sentence(event_creator, event_card_title, event)
|
||||
"person"
|
||||
end
|
||||
end
|
||||
|
||||
def comment_event_action_sentence(event_creator, event_card_title, event)
|
||||
"#{event_creator} commented on #{event_card_title}"
|
||||
end
|
||||
|
||||
def card_event_action_sentence(event_creator, event_card_title, event)
|
||||
case event.action
|
||||
when "card_assigned"
|
||||
if event.assignees.include?(Current.user)
|
||||
"#{event_creator} will handle #{event_card_title}"
|
||||
else
|
||||
"#{event_creator} assigned #{h event.assignees.pluck(:name).to_sentence} to #{event_card_title}"
|
||||
end
|
||||
when "card_unassigned"
|
||||
"#{event_creator} unassigned #{h(event.assignees.include?(Current.user) ? "yourself" : event.assignees.pluck(:name).to_sentence)} from #{event_card_title}"
|
||||
when "card_published"
|
||||
"#{event_creator} added #{event_card_title}"
|
||||
when "card_closed"
|
||||
"#{event_creator} moved #{event_card_title} to “Done”"
|
||||
when "card_reopened"
|
||||
"#{event_creator} reopened #{event_card_title}"
|
||||
when "card_postponed"
|
||||
"#{event_creator} moved #{event_card_title} to “Not Now”"
|
||||
when "card_auto_postponed"
|
||||
"#{event_card_title} was closed as “Not Now” due to inactivity"
|
||||
when "card_resumed"
|
||||
"#{event_creator} resumed #{event_card_title}"
|
||||
when "card_title_changed"
|
||||
"#{event_creator} renamed #{event_card_title} (was: “#{h event.particulars.dig('particulars', 'old_title')}”)"
|
||||
when "card_board_changed", "card_collection_changed"
|
||||
"#{event_creator} moved #{event_card_title} to “#{h (event.particulars.dig('particulars', 'new_board') || event.particulars.dig('particulars', 'new_collection'))}”"
|
||||
when "card_triaged"
|
||||
"#{event_creator} moved #{event_card_title} to “#{h event.particulars.dig('particulars', 'column')}”"
|
||||
when "card_sent_back_to_triage"
|
||||
"#{event_creator} moved #{event_card_title} back to “Maybe?”"
|
||||
end
|
||||
end
|
||||
|
||||
def event_card_title(card)
|
||||
tag.span card.title, class: "txt-underline"
|
||||
end
|
||||
|
||||
def event_due_date(event)
|
||||
event.particulars.dig("particulars", "due_date").to_date.strftime("%B %-d")
|
||||
end
|
||||
|
||||
def event_action_icon(event)
|
||||
case event.action
|
||||
when "card_assigned"
|
||||
"assigned"
|
||||
when "card_unassigned"
|
||||
"minus"
|
||||
when "comment_created"
|
||||
"comment"
|
||||
when "card_title_changed"
|
||||
"rename"
|
||||
when "card_board_changed"
|
||||
"move"
|
||||
else
|
||||
"person"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -22,6 +22,10 @@ class Event < ApplicationRecord
|
||||
eventable
|
||||
end
|
||||
|
||||
def description_for(user)
|
||||
Event::Description.new(self, user)
|
||||
end
|
||||
|
||||
private
|
||||
def dispatch_webhooks
|
||||
Event::WebhookDispatchJob.perform_later(self)
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
class Event::Description
|
||||
include ActionView::Helpers::TagHelper
|
||||
include ERB::Util
|
||||
|
||||
attr_reader :event, :user
|
||||
|
||||
def initialize(event, user)
|
||||
@event = event
|
||||
@user = user
|
||||
end
|
||||
|
||||
def to_html
|
||||
sentence(creator_tag, card_title_tag).html_safe
|
||||
end
|
||||
|
||||
def to_plain_text
|
||||
sentence(creator_text, card.title)
|
||||
end
|
||||
|
||||
private
|
||||
def card
|
||||
@card ||= event.action.comment_created? ? event.eventable.card : event.eventable
|
||||
end
|
||||
|
||||
def creator_tag
|
||||
tag.span data: { creator_id: event.creator.id } do
|
||||
tag.span("You", data: { only_visible_to_you: true }) +
|
||||
tag.span(h(event.creator.name), data: { only_visible_to_others: true })
|
||||
end
|
||||
end
|
||||
|
||||
def creator_text
|
||||
event.creator == user ? "You" : h(event.creator.name)
|
||||
end
|
||||
|
||||
def card_title_tag
|
||||
tag.span card.title, class: "txt-underline"
|
||||
end
|
||||
|
||||
def sentence(creator, card_title)
|
||||
if event.action.comment_created?
|
||||
comment_sentence(creator, card_title)
|
||||
else
|
||||
action_sentence(creator, card_title)
|
||||
end
|
||||
end
|
||||
|
||||
def comment_sentence(creator, card_title)
|
||||
"#{creator} commented on #{card_title}"
|
||||
end
|
||||
|
||||
def action_sentence(creator, card_title)
|
||||
case event.action
|
||||
when "card_assigned"
|
||||
assigned_sentence(creator, card_title)
|
||||
when "card_unassigned"
|
||||
unassigned_sentence(creator, card_title)
|
||||
when "card_published"
|
||||
"#{creator} added #{card_title}"
|
||||
when "card_closed"
|
||||
%(#{creator} moved #{card_title} to "Done")
|
||||
when "card_reopened"
|
||||
"#{creator} reopened #{card_title}"
|
||||
when "card_postponed"
|
||||
%(#{creator} moved #{card_title} to "Not Now")
|
||||
when "card_auto_postponed"
|
||||
%(#{card_title} was closed as "Not Now" due to inactivity)
|
||||
when "card_resumed"
|
||||
"#{creator} resumed #{card_title}"
|
||||
when "card_title_changed"
|
||||
renamed_sentence(creator, card_title)
|
||||
when "card_board_changed", "card_collection_changed"
|
||||
moved_sentence(creator, card_title)
|
||||
when "card_triaged"
|
||||
triaged_sentence(creator, card_title)
|
||||
when "card_sent_back_to_triage"
|
||||
%(#{creator} moved #{card_title} back to "Maybe?")
|
||||
end
|
||||
end
|
||||
|
||||
def assigned_sentence(creator, card_title)
|
||||
if event.assignees.include?(user)
|
||||
"#{creator} will handle #{card_title}"
|
||||
else
|
||||
"#{creator} assigned #{h event.assignees.pluck(:name).to_sentence} to #{card_title}"
|
||||
end
|
||||
end
|
||||
|
||||
def unassigned_sentence(creator, card_title)
|
||||
assignees_text = event.assignees.include?(user) ? "yourself" : event.assignees.pluck(:name).to_sentence
|
||||
"#{creator} unassigned #{h(assignees_text)} from #{card_title}"
|
||||
end
|
||||
|
||||
def renamed_sentence(creator, card_title)
|
||||
old_title = event.particulars.dig("particulars", "old_title")
|
||||
%(#{creator} renamed #{card_title} (was: "#{h old_title}"))
|
||||
end
|
||||
|
||||
def moved_sentence(creator, card_title)
|
||||
new_location = event.particulars.dig("particulars", "new_board") || event.particulars.dig("particulars", "new_collection")
|
||||
%(#{creator} moved #{card_title} to "#{h new_location}")
|
||||
end
|
||||
|
||||
def triaged_sentence(creator, card_title)
|
||||
column = event.particulars.dig("particulars", "column")
|
||||
%(#{creator} moved #{card_title} to "#{h column}")
|
||||
end
|
||||
end
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
<div class="flex flex-column min-width txt-small align-start txt-align-start" style="color: color-mix(in srgb, var(--card-color) 40%, var(--color-ink));">
|
||||
<strong class="event__title txt-break overflow-line-clamp txt-tight-lines">
|
||||
<%= event_action_sentence_tag(event) %>
|
||||
<%= event.description_for(Current.user).to_html %>
|
||||
</strong>
|
||||
|
||||
<%= yield %>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<%= event_action_sentence_text(@event) %>
|
||||
<%= @event.description_for(Current.user).to_plain_text %>
|
||||
<% if @event.eventable %>
|
||||
<%= link_to "↗︎", polymorphic_url(@event.eventable) %>
|
||||
<% end %>
|
||||
|
||||
Reference in New Issue
Block a user