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
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
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
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
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
# File lib/jekyll/post.rb, line 231 def inspect "<Post: #{self.id}>" end
# 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
The full path and filename of the post. Defined in the YAML of the post body (Optional)
Returns <String>
# File lib/jekyll/post.rb, line 100 def permalink self.data && self.data['permalink'] end
# 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
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
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
# 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
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
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 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
Generated with the Darkfish Rdoc Generator 2.