discourse/app/serializers/post_stream_serializer_mixi...

76 lines
1.5 KiB
Ruby

# frozen_string_literal: true
module PostStreamSerializerMixin
def self.included(klass)
klass.attributes :post_stream
klass.attributes :timeline_lookup
klass.attributes :user_badges
end
def include_stream?
true
end
def include_gaps?
true
end
def include_user_badges?
badges_to_include.present?
end
def user_badges
object.user_badges(badges_to_include)
end
def badges_to_include
@badges_to_include ||= theme_modifier_helper.serialize_post_user_badges
end
def post_stream
result = { posts: posts }
if include_stream?
if !object.is_mega_topic?
result[:stream] = object.filtered_post_ids
else
result[:isMegaTopic] = true
result[:lastId] = object.last_post_id
end
end
if include_gaps? && object.gaps.present?
result[:gaps] = GapSerializer.new(object.gaps, root: false)
end
result
end
def include_timeline_lookup?
!object.is_mega_topic?
end
def timeline_lookup
TimelineLookup.build(object.filtered_post_stream)
end
def posts
@posts ||=
begin
(object.posts || []).map do |post|
post.topic = object.topic
serializer = PostSerializer.new(post, scope: scope, root: false)
serializer.add_raw = true if @options[:include_raw]
serializer.topic_view = object
serializer.as_json
end
end
end
def theme_modifier_helper
@theme_modifier_helper ||= ThemeModifierHelper.new(request: scope.request)
end
end