Sha256: 5114e7f958103ae1b1ad5f61792e832aabb3ea84898bead6c2836c1be7076f7f
Contents?: true
Size: 1.84 KB
Versions: 2
Compression:
Stored size: 1.84 KB
Contents
require 'tilt' require 'temple/utils' module Laydown require 'laydown/template' DEFAULTS = { :charset => 'utf-8', :title => '#{@title}', :description => nil, :favicon => nil, :keywords => [:@keywords], :css => [:@css, :@stylesheets], :js => [:@javascripts, :@js], :inline_js => [:@inline_js], :head => [], :body_class => [], :body => :yield, :ga_code => :@ga_code } class << self def properties DEFAULTS.keys end def plural_properties properties.select {|name| DEFAULTS[name].is_a?(Array) } end def compile(values={}) process(values) validate(values) make_template_from(values) end def process(values) DEFAULTS.each {|k,v| values[k] ||= v } plural_properties.each do |k| values[k] = Array(values[k]).flatten.compact end end def validate(values) values.keys.each do |value| unless DEFAULTS.keys.include?(value) raise "no Laydown property called #{value.inspect}" end end end def make_template_from(values) TEMPLATE.gsub(/data\[:([a-zA-Z0-9_]+)\]/) do |m| literalize values[:"#{$1}"] end end def literalize(obj) case obj when String then obj.inspect.gsub(/\\#\{/, '#{') + "+''" when Symbol then obj.to_s when nil then 'nil' when Array '[' + obj.map {|o| literalize(o) }.join(', ') + ']' else obj.to_s.inspect end end end class Template < Tilt::Template def initialize(hsh) super(nil, 1, hsh) { '' } # tilt hack end def prepare @src = Laydown.compile(options) end def precompiled_template(locals) @src end end def self.new(hsh={}) Template.new(hsh) end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
laydown-0.7.1 | lib/laydown.rb |
laydown-0.7.0 | lib/laydown.rb |