Parent

Files

Class/Module Index [+]

Quicksearch

Jekyll::URL

Public Class Methods

escape_path(path) click to toggle source

Escapes a path to be a valid URL path segment

path - The path to be escaped.

Examples:

URL.escape_path("/a b")
# => "/a%20b"

Returns the escaped path.

# File lib/jekyll/url.rb, line 81
def self.escape_path(path)
  # Because URI.escape doesn't escape '?', '[' and ']' by defaut,
  # specify unsafe string (except unreserved, sub-delims, ":", "@" and "/").
  #
  # URI path segment is defined in RFC 3986 as follows:
  #   segment       = *pchar
  #   pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
  #   unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
  #   pct-encoded   = "%" HEXDIG HEXDIG
  #   sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
  #                 / "*" / "+" / "," / ";" / "="
  URI.escape(path, /[^a-zA-Z\d\-._~!$&\'()*+,;=:@\/]/).encode('utf-8')
end
new(options) click to toggle source

options - One of :permalink or :template must be supplied.

:template     - The String used as template for URL generation,
                for example "/:path/:basename:output_ext", where
                a placeholder is prefixed with a colon.
:placeholders - A hash containing the placeholders which will be
                replaced when used inside the template. E.g.
                { "year" => Time.now.strftime("%Y") } would replace
                the placeholder ":year" with the current year.
:permalink    - If supplied, no URL will be generated from the
                template. Instead, the given permalink will be
                used as URL.
# File lib/jekyll/url.rb, line 26
def initialize(options)
  @template     = options[:template]
  @placeholders = options[:placeholders] || {}
  @permalink    = options[:permalink]

  if (@template || @permalink).nil?
    raise ArgumentError, "One of :template or :permalink must be supplied."
  end
end
unescape_path(path) click to toggle source

Unescapes a URL path segment

path - The path to be unescaped.

Examples:

URL.unescape_path("/a%20b")
# => "/a b"

Returns the unescaped path.

# File lib/jekyll/url.rb, line 105
def self.unescape_path(path)
  URI.unescape(path.encode('utf-8'))
end

Public Instance Methods

generate_url() click to toggle source

Internal: Generate the URL by replacing all placeholders with their respective values

Returns the unsanitizied String URL

# File lib/jekyll/url.rb, line 47
def generate_url
  @placeholders.inject(@template) do |result, token|
    result.gsub(/:#{token.first}/, self.class.escape_path(token.last))
  end
end
sanitize_url(in_url) click to toggle source

Returns a sanitized String URL

# File lib/jekyll/url.rb, line 54
def sanitize_url(in_url)

  # Remove all double slashes
  url = in_url.gsub(/\/\//, "/")

  # Remove every URL segment that consists solely of dots
  url = url.split('/').reject{ |part| part =~ /^\.+$/ }.join('/')

  # Append a trailing slash to the URL if the unsanitized URL had one
  url += "/" if in_url =~ /\/$/

  # Always add a leading slash
  url.gsub!(/\A([^\/])/, '/\1')

  url
end
to_s() click to toggle source

The generated relative URL of the resource

Returns the String URL

# File lib/jekyll/url.rb, line 39
def to_s
  sanitize_url(@permalink || generate_url)
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.