summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Artur <felipefac@gmail.com>2018-05-09 11:19:33 -0300
committerFelipe Artur <felipefac@gmail.com>2018-05-09 11:19:33 -0300
commit0f4d9f7c621ed95da8000b27d47e2388d98d9f49 (patch)
tree487dcea3c3d5f6db703a2c9bae169523d9b227a4
parent7923f70dfe5d9e3e4700cc7f7596c149075768b8 (diff)
downloadgitlab-ce-0f4d9f7c621ed95da8000b27d47e2388d98d9f49.tar.gz
Revert "Revert "Code improvements and add some properties to user entity""
This reverts commit c152e046d499676508b6d346dffcfad6c7da09b5.
-rw-r--r--app/controllers/projects/merge_requests/diffs_controller.rb4
-rw-r--r--app/serializers/diff_file_entity.rb37
-rw-r--r--app/serializers/user_entity.rb14
-rw-r--r--app/views/projects/merge_requests/show.html.haml2
4 files changed, 46 insertions, 11 deletions
diff --git a/app/controllers/projects/merge_requests/diffs_controller.rb b/app/controllers/projects/merge_requests/diffs_controller.rb
index 90674a8735b..0f373835062 100644
--- a/app/controllers/projects/merge_requests/diffs_controller.rb
+++ b/app/controllers/projects/merge_requests/diffs_controller.rb
@@ -21,7 +21,7 @@ class Projects::MergeRequests::DiffsController < Projects::MergeRequests::Applic
def render_diff_file
@environment = @merge_request.environments_for(current_user).last
- render json: DiffsSerializer.new.represent(@diffs, serializeable_vars)
+ render json: DiffsSerializer.new(current_user: current_user).represent(@diffs, serializable_vars)
end
def define_diff_vars
@@ -67,7 +67,7 @@ class Projects::MergeRequests::DiffsController < Projects::MergeRequests::Applic
end
end
- def serializeable_vars
+ def serializable_vars
{
environment: @environment,
merge_request: @merge_request,
diff --git a/app/serializers/diff_file_entity.rb b/app/serializers/diff_file_entity.rb
index 70820c6e19e..86c2edd331e 100644
--- a/app/serializers/diff_file_entity.rb
+++ b/app/serializers/diff_file_entity.rb
@@ -1,4 +1,5 @@
class DiffFileEntity < Grape::Entity
+ include RequestAwareEntity
include ActionView::Helpers::TagHelper
include Gitlab::Routing
include BlobHelper
@@ -7,23 +8,30 @@ class DiffFileEntity < Grape::Entity
include IconsHelper
include SubmoduleHelper
include TreeHelper
+ include ChecksCollaboration
+ include Gitlab::Utils::StrongMemoize
+
expose :submodule?, as: :submodule
expose :submodule_link do |diff_file|
- submodule_links(diff_file.blob, diff_file.content_sha, diff_file.repository).first if diff_file.submodule?
+ memoized_submodule_links(diff_file).first
end
expose :submodule_tree_url do |diff_file|
- submodule_links(diff_file.blob, diff_file.content_sha, diff_file.repository).last if diff_file.submodule?
+ memoized_submodule_links(diff_file).last
end
expose :blob, using: BlobEntity
expose :can_modify_blob do |diff_file|
- # todo: this depends on can_collaborate_with_project?, which needs current_user
- # also maybe this should live in current_user like in merge_request entity
- # can_modify_blob?(diff_file.blob, merge_request.project, merge_request.source_branch)
+ merge_request = options[:merge_request]
+
+ if merge_request && current_user
+ can_modify_blob?(diff_file.blob, merge_request.source_project, merge_request.source_branch)
+ else
+ false
+ end
end
expose :file_hash do |diff_file|
@@ -92,9 +100,10 @@ class DiffFileEntity < Grape::Entity
end
expose :fork_path, if: -> (_, options) { options[:merge_request] } do |diff_file|
- # copypasted from helper
- # params = edit_blob_fork_params(edit_path)
- # project_forks_path(merge_request.project, namespace_key: request.current_user.namespace.id, continue: params)
+ merge_request = options[:merge_request]
+
+ params = edit_blob_fork_params("Edit")
+ project_forks_path(merge_request.project, namespace_key: request.current_user.namespace.id, continue: params)
end
expose :view_path, if: -> (_, options) { options[:merge_request] } do |diff_file|
@@ -123,4 +132,16 @@ class DiffFileEntity < Grape::Entity
# Used for parallel diffs
expose :parallel_diff_lines, if: -> (diff_file, _) { diff_file.text? }
+
+ def current_user
+ request.current_user
+ end
+
+ def memoized_submodule_links(diff_file)
+ strong_memoize(:submodule_links) do
+ return [] unless diff_file.submodule?
+
+ submodule_links(diff_file.blob, diff_file.content_sha, diff_file.repository)
+ end
+ end
end
diff --git a/app/serializers/user_entity.rb b/app/serializers/user_entity.rb
index 876512b12dc..f44ca064a20 100644
--- a/app/serializers/user_entity.rb
+++ b/app/serializers/user_entity.rb
@@ -1,7 +1,21 @@
class UserEntity < API::Entities::UserBasic
include RequestAwareEntity
+ expose :can_fork do |user|
+ can?(user, :fork_project, request.project) if project
+ end
+
+ expose :can_create_merge_request do |user|
+ can?(user, :create_merge_request_in, project) if project
+ end
+
expose :path do |user|
user_path(user)
end
+
+ def project
+ return false unless request.respond_to?(:project) && request.project
+
+ request.project
+ end
end
diff --git a/app/views/projects/merge_requests/show.html.haml b/app/views/projects/merge_requests/show.html.haml
index 8427548e2de..7175883821f 100644
--- a/app/views/projects/merge_requests/show.html.haml
+++ b/app/views/projects/merge_requests/show.html.haml
@@ -62,7 +62,7 @@
#js-vue-mr-discussions{ data: { notes_data: notes_data(@merge_request),
noteable_data: serialize_issuable(@merge_request),
noteable_type: 'MergeRequest',
- current_user_data: UserSerializer.new.represent(current_user).to_json} }
+ current_user_data: UserSerializer.new(project: @project).represent(current_user).to_json} }
- else
= render "projects/merge_requests/discussion"