Commit 41e40723 authored by Douwe Maan's avatar Douwe Maan

Add regexp_for_value helper method

parent 4ba54780
......@@ -68,6 +68,19 @@ module Gitlab
def highlighted_lines
@highlighted_lines ||= highlighted_text.lines
end
def regexp_for_value(value, default: /[^'"]+/)
case value
when Array
Regexp.union(value.map { |v| regexp_for_value(v, default: default) })
when String
Regexp.escape(value)
when Regexp
value
else
default
end
end
end
end
end
......@@ -24,32 +24,13 @@ module Gitlab
# link_json('specific_package', '1.0.1', link: :key)
# # Will link `specific_package` in `"specific_package": "1.0.1"`
def link_json(key, value = nil, link: :value, &url_proc)
key =
case key
when Array
Regexp.union(key.map { |name| Regexp.escape(name) })
when String
Regexp.escape(key)
when nil
'[^"]+'
else
key
end
value =
case value
when String
Regexp.escape(value)
when nil
'[^"]+'
else
value
end
key = regexp_for_value(key, default: /[^"]+/)
value = regexp_for_value(value, default: /[^"]+/)
if link == :value
value = "(?<name>#{value})"
value = /(?<name>#{value})/
else
key = "(?<name>#{key})"
key = /(?<name>#{key})/
end
link_regex(/"#{key}":\s*"#{value}"/, &url_proc)
......
......@@ -20,25 +20,16 @@ module Gitlab
#
# link_method_call('name')
# # Will link `package` in `self.name = "package"`
def link_method_call(method_names, value = nil, &url_proc)
method_names = Array(method_names).map { |name| Regexp.escape(name) }
value =
case value
when String
Regexp.escape(value)
when nil
/[^'"]+/
else
value
end
def link_method_call(method_name, value = nil, &url_proc)
method_name = regexp_for_value(method_name)
value = regexp_for_value(value)
regex = %r{
#{Regexp.union(method_names)} # Method name
\s* # Whitespace
[(=]? # Opening brace or equals sign
\s* # Whitespace
['"](?<name>#{value})['"] # Package name in quotes
#{method_name} # Method name
\s* # Whitespace
[(=]? # Opening brace or equals sign
\s* # Whitespace
['"](?<name>#{value})['"] # Package name in quotes
}x
link_regex(regex, &url_proc)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment