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

markdown_content_rewriter_service.rb « services « app - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: bc6fd592eaa392a23287c1fd666d133632ea4e78 (plain)
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
# frozen_string_literal: true

# This service passes Markdown content through our GFM rewriter classes
# which rewrite references to GitLab objects and uploads within the content
# based on their visibility by the `target_parent`.
class MarkdownContentRewriterService
  REWRITERS = [Gitlab::Gfm::ReferenceRewriter, Gitlab::Gfm::UploadsRewriter].freeze

  def initialize(current_user, content, source_parent, target_parent)
    # See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/39654#note_399095117
    raise ArgumentError, 'The rewriter classes require that `source_parent` is a `Project`' \
      unless source_parent.is_a?(Project)

    @current_user = current_user
    @content = content.presence
    @source_parent = source_parent
    @target_parent = target_parent
  end

  def execute
    return unless content

    REWRITERS.inject(content) do |text, klass|
      rewriter = klass.new(text, source_parent, current_user)
      rewriter.rewrite(target_parent)
    end
  end

  private

  attr_reader :current_user, :content, :source_parent, :target_parent
end