Commit d2119b6d authored by Rémy Coutable's avatar Rémy Coutable

Merge branch 'event-presenter-ee' into 'master'

[EE] Add event presenter

See merge request gitlab-org/gitlab-ee!16225
parents ffc78468 c637cd28
......@@ -103,7 +103,7 @@ module EventsHelper
words << "at"
end
words << event.project_name
words << event.resource_parent_name
words.join(" ")
end
......@@ -223,3 +223,5 @@ module EventsHelper
end
end
end
EventsHelper.prepend_if_ee('EE::EventsHelper')
......@@ -3,6 +3,8 @@
class Event < ApplicationRecord
include Sortable
include FromUnion
include Presentable
default_scope { reorder(nil) }
CREATED = 1
......@@ -135,6 +137,10 @@ class Event < ApplicationRecord
end
end
def present
super(presenter_class: ::EventPresenter)
end
# rubocop:disable Metrics/CyclomaticComplexity
# rubocop:disable Metrics/PerceivedComplexity
def visible_to_user?(user = nil)
......@@ -161,12 +167,8 @@ class Event < ApplicationRecord
# rubocop:enable Metrics/PerceivedComplexity
# rubocop:enable Metrics/CyclomaticComplexity
def project_name
if project
project.full_name
else
"(deleted project)"
end
def resource_parent
project || group
end
def target_title
......
# frozen_string_literal: true
class EventPresenter < Gitlab::View::Presenter::Delegated
presents :event
def resource_parent_name
resource_parent&.full_name || ''
end
def target_link_options
case resource_parent
when Group
[event.group, event.target]
when Project
[event.project.namespace.becomes(Namespace), event.project, event.target]
else
''
end
end
end
return unless event.visible_to_user?(current_user)
event = event.present
xml.entry do
xml.id "tag:#{request.host},#{event.created_at.strftime("%Y-%m-%d")}:#{event.id}"
xml.link href: event_feed_url(event)
......
- event = event.present
- if event.visible_to_user?(current_user)
.event-item
.event-item-timestamp
......
......@@ -2,6 +2,5 @@
= event_preposition(event)
- if event.project
= link_to_project(event.project)
- else
= event.project_name
- elsif event.group
= link_to event.resource_parent_name, group_path(event.group)
......@@ -8,7 +8,7 @@
%span.event-type.d-inline-block.append-right-4{ class: event.action_name }
= event.action_name
%span.event-target-type.append-right-4= event.target_type.titleize.downcase
= link_to [event.project.namespace.becomes(Namespace), event.project, event.target], class: 'has-tooltip event-target-link append-right-4', title: event.target_title do
= link_to event.target_link_options, class: 'has-tooltip event-target-link append-right-4', title: event.target_title do
= event.target.reference_link_text
- unless event.milestone?
%span.event-target-title.append-right-4{ dir: "auto" }
......@@ -17,4 +17,4 @@
%span.event-type.d-inline-block.append-right-4{ class: event.action_name }
= event_action_name(event)
= render "events/event_scope", event: event
= render "events/event_scope", event: event if event.resource_parent.present?
......@@ -10,4 +10,4 @@
- if event.project
= link_to_project(event.project)
- else
= event.project_name
= event.resource_parent_name
......@@ -27,7 +27,7 @@
- if event.project
= link_to_project(event.project)
- else
= event.project_name
= event.resource_parent_name
- else
made a private contribution
- else
......
# frozen_string_literal: true
module EE
module EventsHelper
extend ::Gitlab::Utils::Override
override :event_note_target_url
def event_note_target_url(event)
if event.epic_note?
group_epic_url(event.group, event.note_target, anchor: dom_id(event.target))
else
super
end
end
end
end
......@@ -13,5 +13,13 @@ module EE
scope :totals_by_author, -> { group(:author_id).count }
scope :totals_by_author_target_type_action, -> { group(:author_id, :target_type, :action).count }
end
def epic_note?
note? && note_target.is_a?(::Epic)
end
def epic?
target_type == 'Epic'
end
end
end
......@@ -27,7 +27,7 @@ describe EventsHelper do
end
describe '#event_feed_url' do
let(:event) { create(:event) }
let(:event) { create(:event).present }
let(:project) { create(:project, :public, :repository) }
context 'issue' do
......
# frozen_string_literal: true
require 'spec_helper'
describe EventPresenter do
include Gitlab::Routing.url_helpers
set(:group) { create(:group) }
set(:project) { create(:project, group: group) }
set(:target) { create(:milestone, project: project) }
set(:group_event) { create(:event, :created, project: nil, group: group, target: target) }
set(:project_event) { create(:event, :created, project: project, target: target) }
describe '#resource_parent_name' do
context 'with group event' do
subject { group_event.present.resource_parent_name }
it { is_expected.to eq(group.full_name) }
end
context 'with project label' do
subject { project_event.present.resource_parent_name }
it { is_expected.to eq(project.full_name) }
end
end
describe '#target_link_options' do
context 'with group event' do
subject { group_event.present.target_link_options }
it { is_expected.to eq([group, target]) }
end
context 'with project label' do
subject { project_event.present.target_link_options }
it { is_expected.to eq([group.becomes(Namespace), project, target]) }
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment