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