module GitlabKramdown::Parser::Reference

Special GitLab References

This parser implements any non context-specific reference as described in the GitLab Flavored Markdown reference

@see docs.gitlab.com/ee/user/markdown.html#special-gitlab-references

Constants

ALWAYS_FULL_NAMESPACE_FORMAT_REGEX
FULL_NAMESPACE_FORMAT_REGEX
NAMESPACE_FORMAT_REGEX
PATH_REGEX
PROJECT_COMMIT_DIFF_PATTERN
PROJECT_COMMIT_PATTERN
PROJECT_ISSUE_PATTERN
PROJECT_LABEL_PATTERN
PROJECT_MERGE_REQUEST_PATTERN
PROJECT_SNIPPET_PATTERN
USER_GROUP_PATTERN

Public Class Methods

included(klass) click to toggle source
# File lib/gitlab_kramdown/parser/reference.rb, line 70
def self.included(klass)
  klass.define_parser(:user_group_mention, USER_GROUP_PATTERN, '@')
  klass.define_parser(:commit, PROJECT_COMMIT_PATTERN, '@')
  klass.define_parser(:commit_diff, PROJECT_COMMIT_DIFF_PATTERN, '@')
  klass.define_parser(:issue, PROJECT_ISSUE_PATTERN, '#')
  klass.define_parser(:merge_request, PROJECT_MERGE_REQUEST_PATTERN, '\!')
  klass.define_parser(:snippet, PROJECT_SNIPPET_PATTERN, '\$')
  klass.define_parser(:label, PROJECT_LABEL_PATTERN, '\~')
end

Public Instance Methods

parse_commit() click to toggle source
# File lib/gitlab_kramdown/parser/reference.rb, line 97
def parse_commit
  start_line_number = @src.current_line_number
  @src.pos += @src.matched_size

  href = "#{@options[:gitlab_url]}/#{@src[:namespace]}/commit/#{@src[:commit]}"

  el = Kramdown::Element.new(:a, nil, { 'href' => href }, location: start_line_number)
  add_text(@src[0], el)
  @tree.children << el
end
parse_commit_diff() click to toggle source
# File lib/gitlab_kramdown/parser/reference.rb, line 108
def parse_commit_diff
  start_line_number = @src.current_line_number
  @src.pos += @src.matched_size

  href = "#{@options[:gitlab_url]}/#{@src[:namespace]}/compare/" \
         "#{@src[:commit_source]}...#{@src[:commit_target]}"

  el = Kramdown::Element.new(:a, nil, { 'href' => href }, location: start_line_number)
  add_text(@src[0], el)
  @tree.children << el
end
parse_issue() click to toggle source
# File lib/gitlab_kramdown/parser/reference.rb, line 120
def parse_issue
  start_line_number = @src.current_line_number
  @src.pos += @src.matched_size

  href = "#{@options[:gitlab_url]}/#{@src[:namespace]}/issues/#{@src[:issue]}"

  el = Kramdown::Element.new(:a, nil, { 'href' => href }, location: start_line_number)
  add_text(@src[0], el)
  @tree.children << el
end
parse_label() click to toggle source
# File lib/gitlab_kramdown/parser/reference.rb, line 153
def parse_label
  start_line_number = @src.current_line_number
  @src.pos += @src.matched_size

  label_param = @src[:label].delete('"').tr(' ', '+')
  href = "#{@options[:gitlab_url]}/#{@src[:namespace]}/issues?label_name=#{label_param}"

  el = Kramdown::Element.new(:a, nil, { 'href' => href }, location: start_line_number)
  add_text(@src[0], el)
  @tree.children << el
end
parse_merge_request() click to toggle source
# File lib/gitlab_kramdown/parser/reference.rb, line 131
def parse_merge_request
  start_line_number = @src.current_line_number
  @src.pos += @src.matched_size

  href = "#{@options[:gitlab_url]}/#{@src[:namespace]}/merge_requests/#{@src[:merge_request]}"

  el = Kramdown::Element.new(:a, nil, { 'href' => href }, location: start_line_number)
  add_text(@src[0], el)
  @tree.children << el
end
parse_snippet() click to toggle source
# File lib/gitlab_kramdown/parser/reference.rb, line 142
def parse_snippet
  start_line_number = @src.current_line_number
  @src.pos += @src.matched_size

  href = "#{@options[:gitlab_url]}/#{@src[:namespace]}/snippets/#{@src[:snippet]}"

  el = Kramdown::Element.new(:a, nil, { 'href' => href }, location: start_line_number)
  add_text(@src[0], el)
  @tree.children << el
end
parse_user_group_mention() click to toggle source
# File lib/gitlab_kramdown/parser/reference.rb, line 80
def parse_user_group_mention
  start_line_number = @src.current_line_number
  @src.pos += @src.matched_size

  # should not start with anything that looks like project/namespace
  if @src.pre_match.match?(/[a-zA-Z0-9_\-]\Z/)
    add_text(@src[0])
    return
  end

  href = "#{@options[:gitlab_url]}/#{@src[:user]}"

  el = Kramdown::Element.new(:a, nil, { 'href' => href }, location: start_line_number)
  add_text(@src[0], el)
  @tree.children << el
end