class Jekyll::ThemeBuilder
def create!
def create! create_directories create_starter_files create_gemspec create_accessories initialize_git_repo end
def create_accessories
def create_accessories accessories = %w(README.md LICENSE.txt) accessories << "CODE_OF_CONDUCT.md" if code_of_conduct accessories.each do |filename| write_file(filename, template(filename)) end end
def create_directories
def create_directories mkdir_p(SCAFFOLD_DIRECTORIES) end
def create_gemspec
def create_gemspec write_file("Gemfile", template("Gemfile")) write_file("#{name}.gemspec", template("theme.gemspec")) end
def create_starter_files
def create_starter_files %w(page post default).each do |layout| write_file("_layouts/#{layout}.html", template("_layouts/#{layout}.html")) end end
def erb
def erb @erb ||= ERBRenderer.new(self) end
def initialize(theme_name, opts)
def initialize(theme_name, opts) @name = theme_name.to_s.tr(" ", "_").squeeze("_") @path = Pathname.new(File.expand_path(name, Dir.pwd)) @code_of_conduct = !!opts["code_of_conduct"] end
def initialize_git_repo
def initialize_git_repo Jekyll.logger.info "initialize", path.join(".git").to_s Dir.chdir(path.to_s) { `git init` } write_file(".gitignore", template("gitignore")) end
def mkdir_p(directories)
def mkdir_p(directories) Array(directories).each do |directory| full_path = path.join(directory) Jekyll.logger.info "create", full_path.to_s FileUtils.mkdir_p(full_path) end end
def root
def root @root ||= Pathname.new(File.expand_path("../", __dir__)) end
def template(filename)
def template(filename) erb.render(template_file(filename).read) end
def template_file(filename)
def template_file(filename) [ root.join("theme_template", "#{filename}.erb"), root.join("theme_template", filename.to_s), ].find(&:exist?) end
def user_email
def user_email @user_email ||= `git config user.email`.chomp end
def user_name
def user_name @user_name ||= `git config user.name`.chomp end
def write_file(filename, contents)
def write_file(filename, contents) full_path = path.join(filename) Jekyll.logger.info "create", full_path.to_s File.write(full_path, contents) end