discourse/app/serializers/category_detailed_serializer.rb
Sam Saffron 30990006a9 DEV: enable frozen string literal on all files
This reduces chances of errors where consumers of strings mutate inputs
and reduces memory usage of the app.

Test suite passes now, but there may be some stuff left, so we will run
a few sites on a branch prior to merging
2019-05-13 09:31:32 +08:00

69 lines
1.4 KiB
Ruby

# frozen_string_literal: true
class CategoryDetailedSerializer < BasicCategorySerializer
attributes :topic_count,
:post_count,
:topics_day,
:topics_week,
:topics_month,
:topics_year,
:topics_all_time,
:description_excerpt,
:is_uncategorized,
:subcategory_ids
has_many :displayable_topics, serializer: ListableTopicSerializer, embed: :objects, key: :topics
def include_displayable_topics?
displayable_topics.present?
end
def is_uncategorized
object.id == SiteSetting.uncategorized_category_id
end
def include_is_uncategorized?
is_uncategorized
end
def description_excerpt
PrettyText.excerpt(description, 300) if description
end
def include_subcategory_ids?
subcategory_ids.present?
end
def topics_day
count_with_subcategories(:topics_day)
end
def topics_week
count_with_subcategories(:topics_week)
end
def topics_month
count_with_subcategories(:topics_month)
end
def topics_year
count_with_subcategories(:topics_year)
end
def topics_all_time
count_with_subcategories(:topic_count)
end
def count_with_subcategories(method)
count = object.public_send(method) || 0
object.subcategories.each do |category|
count += (category.public_send(method) || 0)
end
count
end
end