Class: Jekyll::Post
- Inherits:
-
Object
- Object
- Jekyll::Post
- Includes:
- Comparable, Convertible
- Defined in:
- lib/jekyll/post.rb
Constant Summary collapse
- MATCHER =
/^(\d+-\d+-\d+)-(.*)(\.[^.]+)$/
Class Attribute Summary collapse
-
.lsi ⇒ Object
Returns the value of attribute lsi.
Instance Attribute Summary collapse
-
#categories ⇒ Object
Returns the value of attribute categories.
-
#content ⇒ Object
Returns the value of attribute content.
-
#data ⇒ Object
Returns the value of attribute data.
-
#date ⇒ Object
Returns the value of attribute date.
-
#ext ⇒ Object
Returns the value of attribute ext.
-
#output ⇒ Object
Returns the value of attribute output.
-
#slug ⇒ Object
Returns the value of attribute slug.
Class Method Summary collapse
-
.valid?(name) ⇒ Boolean
Post name validator.
Instance Method Summary collapse
-
#<=>(other) ⇒ Object
Spaceship is based on Post#date.
-
#add_layout(layouts, site_payload) ⇒ Object
Add any necessary layouts to this post
layouts
is a Hash of => “layout”site_payload
is the site payload hash. -
#dir ⇒ Object
The generated directory into which the post will be placed upon generation.
-
#id ⇒ Object
The UID for this post (useful in feeds) e.g.
-
#initialize(base, name) ⇒ Post
constructor
Initialize this Post instance.
-
#permalink ⇒ Object
The full path and filename of the post.
-
#process(name) ⇒ Object
Extract information from the post filename
name
is the String filename of the post file. -
#related_posts(posts) ⇒ Object
Calculate related posts.
-
#summary ⇒ Object
Returns nil, or a Markdown formatted summary if a summary is set in the YAML front matter.
-
#to_liquid ⇒ Object
Convert this post into a Hash for use in Liquid templates.
-
#url ⇒ Object
The generated relative url of this post e.g.
-
#write(dest) ⇒ Object
Write the generated post file to the destination directory.
Constructor Details
#initialize(base, name) ⇒ Post
Initialize this Post instance.
+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>
30 31 32 33 34 35 36 37 38 39 |
# File 'lib/jekyll/post.rb', line 30 def initialize(base, name) @base = base @name = name @categories = base.split('/').reject { |p| ['.', '_posts'].include? p } self.process(name) self.read_yaml(base, name) #Removed to avoid munging of liquid tags, replaced in convertible.rb#48 #self.transform end |
Class Attribute Details
.lsi ⇒ Object
Returns the value of attribute lsi.
8 9 10 |
# File 'lib/jekyll/post.rb', line 8 def lsi @lsi end |
Instance Attribute Details
#categories ⇒ Object
Returns the value of attribute categories.
21 22 23 |
# File 'lib/jekyll/post.rb', line 21 def categories @categories end |
#content ⇒ Object
Returns the value of attribute content.
22 23 24 |
# File 'lib/jekyll/post.rb', line 22 def content @content end |
#data ⇒ Object
Returns the value of attribute data.
22 23 24 |
# File 'lib/jekyll/post.rb', line 22 def data @data end |
#date ⇒ Object
Returns the value of attribute date.
21 22 23 |
# File 'lib/jekyll/post.rb', line 21 def date @date end |
#ext ⇒ Object
Returns the value of attribute ext.
21 22 23 |
# File 'lib/jekyll/post.rb', line 21 def ext @ext end |
#output ⇒ Object
Returns the value of attribute output.
22 23 24 |
# File 'lib/jekyll/post.rb', line 22 def output @output end |
#slug ⇒ Object
Returns the value of attribute slug.
21 22 23 |
# File 'lib/jekyll/post.rb', line 21 def slug @slug end |
Class Method Details
.valid?(name) ⇒ Boolean
Post name validator. Post filenames must be like:
2008-11-05-my-awesome-post.textile
Returns <Bool>
17 18 19 |
# File 'lib/jekyll/post.rb', line 17 def self.valid?(name) name =~ MATCHER end |
Instance Method Details
#<=>(other) ⇒ Object
Spaceship is based on Post#date
Returns -1, 0, 1
44 45 46 |
# File 'lib/jekyll/post.rb', line 44 def <=>(other) self.date <=> other.date end |
#add_layout(layouts, site_payload) ⇒ Object
Add any necessary layouts to this post
+layouts+ is a Hash of {"name" => "layout"}
+site_payload+ is the site payload hash
Returns nothing
126 127 128 129 130 131 |
# File 'lib/jekyll/post.rb', line 126 def add_layout(layouts, site_payload) # construct post payload = (site_payload["site"]["posts"]) payload = {"page" => self.to_liquid.merge(self.data)} do_layout(payload, layouts, site_payload.merge({"site" => {"related_posts" => }})) end |
#dir ⇒ Object
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/”
Returns <String>
65 66 67 68 69 70 71 72 |
# File 'lib/jekyll/post.rb', line 65 def dir path = (@categories && !@categories.empty?) ? '/' + @categories.join('/') : '' if permalink permalink.to_s.split("/")[0..-2].join("/") else "#{path}" + date.strftime("/%Y/%m/%d/") end end |
#id ⇒ Object
The UID for this post (useful in feeds) e.g. /2008/11/05/my-awesome-post
Returns <String>
95 96 97 |
# File 'lib/jekyll/post.rb', line 95 def id self.dir + self.slug end |
#permalink ⇒ Object
The full path and filename of the post. Defined in the YAML of the post body (Optional)
Returns <String>
79 80 81 |
# File 'lib/jekyll/post.rb', line 79 def permalink self.data && self.data['permalink'] end |
#process(name) ⇒ Object
Extract information from the post filename
+name+ is the String filename of the post file
Returns nothing
52 53 54 55 56 57 |
# File 'lib/jekyll/post.rb', line 52 def process(name) m, date, slug, ext = *name.match(MATCHER) self.date = Time.parse(date) self.slug = slug self.ext = ext end |
#related_posts(posts) ⇒ Object
Calculate related posts.
Returns [<Post>]
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/jekyll/post.rb', line 102 def (posts) return [] unless posts.size > 1 if Jekyll.lsi self.class.lsi ||= begin puts "Running the classifier... this could take a while." lsi = Classifier::LSI.new posts.each { |x| $stdout.print(".");$stdout.flush;lsi.add_item(x) } puts "" lsi end = self.class.lsi.(self.content, 11) - [self] else (posts - [self])[0..9] end end |
#summary ⇒ Object
Returns nil, or a Markdown formatted summary if a summary is set in the YAML front matter
148 149 150 |
# File 'lib/jekyll/post.rb', line 148 def summary self.data['summary'] ? RedCloth.new(self.data['summary']).to_html : nil end |
#to_liquid ⇒ Object
Convert this post into a Hash for use in Liquid templates.
Returns <Hash>
155 156 157 158 159 160 161 162 |
# File 'lib/jekyll/post.rb', line 155 def to_liquid self.data.merge({ "title" => self.data["title"] || "", "url" => self.url, "date" => self.date, "id" => self.id, "summary" => self.summary, "content" => self.content }) end |
#url ⇒ Object
The generated relative url of this post e.g. /2008/11/05/my-awesome-post.html
Returns <String>
87 88 89 |
# File 'lib/jekyll/post.rb', line 87 def url self.dir + self.slug + ".html" end |
#write(dest) ⇒ Object
Write the generated post file to the destination directory.
+dest+ is the String path to the destination dir
Returns nothing
137 138 139 140 141 142 143 144 |
# File 'lib/jekyll/post.rb', line 137 def write(dest) FileUtils.mkdir_p(File.join(dest, dir)) path = File.join(dest, self.url) File.open(path, 'w') do |f| f.write(self.output) end end |