lib/semi-static/convertable.rb in zzot-semi-static-0.0.2 vs lib/semi-static/convertable.rb in zzot-semi-static-0.0.3

- old
+ new

@@ -1,17 +1,21 @@ module SemiStatic + ## + # Support conversion of the source file into another format. module Convertable include ERB::Util - def load + def load #:nodoc: @content = nil if layout layout.load end super end + ## + # Format the source file. def content(options={}) return @content unless @content.nil? options = { :page => self }.merge(options) for name, value in options @@ -23,68 +27,77 @@ when '.md', '.markdown' @content = Maruku.new(self.source_content).to_html when '.haml' Haml::Engine.new(self.source_content, :filename => source_path).render(binding) when '.erb' - ERB.new(self.source_content, nil, '-').result(binding) + erb = ERB.new self.source_content, nil, '-' + erb.filename = source_path + erb.result(binding) when '.html' self.source_content else raise ArgumentError, "Unsupported format: #{self.source_path}" end end end - def layout_name + def layout_name #:nodoc: unless source_metadata.nil? || !source_metadata.include?(:layout) source_metadata[:layout].to_sym end end - def layout + def layout #:nodoc: if layout_name.nil? return nil else return site.layouts[layout_name.to_sym] end end + ## + # Add the layout used (if any) to the list of files used to determine + # the objects modification time. def source_mtime mtime = super if layout && layout.source_mtime > mtime mtime = layout.source_mtime end return mtime end + ## + # Wrap the formatted source file in the Layout (if any). def render(options={}) content = self.content(options) if layout options = { :page => self }.merge options content = layout.render(options.merge( :content => content )) end return content end + ## + # Helper method used to insert a Snippet into the formatted output. def snippet(name) name = name.to_s site.snippets[name].render :page => self end # This method is adapted from Haml::Buffer#parse_object_ref -- it's # used to make it easier for Haml and ERB layouts to generate the # same output so I can use the same test output for both. - def object_ref(object) + def object_ref(object) #:nodoc: return '' if object.nil? name = underscore(object.class) id = "#{name}_#{object.id || 'new'}" return "class='#{name}' id='#{id}'" end # Changes a word from camel case to underscores. Based on the method # of the same name in Rails' Inflector, but copied here so it'll run # properly without Rails. - def underscore(camel_cased_word) + def underscore(camel_cased_word) #:nodoc: camel_cased_word.to_s.gsub(/::/, '_'). gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2'). gsub(/([a-z\d])([A-Z])/,'\1_\2'). tr("-", "_"). downcase