lib/liquid/file_system.rb in locomotivecms-liquid-2.6.0 vs lib/liquid/file_system.rb in locomotivecms-liquid-4.0.0.alpha
- old
+ new
@@ -29,33 +29,44 @@
# file_system = Liquid::LocalFileSystem.new("/some/path")
#
# file_system.full_path("mypartial") # => "/some/path/_mypartial.liquid"
# file_system.full_path("dir/mypartial") # => "/some/path/dir/_mypartial.liquid"
#
+ # Optionally in the second argument you can specify a custom pattern for template filenames.
+ # The Kernel::sprintf format specification is used.
+ # Default pattern is "_%s.liquid".
+ #
+ # Example:
+ #
+ # file_system = Liquid::LocalFileSystem.new("/some/path", "%s.html")
+ #
+ # file_system.full_path("index") # => "/some/path/index.html"
+ #
class LocalFileSystem
attr_accessor :root
- def initialize(root)
+ def initialize(root, pattern = "_%s.liquid".freeze)
@root = root
+ @pattern = pattern
end
def read_template_file(template_path, context)
full_path = full_path(template_path)
raise FileSystemError, "No such template '#{template_path}'" unless File.exists?(full_path)
File.read(full_path)
end
def full_path(template_path)
- raise FileSystemError, "Illegal template name '#{template_path}'" unless template_path =~ /^[^.\/][a-zA-Z0-9_\/]+$/
+ raise FileSystemError, "Illegal template name '#{template_path}'" unless template_path =~ /\A[^.\/][a-zA-Z0-9_\/]+\z/
- full_path = if template_path.include?('/')
- File.join(root, File.dirname(template_path), "_#{File.basename(template_path)}.liquid")
+ full_path = if template_path.include?('/'.freeze)
+ File.join(root, File.dirname(template_path), @pattern % File.basename(template_path))
else
- File.join(root, "_#{template_path}.liquid")
+ File.join(root, @pattern % template_path)
end
- raise FileSystemError, "Illegal template path '#{File.expand_path(full_path)}'" unless File.expand_path(full_path) =~ /^#{File.expand_path(root)}/
+ raise FileSystemError, "Illegal template path '#{File.expand_path(full_path)}'" unless File.expand_path(full_path) =~ /\A#{File.expand_path(root)}/
full_path
end
end
end