summaryrefslogtreecommitdiff
path: root/app/controllers
diff options
context:
space:
mode:
authorIgor <idrozdov@gitlab.com>2019-08-09 21:01:55 +0000
committerDouwe Maan <douwe@gitlab.com>2019-08-09 21:01:55 +0000
commitb99011af62935de0b15e8a314ffb7df1f8a3f303 (patch)
treef19bc1052fa1cd903a31d6f01489b56ec2bb7ead /app/controllers
parent43b9be9d6cf59a02ea86795a1734848615d38a26 (diff)
downloadgitlab-ce-b99011af62935de0b15e8a314ffb7df1f8a3f303.tar.gz
Split MR widget into cached and non-cached serializers
Splits auto-refreshing of MR widget into 2 requests: - the one which uses etag-caching and invalidates the fields on change - the one without caching The idea is to gradually move all the fields to etag-cached endpoint
Diffstat (limited to 'app/controllers')
-rw-r--r--app/controllers/projects/merge_requests/content_controller.rb23
1 files changed, 20 insertions, 3 deletions
diff --git a/app/controllers/projects/merge_requests/content_controller.rb b/app/controllers/projects/merge_requests/content_controller.rb
index 6e026b83ee3..eec5c1a4355 100644
--- a/app/controllers/projects/merge_requests/content_controller.rb
+++ b/app/controllers/projects/merge_requests/content_controller.rb
@@ -7,16 +7,33 @@ class Projects::MergeRequests::ContentController < Projects::MergeRequests::Appl
# for other types of serialization
before_action :close_merge_request_if_no_source_project
+ before_action :set_polling_header
around_action :allow_gitaly_ref_name_caching
def widget
respond_to do |format|
format.json do
- Gitlab::PollingInterval.set_header(response, interval: 10_000)
+ render json: serializer(MergeRequestPollWidgetEntity)
+ end
+ end
+ end
- serializer = MergeRequestSerializer.new(current_user: current_user, project: merge_request.project)
- render json: serializer.represent(merge_request, serializer: 'widget')
+ def cached_widget
+ respond_to do |format|
+ format.json do
+ render json: serializer(MergeRequestPollCachedWidgetEntity)
end
end
end
+
+ private
+
+ def set_polling_header
+ Gitlab::PollingInterval.set_header(response, interval: 10_000)
+ end
+
+ def serializer(entity)
+ serializer = MergeRequestSerializer.new(current_user: current_user, project: merge_request.project)
+ serializer.represent(merge_request, {}, entity)
+ end
end