diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-04-06 21:09:37 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-04-06 21:09:37 +0300 |
commit | 495c22d1245b6212b21b7379a542df73dfa77206 (patch) | |
tree | 5f0f82dd6c8c4fe1c4bd411f9e398b1a6eaaa69f /lib/gitlab/url_builder.rb | |
parent | f3b1e07903a7f509b11ad7cf188fac46d98f77f6 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab/url_builder.rb')
-rw-r--r-- | lib/gitlab/url_builder.rb | 114 |
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 |