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