Parent

Included Modules

Files

Class/Module Index [+]

Quicksearch

Jekyll::Document

Attributes

collection[RW]
content[RW]
output[RW]
path[R]
site[R]

Public Class Methods

new(path, relations) click to toggle source

Create a new Document.

site - the Jekyll::Site instance to which this Document belongs path - the path to the file

Returns nothing.

# File lib/jekyll/document.rb, line 15
def initialize(path, relations)
  @site = relations[:site]
  @path = path
  @collection = relations[:collection]
  @has_yaml_header = nil
end

Public Instance Methods

<=>(anotherDocument) click to toggle source

Compare this document against another document. Comparison is a comparison between the 2 paths of the documents.

Returns -1, 0, +1 or nil depending on whether this doc’s path is less than,

equal or greater than the other doc's path. See String#<=> for more details.
# File lib/jekyll/document.rb, line 262
def <=>(anotherDocument)
  path <=> anotherDocument.path
end
asset_file?() click to toggle source

Determine whether the document is an asset file. Asset files include CoffeeScript files and Sass/SCSS files.

Returns true if the extname belongs to the set of extensions

that asset files use.
# File lib/jekyll/document.rb, line 81
def asset_file?
  sass_file? || coffeescript_file?
end
basename(suffix = "") click to toggle source

The base filename of the document.

suffix - (optional) the suffix to be removed from the end of the filename

Returns the base filename of the document.

# File lib/jekyll/document.rb, line 43
def basename(suffix = "")
  File.basename(path, suffix)
end
cleaned_relative_path() click to toggle source

Produces a “cleaned” relative path. The “cleaned” relative path is the relative path without the extname

and with the collection's directory removed as well.

This method is useful when building the URL of the document.

Examples:

When relative_path is "_methods/site/generate.md":
  cleaned_relative_path
  # => "/site/generate"

Returns the cleaned relative path of the document.

# File lib/jekyll/document.rb, line 65
def cleaned_relative_path
  relative_path[0 .. -extname.length - 1].sub(collection.relative_directory, "")
end
coffeescript_file?() click to toggle source

Determine whether the document is a CoffeeScript file.

Returns true if extname == .coffee, false otherwise.

# File lib/jekyll/document.rb, line 95
def coffeescript_file?
  '.coffee'.eql?(extname)
end
data() click to toggle source

Fetch the Document’s data.

Returns a Hash containing the data. An empty hash is returned if

no data was read.
# File lib/jekyll/document.rb, line 26
def data
  @data ||= Hash.new
end
destination(base_directory) click to toggle source

The full path to the output file.

base_directory - the base path of the output directory

Returns the full path to the output file of this document.

# File lib/jekyll/document.rb, line 158
def destination(base_directory)
  path = Jekyll.sanitized_path(base_directory, url)
  path = File.join(path, "index.html") if url =~ /\/$/
  path
end
extname() click to toggle source

The extension name of the document.

Returns the extension name of the document.

# File lib/jekyll/document.rb, line 50
def extname
  File.extname(path)
end
inspect() click to toggle source

The inspect string for this document. Includes the relative path and the collection label.

Returns the inspect string for this document.

# File lib/jekyll/document.rb, line 246
def inspect
  "#<Jekyll::Document #{relative_path} collection=#{collection.label}>"
end
merged_file_read_opts(opts) click to toggle source

Returns merged option hash for File.read of self.site (if exists) and a given param

opts - override options

Return the file read options hash.

# File lib/jekyll/document.rb, line 183
def merged_file_read_opts(opts)
  site ? site.file_read_opts.merge(opts) : opts
end
place_in_layout?() click to toggle source

Determine whether the file should be placed into layouts.

Returns false if the document is either an asset file or a yaml file,

true otherwise.
# File lib/jekyll/document.rb, line 111
def place_in_layout?
  !(asset_file? || yaml_file?)
end
published?() click to toggle source

Whether the file is published or not, as indicated in YAML front-matter

Returns true if the ‘published’ key is specified in the YAML front-matter and not `false`.

# File lib/jekyll/document.rb, line 190
def published?
  !(data.key?('published') && data['published'] == false)
end
read(opts = {}) click to toggle source

Read in the file and assign the content and data based on the file contents. Merge the frontmatter of the file with the frontmatter default values

Returns nothing.

# File lib/jekyll/document.rb, line 199
def read(opts = {})
  if yaml_file?
    @data = SafeYAML.load_file(path)
  else
    begin
      defaults = @site.frontmatter_defaults.all(url, collection.label.to_sym)
      unless defaults.empty?
        @data = defaults
      end
      @content = File.read(path, merged_file_read_opts(opts))
      if content =~ /\A(---\s*\n.*?\n?)^(---\s*$\n?)/
        @content = $POSTMATCH
        data_file = SafeYAML.load($1)
        unless data_file.nil?
          @data = Utils.deep_merge_hashes(defaults, data_file)
        end
      end
    rescue SyntaxError => e
      puts "YAML Exception reading #{path}: #{e.message}"
    rescue Exception => e
      puts "Error reading file #{path}: #{e.message}"
    end
  end
end
relative_path() click to toggle source

The path to the document, relative to the site source.

Returns a String path which represents the relative path

from the site source to this document
# File lib/jekyll/document.rb, line 34
def relative_path
  Pathname.new(path).relative_path_from(Pathname.new(site.source)).to_s
end
render_with_liquid?() click to toggle source

Determine whether the file should be rendered with Liquid.

Returns false if the document is either an asset file or a yaml file,

true otherwise.
# File lib/jekyll/document.rb, line 103
def render_with_liquid?
  !(coffeescript_file? || yaml_file?)
end
sass_file?() click to toggle source

Determine whether the document is a Sass file.

Returns true if extname == .sass or .scss, false otherwise.

# File lib/jekyll/document.rb, line 88
def sass_file?
  ].sass .scss].include?(extname)
end
to_liquid() click to toggle source

Create a Liquid-understandable version of this Document.

Returns a Hash representing this Document’s data.

# File lib/jekyll/document.rb, line 227
def to_liquid
  if data.is_a?(Hash)
    Utils.deep_merge_hashes data, {
      "output"        => output,
      "content"       => content,
      "path"          => path,
      "relative_path" => relative_path,
      "url"           => url,
      "collection"    => collection.label
    }
  else
    data
  end
end
to_s() click to toggle source

The string representation for this document.

Returns the content of the document

# File lib/jekyll/document.rb, line 253
def to_s
  content || ''
end
url() click to toggle source

The computed URL for the document. See `Jekyll::URL#to_s` for more details.

Returns the computed URL for the document.

# File lib/jekyll/document.rb, line 145
def url
  @url = URL.new({
    template:     url_template,
    placeholders: url_placeholders,
    permalink:    permalink
  }).to_s
end
url_placeholders() click to toggle source

Construct a Hash of key-value pairs which contain a mapping between

a key in the URL template and the corresponding value for this document.

Returns the Hash of key-value pairs for replacement in the URL.

# File lib/jekyll/document.rb, line 126
def url_placeholders
  {
    collection: collection.label,
    path:       cleaned_relative_path,
    output_ext: Jekyll::Renderer.new(site, self).output_ext
  }
end
url_template() click to toggle source

The URL template where the document would be accessible.

Returns the URL template for the document.

# File lib/jekyll/document.rb, line 118
def url_template
  collection.url_template
end
write(dest) click to toggle source

Write the generated Document file to the destination directory.

dest - The String path to the destination dir.

Returns nothing.

# File lib/jekyll/document.rb, line 169
def write(dest)
  path = destination(dest)
  FileUtils.mkdir_p(File.dirname(path))
  File.open(path, 'wb') do |f|
    f.write(output)
  end
end
write?() click to toggle source

Determine whether this document should be written. Based on the Collection to which it belongs.

True if the document has a collection and if that collection’s write?

method returns true, otherwise false.
# File lib/jekyll/document.rb, line 271
def write?
  collection && collection.write?
end
yaml_file?() click to toggle source

Determine whether the document is a YAML file.

Returns true if the extname is either .yml or .yaml, false otherwise.

# File lib/jekyll/document.rb, line 72
def yaml_file?
  ].yaml .yml].include?(extname)
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.