diff options
author | Felipe Artur <felipefac@gmail.com> | 2018-02-02 20:48:46 +0300 |
---|---|---|
committer | Felipe Artur <felipefac@gmail.com> | 2018-02-02 20:48:46 +0300 |
commit | 7ccbed4216fa6089f0495e9f7bac8f975af724ef (patch) | |
tree | 6b553d9392ec7afc463d2249c4b502adc8300f9f /app/controllers/projects | |
parent | 16bbcdc64f71a7d2404b5cb05dd08d36e4f6d691 (diff) |
Refactor discussions controller
Diffstat (limited to 'app/controllers/projects')
-rw-r--r-- | app/controllers/projects/discussions_controller.rb | 44 |
1 files changed, 25 insertions, 19 deletions
diff --git a/app/controllers/projects/discussions_controller.rb b/app/controllers/projects/discussions_controller.rb index d75d57c1f9c..fa610268dec 100644 --- a/app/controllers/projects/discussions_controller.rb +++ b/app/controllers/projects/discussions_controller.rb @@ -10,37 +10,43 @@ class Projects::DiscussionsController < Projects::ApplicationController def resolve Discussions::ResolveService.new(project, current_user, merge_request: merge_request).execute(discussion) - if has_vue_discussions_cookie? && !params['html'] - prepare_notes_for_rendering(discussion.notes) - # TODO: We may need to strip when cross_reference_not_visible_for - - render json: DiscussionSerializer.new(project: project, noteable: discussion.noteable, current_user: current_user).represent(discussion) - else - render json: { - resolved_by: discussion.resolved_by.try(:name), - discussion_headline_html: view_to_html_string('discussions/_headline', discussion: discussion) - } - end + render_discussion end def unresolve discussion.unresolve! - if has_vue_discussions_cookie? && !params['html'] - prepare_notes_for_rendering(discussion.notes) - # TODO: We may need to strip when cross_reference_not_visible_for - # TODO: This needs to be refactored to DRY + render_discussion + end + + private - render json: DiscussionSerializer.new(project: project, noteable: discussion.noteable, current_user: current_user).represent(discussion) + def render_discussion + if use_serializer? + prepare_notes_for_rendering(discussion.notes) + render_json_with_serializer else + render_json_with_html + end + end + + def use_serializer? + has_vue_discussions_cookie? && !params['html'] + end + + def render_json_with_serializer + render json: + DiscussionSerializer.new(project: project, noteable: discussion.noteable, current_user: current_user). + represent(discussion, context: self) + end + + # Legacy method used to render discussions notes when not using Vue on views. + def render_json_with_html render json: { discussion_headline_html: view_to_html_string('discussions/_headline', discussion: discussion) } - end end - private - def merge_request @merge_request ||= MergeRequestsFinder.new(current_user, project_id: @project.id).find_by!(iid: params[:merge_request_id]) end |