55 lines
1.5 KiB
Ruby
55 lines
1.5 KiB
Ruby
module Search
|
|
class CommentSerializer < ApplicationSerializer
|
|
attribute :id, &:search_id
|
|
|
|
attributes :path do |comment|
|
|
user = comment.user
|
|
|
|
if user
|
|
"/#{user.username}/comment/#{comment.id_code_generated}"
|
|
else
|
|
"/404.html"
|
|
end
|
|
end
|
|
|
|
attributes :public_reactions_count
|
|
|
|
attribute :body_text, &:body_markdown
|
|
|
|
attribute :class_name, -> { "Comment" }
|
|
|
|
attribute :highlight do |comment|
|
|
{
|
|
body_text: [comment.pg_search_highlight]
|
|
}
|
|
rescue PgSearch::PgSearchHighlightNotSelected
|
|
# This is needed because in Search::Comment we only call the
|
|
# search if a term is provided. This means if a user searches with a
|
|
# blank term, we skip the line that executes .with_pg_search_highlight.
|
|
# Skipping this AND trying to call .pg_search_highlight raises an error
|
|
# which we ignore here - basically filling in highlights if they're
|
|
# there.
|
|
{
|
|
body_text: []
|
|
}
|
|
end
|
|
|
|
attribute :hotness_score, &:score
|
|
attribute :published, -> { true }
|
|
attribute :published_at, &:created_at
|
|
attribute :readable_publish_date_string, &:readable_publish_date
|
|
attribute :title, &:commentable_title
|
|
|
|
# NOTE: not using the `NestedUserSerializer` to avoid hitting Redis to
|
|
# fetch the cached value
|
|
attribute :user do |comment|
|
|
user = comment.user
|
|
|
|
if user
|
|
user.slice(:name, :profile_image_90, :username).symbolize_keys
|
|
else
|
|
{}
|
|
end
|
|
end
|
|
end
|
|
end
|