Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-04-06 21:09:37 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-04-06 21:09:37 +0300
commit495c22d1245b6212b21b7379a542df73dfa77206 (patch)
tree5f0f82dd6c8c4fe1c4bd411f9e398b1a6eaaa69f /lib/gitlab/url_builder.rb
parentf3b1e07903a7f509b11ad7cf188fac46d98f77f6 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab/url_builder.rb')
-rw-r--r--lib/gitlab/url_builder.rb114
1 files changed, 56 insertions, 58 deletions
diff --git a/lib/gitlab/url_builder.rb b/lib/gitlab/url_builder.rb
index cc53e3b7577..4c56b9bb3c9 100644
--- a/lib/gitlab/url_builder.rb
+++ b/lib/gitlab/url_builder.rb
@@ -2,76 +2,74 @@
module Gitlab
class UrlBuilder
+ include Singleton
include Gitlab::Routing
include GitlabRoutingHelper
- include ActionView::RecordIdentifier
- attr_reader :object, :opts
+ delegate :build, to: :class
- def self.build(object, opts = {})
- new(object, opts).url
- end
+ class << self
+ include ActionView::RecordIdentifier
- def url
- # Objects are sometimes wrapped in a BatchLoader instance
- case object.itself
- when Commit
- commit_url
- when Issue
- issue_url(object)
- when MergeRequest
- merge_request_url(object)
- when Note
- note_url
- when WikiPage
- wiki_page_url
- when Snippet
- opts[:raw].present? ? gitlab_raw_snippet_url(object) : gitlab_snippet_url(object)
- when Milestone
- milestone_url(object)
- when ::Ci::Build
- project_job_url(object.project, object)
- when User
- user_url(object)
- else
- raise NotImplementedError.new("No URL builder defined for #{object.inspect}")
+ def build(object, **options)
+ # Objects are sometimes wrapped in a BatchLoader instance
+ case object.itself
+ when ::Ci::Build
+ instance.project_job_url(object.project, object, **options)
+ when Commit
+ commit_url(object, **options)
+ when Group
+ instance.group_canonical_url(object, **options)
+ when Issue
+ instance.issue_url(object, **options)
+ when MergeRequest
+ instance.merge_request_url(object, **options)
+ when Milestone
+ instance.milestone_url(object, **options)
+ when Note
+ note_url(object, **options)
+ when Project
+ instance.project_url(object, **options)
+ when Snippet
+ snippet_url(object, **options)
+ when User
+ instance.user_url(object, **options)
+ when ProjectWiki
+ instance.project_wiki_url(object.project, :home, **options)
+ when WikiPage
+ instance.project_wiki_url(object.wiki.project, object.slug, **options)
+ else
+ raise NotImplementedError.new("No URL builder defined for #{object.inspect}")
+ end
end
- end
-
- private
- def initialize(object, opts = {})
- @object = object
- @opts = opts
- end
-
- def commit_url(opts = {})
- return '' if object.project.nil?
+ def commit_url(commit, **options)
+ return '' unless commit.project
- namespace_project_commit_url({
- namespace_id: object.project.namespace,
- project_id: object.project,
- id: object.id
- }.merge!(opts))
- end
-
- def note_url
- if object.for_commit?
- commit_url(id: object.commit_id, anchor: dom_id(object))
-
- elsif object.for_issue?
- issue_url(object.noteable, anchor: dom_id(object))
+ instance.commit_url(commit, **options)
+ end
- elsif object.for_merge_request?
- merge_request_url(object.noteable, anchor: dom_id(object))
+ def note_url(note, **options)
+ if note.for_commit?
+ return '' unless note.project
- elsif object.for_snippet?
- gitlab_snippet_url(object.noteable, anchor: dom_id(object))
+ instance.project_commit_url(note.project, note.commit_id, anchor: dom_id(note), **options)
+ elsif note.for_issue?
+ instance.issue_url(note.noteable, anchor: dom_id(note), **options)
+ elsif note.for_merge_request?
+ instance.merge_request_url(note.noteable, anchor: dom_id(note), **options)
+ elsif note.for_snippet?
+ instance.gitlab_snippet_url(note.noteable, anchor: dom_id(note), **options)
+ end
end
- end
- def wiki_page_url
- project_wiki_url(object.wiki.project, object.slug)
+ def snippet_url(snippet, **options)
+ if options.delete(:raw).present?
+ instance.gitlab_raw_snippet_url(snippet, **options)
+ else
+ instance.gitlab_snippet_url(snippet, **options)
+ end
+ end
end
end
end