module AutoBlog class Page attr_accessor :ext attr_accessor :data, :content def initialize(base, dir, name) @base = base @dir = dir @name = name self.process(name) self.read_yaml(base, dir, name) self.set_defaults self.transform end def process(name) self.ext = File.extname(name) end def read_yaml(base, dir, name) self.content = File.read(File.join(base, dir, name)) if self.content =~ /^(---\n.*?)\n---\n/ self.content = self.content[($1.size + 5)..-1] self.data = YAML.load($1) end end def set_defaults self.data["layout"] ||= "default" end def transform if self.ext == ".textile" self.ext = ".html" self.content = RedCloth.new(self.content).to_html end end def add_layout(layouts, posts) payload = {"page" => self.data, "site" => {"posts" => posts}} self.content = Liquid::Template.parse(self.content).render(payload, [AutoBlog::Filters]) layout = layouts[self.data["layout"]] || self.content payload = {"content" => self.content, "page" => self.data} self.content = Liquid::Template.parse(layout).render(payload, [AutoBlog::Filters]) end def write(dest) FileUtils.mkdir_p(File.join(dest, @dir)) name = @name if self.ext != "" name = @name.split(".")[0..-2].join('.') + self.ext end path = File.join(dest, @dir, name) File.open(path, 'w') do |f| f.write(self.content) end end end end