Cache the `@includes_dir` in each instance so the method isn't called all the time

This commit is contained in:
Parker Moore 2014-10-12 15:11:28 -07:00
parent a7c0fffcec
commit 626706c8c5
1 changed files with 14 additions and 8 deletions

View File

@ -13,11 +13,14 @@ module Jekyll
class IncludeTag < Liquid::Tag class IncludeTag < Liquid::Tag
attr_reader :includes_dir
VALID_SYNTAX = /([\w-]+)\s*=\s*(?:"([^"\\]*(?:\\.[^"\\]*)*)"|'([^'\\]*(?:\\.[^'\\]*)*)'|([\w\.-]+))/ VALID_SYNTAX = /([\w-]+)\s*=\s*(?:"([^"\\]*(?:\\.[^"\\]*)*)"|'([^'\\]*(?:\\.[^'\\]*)*)'|([\w\.-]+))/
VARIABLE_SYNTAX = /(?<variable>[^{]*\{\{\s*(?<name>[\w\-\.]+)\s*(\|.*)?\}\}[^\s}]*)(?<params>.*)/ VARIABLE_SYNTAX = /(?<variable>[^{]*\{\{\s*(?<name>[\w\-\.]+)\s*(\|.*)?\}\}[^\s}]*)(?<params>.*)/
def initialize(tag_name, markup, tokens) def initialize(tag_name, markup, tokens)
super super
@includes_dir = tag_includes_dir
matched = markup.strip.match(VARIABLE_SYNTAX) matched = markup.strip.match(VARIABLE_SYNTAX)
if matched if matched
@file = matched['variable'].strip @file = matched['variable'].strip
@ -97,8 +100,8 @@ eos
end end
end end
def includes_dir def tag_includes_dir
@includes_dir ||= '_includes' '_includes'
end end
def render(context) def render(context)
@ -118,12 +121,12 @@ eos
partial.render!(context) partial.render!(context)
end end
rescue => e rescue => e
raise IncludeTagError.new e.message, File.join(includes_dir, @file) raise IncludeTagError.new e.message, File.join(@includes_dir, @file)
end end
end end
def resolved_includes_dir(context) def resolved_includes_dir(context)
File.join(File.realpath(context.registers[:site].source), includes_dir) File.join(File.realpath(context.registers[:site].source), @includes_dir)
end end
def validate_path(path, dir, safe) def validate_path(path, dir, safe)
@ -135,7 +138,7 @@ eos
end end
def path_relative_to_source(dir, path) def path_relative_to_source(dir, path)
File.join(includes_dir, path.sub(Regexp.new("^#{dir}"), "")) File.join(@includes_dir, path.sub(Regexp.new("^#{dir}"), ""))
end end
def realpath_prefixed_with?(path, dir) def realpath_prefixed_with?(path, dir)
@ -149,12 +152,15 @@ eos
end end
class IncludeRelativeTag < IncludeTag class IncludeRelativeTag < IncludeTag
def includes_dir def tag_includes_dir
@includes_dir ||= '.' '.'
end
def page_path
context.registers[:page].nil? ? includes_dir : File.dirname(context.registers[:page]["path"])
end end
def resolved_includes_dir(context) def resolved_includes_dir(context)
page_path = context.registers[:page].nil? ? includes_dir : File.dirname(context.registers[:page]["path"])
Jekyll.sanitized_path(context.registers[:site].source, page_path) Jekyll.sanitized_path(context.registers[:site].source, page_path)
end end
end end