Class: Jekyll::Post

### Home Classes Methods

### In Files

- lib/jekyll/post.rb

### Parent

Object

### Methods

- ::new
- ::valid?
- #<=>
- #containing_dir
- #destination
- #dir
- #excerpt
- #extract_excerpt
- #generate_excerpt?
- #id
- #inspect
- #next
- #path
- #permalink
- #populate_categories
- #populate_tags
- #previous
- #process
- #published?
- #read_yaml
- #related_posts
- #relative_path
- #render
- #template
- #title
- #titleized_slug
- #url
- #url_placeholders

### Included Modules

- Comparable
- Jekyll::Convertible

### Files

- LICENSE

### Class/Module Index

Quicksearch

- Jekyll
- Jekyll::Command
- Jekyll::Commands
- Jekyll::Commands::Build
- Jekyll::Commands::Doctor
- Jekyll::Commands::New
- Jekyll::Commands::Serve
- Jekyll::Configuration
- Jekyll::Converter
- Jekyll::Converters
- Jekyll::Converters::Identity
- Jekyll::Converters::Markdown
- Jekyll::Converters::Markdown::KramdownParser
- Jekyll::Converters::Markdown::MarukuParser
- Jekyll::Converters::Markdown::RDiscountParser
- Jekyll::Converters::Markdown::RedcarpetParser
- Jekyll::Converters::Markdown::RedcarpetParser::CommonMethods
- Jekyll::Converters::Markdown::RedcarpetParser::WithPygments
- Jekyll::Converters::Markdown::RedcarpetParser::WithoutPygments
- Jekyll::Converters::Textile
- Jekyll::Convertible
- Jekyll::Deprecator
- Jekyll::Draft
- Jekyll::Excerpt
- Jekyll::FatalException
- Jekyll::Filters
- Jekyll::Generator
- Jekyll::Generators
- Jekyll::Generators::Pagination
- Jekyll::GistTag
- Jekyll::Layout
- Jekyll::Page
- Jekyll::Pager
- Jekyll::Plugin
- Jekyll::Post
- Jekyll::RelatedPosts
- Jekyll::Site
- Jekyll::Site::Cleaner
- Jekyll::StaticFile
- Jekyll::Stevenson
- Jekyll::Tags
- Jekyll::Tags::HighlightBlock
- Jekyll::Tags::IncludeTag
- Jekyll::Tags::PostComparer
- Jekyll::Tags::PostUrl
- Jekyll::URL
- Date
- Enumerable
- Hash
- Object

No matching classes.

# Jekyll::Post

### Constants

ATTRIBUTES_FOR_LIQUID

  Attributes for Liquid templates

EXCERPT_ATTRIBUTES_FOR_LIQUID
MATCHER

  Valid post name regex.

### Attributes

categories[RW]
content[RW]
data[RW]
date[RW]
ext[RW]
extracted_excerpt[RW]
name[R]
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 - The Site. base - The String path to the dir containing the post file. name - The String filename of the post file.

Returns the new Post.

    # File lib/jekyll/post.rb, line 48
    def initialize(site, source, dir, name)
      @site = site
      @dir = dir
      @base = self.containing_dir(source, dir)
      @name = name

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

      if self.data.has_key?('date')
        self.date = Time.parse(self.data["date"].to_s)
      end

      self.published = self.published?

      self.populate_categories
      self.populate_tags
    end

valid?(name) click to toggle source

Post name validator. Post filenames must be like: 2008-11-05-my-awesome-post.textile

Returns true if valid, false if not.

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

### Public Instance Methods

<=>(other) click to toggle source

Compares Post objects. First compares the Post date. If the dates are equal, it compares the Post slugs.

other - The other Post we are comparing to.

Returns -1, 0, 1

    # File lib/jekyll/post.rb, line 144
    def <=>(other)
      cmp = self.date <=> other.date
      if 0 == cmp
       cmp = self.slug <=> other.slug
      end
      return cmp
    end

containing_dir(source, dir) click to toggle source

Get the full path to the directory containing the post files

    # File lib/jekyll/post.rb, line 88
    def containing_dir(source, dir)
      return File.join(source, dir, '_posts')
    end

destination(dest) click to toggle source

Obtain destination path.

dest - The String path to the destination dir.

Returns destination file path String.

    # File lib/jekyll/post.rb, line 267
    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 path[/\.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 the String directory.

    # File lib/jekyll/post.rb, line 172
    def dir
      File.dirname(url)
    end

excerpt() click to toggle source

The post excerpt. This is either a custom excerpt set in YAML front matter or the result of extract_excerpt.

Returns excerpt string.

    # File lib/jekyll/post.rb, line 107
    def excerpt
      self.data.fetch('excerpt', self.extracted_excerpt.to_s)
    end

id() click to toggle source

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

Returns the String UID.

    # File lib/jekyll/post.rb, line 231
    def id
      File.join(self.dir, self.slug)
    end

inspect() click to toggle source

Returns the shorthand String identifier of this Post.

    # File lib/jekyll/post.rb, line 275
    def inspect
      "<Post: #{self.id}>"
    end

next() click to toggle source

    # File lib/jekyll/post.rb, line 279
    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

path() click to toggle source

Public: the path to the post relative to the site source,

    from the YAML Front-Matter or from a combination of
    the directory it's in, "_posts", and the name of the
    post file

Returns the path to the file relative to the site source

    # File lib/jekyll/post.rb, line 129
    def path
      self.data.fetch('path', self.relative_path.sub(/\A\//, ''))
    end

permalink() click to toggle source

The full path and filename of the post. Defined in the YAML of the post body (optional).

Returns the String permalink.

    # File lib/jekyll/post.rb, line 180
    def permalink
      self.data && self.data['permalink']
    end

populate_categories() click to toggle source

    # File lib/jekyll/post.rb, line 76
    def populate_categories
      if self.categories.empty?
        self.categories = self.data.pluralized_array('category', 'categories').map {|c| c.to_s.downcase}
      end
      self.categories.flatten!
    end

populate_tags() click to toggle source

    # File lib/jekyll/post.rb, line 83
    def populate_tags
      self.tags = self.data.pluralized_array("tag", "tags").flatten
    end

previous() click to toggle source

    # File lib/jekyll/post.rb, line 289
    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 - The String filename of the post file.

Returns nothing.

    # File lib/jekyll/post.rb, line 157
    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

published?() click to toggle source

    # File lib/jekyll/post.rb, line 68
    def published?
      if self.data.has_key?('published') && self.data['published'] == false
        false
      else
        true
      end
    end

read_yaml(base, name) click to toggle source

Read the YAML frontmatter.

base - The String path to the dir containing the file. name - The String filename of the file.

Returns nothing.

    # File lib/jekyll/post.rb, line 98
    def read_yaml(base, name)
      super(base, name)
      self.extracted_excerpt = self.extract_excerpt
    end

related_posts(posts) click to toggle source

Calculate related posts.

Returns an Array of related Posts.

    # File lib/jekyll/post.rb, line 238
    def related_posts(posts)
      Jekyll::RelatedPosts.new(self).build
    end

relative_path() click to toggle source

The path to the post source file, relative to the site source

    # File lib/jekyll/post.rb, line 134
    def relative_path
      File.join(@dir, '_posts', @name)
    end

render(layouts, site_payload) click to toggle source

Add any necessary layouts to this post.

layouts - A Hash of {"name" => "layout"}. site_payload - The site payload hash.

Returns nothing.

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

      if generate_excerpt?
        self.extracted_excerpt.do_layout(payload, {})
      end

      do_layout(payload.merge({"page" => self.to_liquid}), layouts)
    end

template() click to toggle source

    # File lib/jekyll/post.rb, line 184
    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"
      when :ordinal
        "/:categories/:year/:y_day/:title.html"
      else
        self.site.permalink_style.to_s
      end
    end

title() click to toggle source

Public: the Post title, from the YAML Front-Matter or from the slug

Returns the post title

    # File lib/jekyll/post.rb, line 114
    def title
      self.data.fetch("title", self.titleized_slug)
    end

titleized_slug() click to toggle source

Turns the post slug into a suitable title

    # File lib/jekyll/post.rb, line 119
    def titleized_slug
      self.slug.split('-').select {|w| w.capitalize! || w }.join(' ')
    end

url() click to toggle source

The generated relative url of this post.

Returns the String url.

    # File lib/jekyll/post.rb, line 202
    def url
      @url ||= URL.new({
        :template => template,
        :placeholders => url_placeholders,
        :permalink => permalink
      }).to_s
    end

url_placeholders() click to toggle source

Returns a hash of URL placeholder names (as symbols) mapping to the desired placeholder replacements. For details see "url.rb"

    # File lib/jekyll/post.rb, line 212
    def url_placeholders
      {
        :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 || []).map { |c| URI.escape(c.to_s) }.join('/'),
        :short_month => date.strftime("%b"),
        :y_day       => date.strftime("%j"),
        :output_ext  => self.output_ext
      }
    end

### Protected Instance Methods

extract_excerpt() click to toggle source

    # File lib/jekyll/post.rb, line 300
    def extract_excerpt
      if generate_excerpt?
        Jekyll::Excerpt.new(self)
      else
        ""
      end
    end

generate_excerpt?() click to toggle source

    # File lib/jekyll/post.rb, line 308
    def generate_excerpt?
      !(site.config['excerpt_separator'].to_s.empty?)
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.