class Musako::Renderers::Post

Attributes

date[R]
html[R]
iso_date[R]
path[R]
title[R]
url[R]

Public Class Methods

new(file) click to toggle source
Calls superclass method Musako::Renderer::new
# File lib/musako/renderers/post.rb, line 10
def initialize(file)
  super file
  @file_extname = ".html"
end

Public Instance Methods

output_path() click to toggle source

create directory from file’s updated_at

# File lib/musako/renderers/post.rb, line 53
def output_path
  File.join(Musako.destination_path, @url)
end
render() click to toggle source
# File lib/musako/renderers/post.rb, line 15
def render
  markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML,
    :autolink => true,
    :space_after_headers => true,
    :fenced_code_blocks => true
  )
  @html = markdown.render(self.original_file_source)

  # use first header tag as title
  title = if @html =~ /<h1>(.*?)<\/h1>/
    $1
  else
    Musako.configuration[:title]
  end
  self.set_meta_data(title)

  post = Slim::Template.new(
    File.join(Musako.views_path, "post.slim")
  ).render(self, {post: self, config: Musako.configuration})

  layout = Slim::Template.new(
    File.join(Musako.views_path, "layouts", "application.slim")
  ).render(self, {
    title: Musako.configuration[:title],
    page_title: "#{title} - #{Musako.configuration[:title]}"
  }) { post }

  dir = File.dirname(self.output_path)
  unless File.directory? dir
    FileUtils.mkdir_p dir
  end

  File.open(self.output_path, "w") do |file|
    file.write layout
  end
end
set_meta_data(title) click to toggle source
# File lib/musako/renderers/post.rb, line 57
def set_meta_data(title)
  buf  = self.file_name.split("-")

  name = (buf.size > 1) ? buf[1] : buf[0]
  date = DateTime.parse(buf[0]) rescue self.file_updated_at

  @title = title
  @date = date
  @iso_date = date.strftime("%FT%T%z")
  @url = File.join("#{date.year}/#{date.month}/#{date.day}", name)
  @path = self.file_path
end