Module: GitlabKramdown::Parser::Reference
- Included in:
- Kramdown::Parser::GitlabKramdown
- Defined in:
- lib/gitlab_kramdown/parser/reference.rb
Overview
Special GitLab References
This parser implements any non context-specific reference as described in the GitLab Flavored Markdown reference
Constant Summary collapse
- PATH_REGEX_STR =
'[a-zA-Z0-9_\.][a-zA-Z0-9_\-\.]*'- NAMESPACE_FORMAT_REGEX =
%r{ (?:#{PATH_REGEX_STR}[a-zA-Z0-9_\-]|[a-zA-Z0-9_]) (?<!\.git|\.atom) }x- FULL_NAMESPACE_FORMAT_REGEX =
%r{(#{NAMESPACE_FORMAT_REGEX}/)*#{NAMESPACE_FORMAT_REGEX}}- USER_GROUP_PATTERN =
%r{ (?<!\w) #{Regexp.escape('@')} (?<user>#{FULL_NAMESPACE_FORMAT_REGEX}) }x- PROJECT_COMMIT_PATTERN =
%r{ (?<namespace>#{FULL_NAMESPACE_FORMAT_REGEX}) #{Regexp.escape('@')} (?<commit>[a-z0-9]+) (?!\.{3}) }x- PROJECT_COMMIT_DIFF_PATTERN =
%r{ (?<namespace>#{FULL_NAMESPACE_FORMAT_REGEX}) #{Regexp.escape('@')} (?<commit_source>[a-z0-9]+) \.{3} (?<commit_target>[a-z0-9]+) }x- PROJECT_ISSUE_PATTERN =
%r{ (?<namespace>#{FULL_NAMESPACE_FORMAT_REGEX}) #{Regexp.escape('#')} (?<issue>[1-9][0-9]*) }x- PROJECT_MERGE_REQUEST_PATTERN =
%r{ (?<namespace>#{FULL_NAMESPACE_FORMAT_REGEX}) #{Regexp.escape('!')} (?<merge_request>[1-9][0-9]*) }x- PROJECT_SNIPPET_PATTERN =
%r{ (?<namespace>#{FULL_NAMESPACE_FORMAT_REGEX}) #{Regexp.escape('$')} (?<snippet>[1-9][0-9]*) }x- PROJECT_LABEL_PATTERN =
%r{ (?<namespace>#{FULL_NAMESPACE_FORMAT_REGEX}) #{Regexp.escape('~')} (?<label> [A-Za-z0-9_\-\?\.&]+ | # String-based single-word label title, or ".+?" # String-based multi-word label surrounded in quotes ) }x
Class Method Summary collapse
Instance Method Summary collapse
- #parse_commit ⇒ Object
- #parse_commit_diff ⇒ Object
- #parse_issue ⇒ Object
- #parse_label ⇒ Object
- #parse_merge_request ⇒ Object
- #parse_snippet ⇒ Object
- #parse_user_group_mention ⇒ Object
Class Method Details
.included(klass) ⇒ Object
69 70 71 72 73 74 75 76 77 |
# File 'lib/gitlab_kramdown/parser/reference.rb', line 69 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 |
Instance Method Details
#parse_commit ⇒ Object
90 91 92 93 94 95 96 97 98 99 |
# File 'lib/gitlab_kramdown/parser/reference.rb', line 90 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 ⇒ Object
101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/gitlab_kramdown/parser/reference.rb', line 101 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 ⇒ Object
113 114 115 116 117 118 119 120 121 122 |
# File 'lib/gitlab_kramdown/parser/reference.rb', line 113 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 ⇒ Object
146 147 148 149 150 151 152 153 154 155 156 |
# File 'lib/gitlab_kramdown/parser/reference.rb', line 146 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 ⇒ Object
124 125 126 127 128 129 130 131 132 133 |
# File 'lib/gitlab_kramdown/parser/reference.rb', line 124 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 ⇒ Object
135 136 137 138 139 140 141 142 143 144 |
# File 'lib/gitlab_kramdown/parser/reference.rb', line 135 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 ⇒ Object
79 80 81 82 83 84 85 86 87 88 |
# File 'lib/gitlab_kramdown/parser/reference.rb', line 79 def parse_user_group_mention start_line_number = @src.current_line_number @src.pos += @src.matched_size 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 |