docbrown/app/services/exporter/comments.rb

48 lines
1.2 KiB
Ruby

module Exporter
class Comments
attr_reader :name, :user
def initialize(user)
@name = :comments
@user = user
end
def export(id_code: nil)
comments = user.comments
comments = comments.where(id_code: id_code) if id_code.present?
{ "#{name}.json" => jsonify(comments) }
end
private
def allowed_attributes
%i[
body_markdown
created_at
deleted
edited
edited_at
id_code
markdown_character_count
public_reactions_count
processed_html
receive_notifications
]
end
def jsonify(comments)
comments_to_jsonify = []
# the commentable polymorphic attributes are added to the select for the "includes" to work
attributes_to_select = %i[id commentable_id commentable_type] + allowed_attributes
comments.includes(:commentable).select(attributes_to_select).find_each do |comment|
# merge final json with the path of the commentable
comments_to_jsonify << comment.as_json(only: allowed_attributes)
.merge(commentable_path: comment.commentable&.path)
end
comments_to_jsonify.to_json
end
end
end