lib/yass/liquid_template.rb
module Yass class LiquidTemplate def self.compile(config, filename, src) template = Liquid::Template.parse(src, environment: config.liquid_env) new(filename, template) end attr_reader :filename def initialize(filename, template) @filename = filename @template = template end def name = filename.sub(/\.liquid$/, "") def render(source) vars = { "page" => file_attrs(source), "files" => files_attrs(source.config.sources) } vars["content"] = yield if block_given? content = @template.render(vars, { strict_variables: true, strict_filters: true, registers: { source: source } }) if @template.errors.any? source.config.stderr.puts "Errors found in #{filename}:" source.config.stderr.puts @template.errors.map { |e| " #{e}" }.join("\n") end content end private def file_attrs(source) source.front_matter.merge({ "title" => source.title, "layout" => source.layout&.name, "path" => source.dest_path.to_s, "src_path" => source.src_path.to_s, "dirname" => source.dest_path.dirname.to_s, "filename" => source.dest_path.basename.to_s, "extname" => source.dest_path.basename.extname, "filesize" => source.size, }) end def files_attrs(sources) = sources.map { |s| file_attrs s } end end