Commit a3af78f3 authored by Markus Koller's avatar Markus Koller

Add web_url/web_path on Gitlab::View::Presenter::Base

This adds default `web_url` and `web_path` implementations and removes
the definitions that are now redundant.

This is part of a larger refactor to centralize all model-to-URL-mapping
logic in `Gitlab::UrlBuilder`.

https://gitlab.com/gitlab-org/gitlab/-/issues/213550
parent 5f6eecbe
......@@ -17,14 +17,6 @@ class CommitPresenter < Gitlab::View::Presenter::Delegated
commit.pipelines.any?
end
def web_url
url_builder.build(commit)
end
def web_path
url_builder.build(commit, only_path: true)
end
def signature_html
return unless commit.has_signature?
......
......@@ -3,10 +3,6 @@
class IssuePresenter < Gitlab::View::Presenter::Delegated
presents :issue
def web_url
url_builder.build(issue)
end
def issue_path
url_builder.build(issue, only_path: true)
end
......
......@@ -202,10 +202,6 @@ class MergeRequestPresenter < Gitlab::View::Presenter::Delegated
end
end
def web_url
Gitlab::UrlBuilder.build(merge_request)
end
def subscribed?
merge_request.subscribed?(current_user, merge_request.target_project)
end
......
......@@ -3,12 +3,8 @@
class SnippetPresenter < Gitlab::View::Presenter::Delegated
presents :snippet
def web_url
Gitlab::UrlBuilder.build(snippet)
end
def raw_url
Gitlab::UrlBuilder.build(snippet, raw: true)
url_builder.build(snippet, raw: true)
end
def ssh_url_to_repo
......
......@@ -2,12 +2,4 @@
class UserPresenter < Gitlab::View::Presenter::Delegated
presents :user
def web_url
Gitlab::Routing.url_helpers.user_url(user)
end
def web_path
Gitlab::Routing.url_helpers.user_path(user)
end
end
......@@ -34,6 +34,14 @@ module Gitlab
super || subject.is_a?(type)
end
def web_url
url_builder.build(subject)
end
def web_path
url_builder.build(subject, only_path: true)
end
class_methods do
def presenter?
true
......
......@@ -57,4 +57,32 @@ RSpec.describe Gitlab::View::Presenter::Base do
expect(presenter.present).to eq(presenter)
end
end
describe '#url_builder' do
it 'returns the UrlBuilder instance' do
presenter = presenter_class.new(project)
expect(presenter.url_builder).to eq(Gitlab::UrlBuilder.instance)
end
end
describe '#web_url' do
it 'delegates to the UrlBuilder' do
presenter = presenter_class.new(project)
expect(presenter.url_builder).to receive(:build).with(project)
presenter.web_url
end
end
describe '#web_path' do
it 'delegates to the UrlBuilder' do
presenter = presenter_class.new(project)
expect(presenter.url_builder).to receive(:build).with(project, only_path: true)
presenter.web_path
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