Parent

Included Modules

Files

Jekyll::Post

Constants

MATCHER

Attributes

lsi[RW]
categories[RW]
content[RW]
data[RW]
date[RW]
ext[RW]
output[RW]
published[RW]
site[RW]
slug[RW]
tags[RW]

Public Class Methods

new(site, source, dir, name) click to toggle source

Initialize this Post instance.

+site+ is the Site
+base+ is the String path to the dir containing the post file
+name+ is the String filename of the post file
+categories+ is an Array of Strings for the categories for this post

Returns <Post>

# File lib/jekyll/post.rb, line 32
def initialize(site, source, dir, name)
  @site = site
  @base = File.join(source, dir, '_posts')
  @name = name

  self.categories = dir.split('/').reject { |x| x.empty? }
  self.process(name)
  self.read_yaml(@base, name)

  #If we've added a date and time to the yaml, use that instead of the filename date
  #Means we'll sort correctly.
  if self.data.has_key?('date')
    # ensure Time via to_s and reparse
    self.date = Time.parse(self.data["date"].to_s)
  end

  if self.data.has_key?('published') && self.data['published'] == false
    self.published = false
  else
    self.published = true
  end

  self.tags = self.data.pluralized_array("tag", "tags")

  if self.categories.empty?
    self.categories = self.data.pluralized_array('category', 'categories')
  end
end
valid?(name) click to toggle source

Post name validator. Post filenames must be like:

2008-11-05-my-awesome-post.textile

Returns <Bool>

# File lib/jekyll/post.rb, line 17
def self.valid?(name)
  name =~ MATCHER
end

Public Instance Methods

<=>(other) click to toggle source

Spaceship is based on Post#date, slug

Returns -1, 0, 1

# File lib/jekyll/post.rb, line 64
def <=>(other)
  cmp = self.date <=> other.date
  if 0 == cmp
   cmp = self.slug <=> other.slug
  end
  return cmp
end
destination(dest) click to toggle source

Obtain destination path.

+dest+ is the String path to the destination dir

Returns destination file path.

# File lib/jekyll/post.rb, line 196
def destination(dest)
  # The url needs to be unescaped in order to preserve the correct filename
  path = File.join(dest, CGI.unescape(self.url))
  path = File.join(path, "index.html") if template[/\.html$/].nil?
  path
end
dir() click to toggle source

The generated directory into which the post will be placed upon generation. This is derived from the permalink or, if permalink is absent, set to the default date e.g. "/2008/11/05/" if the permalink style is :date, otherwise nothing

Returns <String>

# File lib/jekyll/post.rb, line 91
def dir
  File.dirname(url)
end
id() click to toggle source

The UID for this post (useful in feeds) e.g. /2008/11/05/my-awesome-post

Returns <String>

# File lib/jekyll/post.rb, line 151
def id
  File.join(self.dir, self.slug)
end
inspect() click to toggle source
# File lib/jekyll/post.rb, line 231
def inspect
  "<Post: #{self.id}>"
end
next() click to toggle source
# File lib/jekyll/post.rb, line 235
def next
  pos = self.site.posts.index(self)

  if pos && pos < self.site.posts.length-1
    self.site.posts[pos+1]
  else
    nil
  end
end
previous() click to toggle source
# File lib/jekyll/post.rb, line 245
def previous
  pos = self.site.posts.index(self)
  if pos && pos > 0
    self.site.posts[pos-1]
  else
    nil
  end
end
process(name) click to toggle source

Extract information from the post filename

+name+ is the String filename of the post file

Returns nothing

# File lib/jekyll/post.rb, line 76
def process(name)
  m, cats, date, slug, ext = *name.match(MATCHER)
  self.date = Time.parse(date)
  self.slug = slug
  self.ext = ext
rescue ArgumentError
  raise FatalException.new("Post #{name} does not have a valid date.")
end
render(layouts, site_payload) click to toggle source

Add any necessary layouts to this post

+layouts+ is a Hash of {"name" => "layout"}
+site_payload+ is the site payload hash

Returns nothing

# File lib/jekyll/post.rb, line 182
def render(layouts, site_payload)
  # construct payload
  payload = {
    "site" => { "related_posts" => related_posts(site_payload["site"]["posts"]) },
    "page" => self.to_liquid
  }.deep_merge(site_payload)

  do_layout(payload, layouts)
end
template() click to toggle source
# File lib/jekyll/post.rb, line 104
def template
  case self.site.permalink_style
  when :pretty
    "/:categories/:year/:month/:day/:title/"
  when :none
    "/:categories/:title.html"
  when :date
    "/:categories/:year/:month/:day/:title.html"
  else
    self.site.permalink_style.to_s
  end
end
to_liquid() click to toggle source

Convert this post into a Hash for use in Liquid templates.

Returns <Hash>

# File lib/jekyll/post.rb, line 218
def to_liquid
  self.data.deep_merge({
    "title"      => self.data["title"] || self.slug.split('-').select {|w| w.capitalize! || w }.join(' '),
    "url"        => self.url,
    "date"       => self.date,
    "id"         => self.id,
    "categories" => self.categories,
    "next"       => self.next,
    "previous"   => self.previous,
    "tags"       => self.tags,
    "content"    => self.content })
end
url() click to toggle source

The generated relative url of this post e.g. /2008/11/05/my-awesome-post.html

Returns <String>

# File lib/jekyll/post.rb, line 121
def url
  return @url if @url

  url = if permalink
    permalink
  else
    {
      "year"       => date.strftime("%Y"),
      "month"      => date.strftime("%m"),
      "day"        => date.strftime("%d"),
      "title"      => CGI.escape(slug),
      "i_day"      => date.strftime("%d").to_i.to_s,
      "i_month"    => date.strftime("%m").to_i.to_s,
      "categories" => categories.join('/'),
      "output_ext" => self.output_ext
    }.inject(template) { |result, token|
      result.gsub(/:#{Regexp.escape token.first}/, token.last)
    }.gsub(/\/\//, "/")
  end

  # sanitize url
  @url = url.split('/').reject{ |part| part =~ /^\.+$/ }.join('/')
  @url += "/" if url =~ /\/$/
  @url
end
write(dest) click to toggle source

Write the generated post file to the destination directory.

+dest+ is the String path to the destination dir

Returns nothing

# File lib/jekyll/post.rb, line 207
def write(dest)
  path = destination(dest)
  FileUtils.mkdir_p(File.dirname(path))
  File.open(path, 'w') do |f|
    f.write(self.output)
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.