class Jekyll::Theme

Attributes

name[R]

Public Class Methods

new(name) click to toggle source
# File lib/jekyll/theme.rb, line 9
def initialize(name)
  @name = name.downcase.strip
  Jekyll.logger.debug "Theme:", name
  Jekyll.logger.debug "Theme source:", root
  configure_sass
end

Public Instance Methods

assets_path() click to toggle source
# File lib/jekyll/theme.rb, line 37
def assets_path
  @assets_path ||= path_for "assets".freeze
end
configure_sass() click to toggle source
# File lib/jekyll/theme.rb, line 41
def configure_sass
  return unless sass_path
  External.require_with_graceful_fail("sass") unless defined?(Sass)
  Sass.load_paths << sass_path
end
includes_path() click to toggle source
# File lib/jekyll/theme.rb, line 25
def includes_path
  @includes_path ||= path_for "_includes".freeze
end
layouts_path() click to toggle source
# File lib/jekyll/theme.rb, line 29
def layouts_path
  @layouts_path ||= path_for "_layouts".freeze
end
root() click to toggle source
# File lib/jekyll/theme.rb, line 16
def root
  # Must use File.realpath to resolve symlinks created by rbenv
  # Otherwise, Jekyll.sanitized path with prepend the unresolved root
  @root ||= File.realpath(gemspec.full_gem_path)
rescue Errno::ENOENT, Errno::EACCES, Errno::ELOOP
  raise "Path #{gemspec.full_gem_path} does not exist, is not accessible "\
    "or includes a symbolic link loop"
end
runtime_dependencies() click to toggle source
# File lib/jekyll/theme.rb, line 47
def runtime_dependencies
  gemspec.runtime_dependencies
end
sass_path() click to toggle source
# File lib/jekyll/theme.rb, line 33
def sass_path
  @sass_path ||= path_for "_sass".freeze
end

Private Instance Methods

gemspec() click to toggle source
# File lib/jekyll/theme.rb, line 65
def gemspec
  @gemspec ||= Gem::Specification.find_by_name(name)
rescue Gem::LoadError
  raise Jekyll::Errors::MissingDependencyException,
    "The #{name} theme could not be found."
end
path_for(folder) click to toggle source
# File lib/jekyll/theme.rb, line 53
def path_for(folder)
  path = realpath_for(folder)
  path if path && File.directory?(path)
end
realpath_for(folder) click to toggle source
# File lib/jekyll/theme.rb, line 58
def realpath_for(folder)
  File.realpath(Jekyll.sanitized_path(root, folder.to_s))
rescue Errno::ENOENT, Errno::EACCES, Errno::ELOOP
  Jekyll.logger.warn "Invalid theme folder:", folder
  nil
end