summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouglas Barbosa Alexandre <dbalexandre@gmail.com>2016-01-12 18:59:49 -0200
committerDouglas Barbosa Alexandre <dbalexandre@gmail.com>2016-01-13 15:35:14 -0200
commit27706fe7839043d378f447b8cdd7ca10e5cee901 (patch)
treec0783cac308871dcaa06402baa2bd1bd7132a605
parent6bf32e00e1e598343479cad4bb01877b77c17d45 (diff)
downloadgitlab-ce-27706fe7839043d378f447b8cdd7ca10e5cee901.tar.gz
Refactoring Banzai::Filter::GollumTagsFilter
-rw-r--r--lib/banzai/filter/gollum_tags_filter.rb47
-rw-r--r--spec/lib/banzai/filter/gollum_tags_filter_spec.rb4
2 files changed, 28 insertions, 23 deletions
diff --git a/lib/banzai/filter/gollum_tags_filter.rb b/lib/banzai/filter/gollum_tags_filter.rb
index f78b30bd4e9..e4a73030597 100644
--- a/lib/banzai/filter/gollum_tags_filter.rb
+++ b/lib/banzai/filter/gollum_tags_filter.rb
@@ -14,7 +14,10 @@ module Banzai
include ActionView::Helpers::TagHelper
# Pattern to match tag contents.
- TAGS_PATTERN = %r{(.?)\[\[(.+?)\]\]([^\[]?)}
+ TAGS_PATTERN = %r{\[\[(.+?)\]\]}
+
+ # Pattern to match allowed image extensions
+ ALLOWED_IMAGE_EXTENSIONS = %r{.+(jpg|png|gif|svg|bmp)\z}i
def call
search_text_nodes(doc).each do |node|
@@ -22,9 +25,11 @@ module Banzai
next unless content.match(TAGS_PATTERN)
- html = process_tag($2)
+ html = process_tag($1)
- node.replace(html) if html != node.content
+ if html && html != node.content
+ node.replace(html)
+ end
end
doc
@@ -38,11 +43,11 @@ module Banzai
#
# Returns the String HTML version of the tag.
def process_tag(tag)
- if html = process_image_tag(tag)
- html
- else
- process_page_link_tag(tag)
- end
+ parts = tag.split('|')
+
+ return if parts.size.zero?
+
+ process_image_tag(parts) || process_page_link_tag(parts)
end
# Attempt to process the tag as an image tag.
@@ -51,16 +56,15 @@ module Banzai
#
# Returns the String HTML if the tag is a valid image tag or nil
# if it is not.
- def process_image_tag(tag)
- parts = tag.split('|')
- return if parts.size.zero?
+ def process_image_tag(parts)
+ content = parts[0].strip
- name = parts[0].strip
+ return unless image?(content)
- if file = project_wiki.find_file(name)
+ if url?(content)
+ path = content
+ elsif file = project_wiki.find_file(content)
path = ::File.join project_wiki_base_path, file.path
- elsif name =~ /^https?:\/\/.+(jpg|png|gif|svg|bmp)$/i
- path = name
end
if path
@@ -68,16 +72,21 @@ module Banzai
end
end
+ def image?(path)
+ path =~ ALLOWED_IMAGE_EXTENSIONS
+ end
+
+ def url?(path)
+ path.start_with?(*%w(http https))
+ end
+
# Attempt to process the tag as a page link tag.
#
# tag - The String tag contents (the stuff inside the double brackets).
#
# Returns the String HTML if the tag is a valid page link tag or nil
# if it is not.
- def process_page_link_tag(tag)
- parts = tag.split('|')
- return if parts.size.zero?
-
+ def process_page_link_tag(parts)
if parts.size == 1
url = parts[0].strip
else
diff --git a/spec/lib/banzai/filter/gollum_tags_filter_spec.rb b/spec/lib/banzai/filter/gollum_tags_filter_spec.rb
index 530b37526b3..38baa819957 100644
--- a/spec/lib/banzai/filter/gollum_tags_filter_spec.rb
+++ b/spec/lib/banzai/filter/gollum_tags_filter_spec.rb
@@ -37,8 +37,6 @@ describe Banzai::Filter::GollumTagsFilter, lib: true do
context 'linking external images' do
it 'creates img tag for valid URL' do
- expect(project_wiki).to receive(:find_file).with('http://example.com/image.jpg').and_return(nil)
-
tag = '[[http://example.com/image.jpg]]'
doc = filter("See #{tag}", project_wiki: project_wiki)
@@ -46,8 +44,6 @@ describe Banzai::Filter::GollumTagsFilter, lib: true do
end
it 'does not creates img tag for invalid URL' do
- expect(project_wiki).to receive(:find_file).with('http://example.com/image.pdf').and_return(nil)
-
tag = '[[http://example.com/image.pdf]]'
doc = filter("See #{tag}", project_wiki: project_wiki)