48 lines
1.2 KiB
Ruby
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
|