lib/jekyll/page.rb in jekyll-0.10.0 vs lib/jekyll/page.rb in jekyll-0.11.0

- old
+ new

@@ -1,21 +1,21 @@ module Jekyll class Page include Convertible + attr_writer :dir attr_accessor :site, :pager - attr_accessor :name, :ext, :basename, :dir + attr_accessor :name, :ext, :basename attr_accessor :data, :content, :output # Initialize a new Page. - # +site+ is the Site - # +base+ is the String path to the <source> - # +dir+ is the String path between <source> and the file - # +name+ is the String filename of the file # - # Returns <Page> + # site - The Site object. + # base - The String path to the source. + # dir - The String path between the source and the file. + # name - The String filename of the file. def initialize(site, base, dir, name) @site = site @base = base @dir = dir @name = name @@ -24,108 +24,129 @@ self.read_yaml(File.join(base, dir), name) end # The generated directory into which the page will be placed # upon generation. This is derived from the permalink or, if - # permalink is absent, set to '/' + # permalink is absent, we be '/' # - # Returns <String> + # Returns the String destination directory. def dir url[-1, 1] == '/' ? url : File.dirname(url) end - # The full path and filename of the post. - # Defined in the YAML of the post body - # (Optional) + # The full path and filename of the post. Defined in the YAML of the post + # body. # - # Returns <String> + # Returns the String permalink or nil if none has been set. def permalink self.data && self.data['permalink'] end + # The template of the permalink. + # + # Returns the template String. def template if self.site.permalink_style == :pretty && !index? && html? "/:basename/" else "/:basename:output_ext" end end - # The generated relative url of this page - # e.g. /about.html + # The generated relative url of this page. e.g. /about.html. # - # Returns <String> + # Returns the String url. def url - return permalink if permalink + return @url if @url - @url ||= { - "basename" => self.basename, - "output_ext" => self.output_ext, - }.inject(template) { |result, token| - result.gsub(/:#{token.first}/, token.last) - }.gsub(/\/\//, "/") + url = if permalink + permalink + else + { + "basename" => self.basename, + "output_ext" => self.output_ext, + }.inject(template) { |result, token| + result.gsub(/:#{token.first}/, token.last) + }.gsub(/\/\//, "/") + end + + # sanitize url + @url = url.split('/').reject{ |part| part =~ /^\.+$/ }.join('/') + @url += "/" if url =~ /\/$/ + @url end - # Extract information from the page filename - # +name+ is the String filename of the page file + # Extract information from the page filename. # - # Returns nothing + # name - The String filename of the page file. + # + # Returns nothing. def process(name) self.ext = File.extname(name) self.basename = name[0 .. -self.ext.length-1] end # Add any necessary layouts to this post - # +layouts+ is a Hash of {"name" => "layout"} - # +site_payload+ is the site payload hash # - # Returns nothing + # layouts - The Hash of {"name" => "layout"}. + # site_payload - The site payload Hash. + # + # Returns nothing. def render(layouts, site_payload) payload = { "page" => self.to_liquid, 'paginator' => pager.to_liquid }.deep_merge(site_payload) do_layout(payload, layouts) end + # Convert this Page's data to a Hash suitable for use by Liquid. + # + # Returns the Hash representation of this Page. def to_liquid self.data.deep_merge({ "url" => File.join(@dir, self.url), "content" => self.content }) end - + # Obtain destination path. - # +dest+ is the String path to the destination dir # - # Returns destination file path. + # dest - The String path to the destination dir. + # + # Returns the destination file path String. def destination(dest) - # The url needs to be unescaped in order to preserve the correct filename + # The url needs to be unescaped in order to preserve the correct + # filename. path = File.join(dest, @dir, CGI.unescape(self.url)) path = File.join(path, "index.html") if self.url =~ /\/$/ path end # Write the generated page file to the destination directory. - # +dest+ is the String path to the destination dir # - # Returns nothing + # dest - The String path to the destination dir. + # + # Returns nothing. def write(dest) path = destination(dest) FileUtils.mkdir_p(File.dirname(path)) File.open(path, 'w') do |f| f.write(self.output) end end + # Returns the object as a debug String. def inspect "#<Jekyll:Page @name=#{self.name.inspect}>" end + # Returns the Boolean of whether this Page is HTML or not. def html? output_ext == '.html' end + # Returns the Boolean of whether this Page is an index file or not. def index? basename == 'index' end end