Refactoring Banzai::Filter::GollumTagsFilter

This commit is contained in:
Douglas Barbosa Alexandre 2016-01-12 18:59:49 -02:00
parent 89e8b82b63
commit 765a2c7327
2 changed files with 28 additions and 23 deletions

View file

@ -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

View file

@ -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)