1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
# frozen_string_literal: true
module Profile
class EventEntity < Grape::Entity
include ActionView::Helpers::SanitizeHelper
include RequestAwareEntity
include MarkupHelper
include MergeRequestsHelper
include EventsHelper
expose :created_at, if: ->(event) { include_private_event?(event) }
expose(:action, if: ->(event) { include_private_event?(event) }) { |event| event_action(event) }
expose :ref, if: ->(event) { event.visible_to_user?(current_user) && event.push_action? } do
expose(:ref_type, as: :type)
expose(:ref_count, as: :count)
expose(:ref_name, as: :name)
expose(:path) { |event| ref_path(event) }
expose(:new_ref?, as: :is_new)
expose(:rm_ref?, as: :is_removed)
end
expose :commit, if: ->(event) { event.visible_to_user?(current_user) && event.push_action? } do
expose(:truncated_sha) { |event| Commit.truncate_sha(event.commit_id) }
expose(:path) { |event| project_commit_path(event.project, event.commit_id) }
expose(:title) { |event| event_commit_title(event.commit_title) }
expose(:count) { |event| event.commits_count } # rubocop:disable Style/SymbolProc
expose(:create_mr_path) { |event| commit_create_mr_path(event) }
expose(:from_truncated_sha) { |event| commit_from(event) if event.commit_from }
expose(:to_truncated_sha) { |event| Commit.truncate_sha(event.commit_to) if event.commit_to }
expose :compare_path, if: ->(event) { event.push_with_commits? && event.commits_count > 1 } do |event|
project = event.project
from = event.md_ref? ? event.commit_from : project.default_branch
project_compare_path(project, from: from, to: event.commit_to)
end
end
expose :author, if: ->(event) { include_private_event?(event) }, using: ::API::Entities::UserBasic
expose :noteable, if: ->(event) { event.visible_to_user?(current_user) && event.note? } do
expose(:type) { |event| event.target.noteable_type }
expose(:reference_link_text) { |event| event.target.noteable.reference_link_text }
expose(:web_url) { |event| Gitlab::UrlBuilder.build(event.target.noteable) }
expose(:first_line_in_markdown) do |event|
first_line_in_markdown(event.target, :note, 150, project: event.project)
end
end
expose :target, if: ->(event) { event.visible_to_user?(current_user) } do
expose(:target_type, as: :type)
with_options if: ->(event) { event.target } do
expose(:id) { |event| event.target.id }
expose(:target_title, as: :title)
expose(:issue_type, if: ->(event) { event.work_item? || event.issue? }) do |event|
event.target.issue_type
end
expose :reference_link_text, if: ->(event) { event.target.respond_to?(:reference_link_text) } do |event|
event.target.reference_link_text
end
expose :web_url do |event|
if event.wiki_page?
event_wiki_page_target_url(event)
else
Gitlab::UrlBuilder.build(event.target)
end
end
end
end
expose :resource_parent, if: ->(event) { event.visible_to_user?(current_user) } do
expose(:type) { |event| resource_parent_type(event) }
expose(:full_name) { |event| event.resource_parent&.full_name }
expose(:full_path) { |event| event.resource_parent&.full_path }
expose(:web_url) { |event| event.resource_parent&.web_url }
expose(:avatar_url) { |event| event.resource_parent&.avatar_url }
end
private
def current_user
request.current_user
end
def target_user
request.target_user
end
def include_private_event?(event)
event.visible_to_user?(current_user) || target_user.include_private_contributions?
end
def commit_from(event)
if event.md_ref?
Commit.truncate_sha(event.commit_from)
else
event.project.default_branch
end
end
def event_action(event)
if event.visible_to_user?(current_user)
event.action
elsif target_user.include_private_contributions?
'private'
end
end
def ref_path(event)
project = event.project
commits_link = project_commits_path(project, event.ref_name)
should_link = if event.tag?
project.repository.tag_exists?(event.ref_name)
else
project.repository.branch_exists?(event.ref_name)
end
should_link ? commits_link : nil
end
def commit_create_mr_path(event)
if event.new_ref? &&
create_mr_button_from_event?(event) &&
event.authored_by?(current_user)
create_mr_path_from_push_event(event)
end
end
def resource_parent_type(event)
if event.project
"project"
elsif event.group
"group"
end
end
end
end
|