Refactoring Banzai::Filter::GollumTagsFilter
This commit is contained in:
parent
89e8b82b63
commit
765a2c7327
2 changed files with 28 additions and 23 deletions
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Reference in a new issue