Sha256: 7e0a5b4537868baea89110ae5b34d4aa4281d8aeb2d8e3380ac3b8ea078befb8

Contents?: true

Size: 1.8 KB

Versions: 8

Compression:

Stored size: 1.8 KB

Contents

# frozen_string_literal: true

module Jekyll
  class Theme
    extend Forwardable
    attr_reader :name
    def_delegator :gemspec, :version, :version

    def initialize(name)
      @name = name.downcase.strip
      Jekyll.logger.debug "Theme:", name
      Jekyll.logger.debug "Theme source:", root
      configure_sass
    end

    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

    def includes_path
      @includes_path ||= path_for "_includes".freeze
    end

    def layouts_path
      @layouts_path ||= path_for "_layouts".freeze
    end

    def sass_path
      @sass_path ||= path_for "_sass".freeze
    end

    def assets_path
      @assets_path ||= path_for "assets".freeze
    end

    def configure_sass
      return unless sass_path
      External.require_with_graceful_fail("sass") unless defined?(Sass)
      Sass.load_paths << sass_path
    end

    def runtime_dependencies
      gemspec.runtime_dependencies
    end

    private

    def path_for(folder)
      path = realpath_for(folder)
      path if path && File.directory?(path)
    end

    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

    def gemspec
      @gemspec ||= Gem::Specification.find_by_name(name)
    rescue Gem::LoadError
      raise Jekyll::Errors::MissingDependencyException,
        "The #{name} theme could not be found."
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
jekyll-3.8.5 lib/jekyll/theme.rb
jekyll-3.8.4 lib/jekyll/theme.rb
jekyll-3.8.3 lib/jekyll/theme.rb
jekyll-3.8.2 lib/jekyll/theme.rb
jekyll-3.8.1 lib/jekyll/theme.rb
jekyll-3.8.0 lib/jekyll/theme.rb
jekyll-3.8.0.pre.rc2 lib/jekyll/theme.rb
jekyll-3.8.0.pre.rc1 lib/jekyll/theme.rb