lib/wukong-deploy/templater.rb in wukong-deploy-0.0.2 vs lib/wukong-deploy/templater.rb in wukong-deploy-0.1.0
- old
+ new
@@ -6,28 +6,43 @@
require_relative('templater/messaging')
require_relative('templater/conflict_resolution')
module Wukong
module Deploy
+
+ # Templates out a deploy pack repo in a given directory.
class Templater
+ # The Wukong::Deploy::Repo being templated.
attr_accessor :repo
+
+ # The Configliere::Param settings.
attr_accessor :options
include FileUtils
include Messaging
include ConflictResolution
+ # Initialize a new Templater creating a deploy pack repository
+ # at the given `root` using the given `options`.
+ #
+ # @param [String] root
+ # @param [Hash] options
def initialize root, options={}
self.repo = Repo.new(root)
self.options = options
end
+ # Is this a dry run in which no files are actually created or
+ # modified on disk?
+ #
+ # @return [true, nil]
def dry_run?
- @options[:dry_run]
+ options[:dry_run]
end
+ # Run this templater.
def run!
if dry_run?
puts "Would perform the following actions in #{repo.root}"
else
puts "Within #{repo.root}:"
@@ -35,66 +50,79 @@
create_dirs
create_templates
create_gitkeeps
create_gitignore
end
+
+ # The directory containing templates used to generate the
+ # corresponding files in the new deploy pack repository.
+ #
+ # @return [Pathname]
+ def templates_dir
+ @templates_dir ||= Pathname.new(File.expand_path('../../../templates', __FILE__))
+ end
+ private
+
+ # :nodoc:
def create_dirs
repo.dirs_to_create.each do |dir|
create_directory(dir)
end
end
+ # :nodoc:
def create_templates
repo.files_to_template.each do |repo_path|
create_template(templates_dir.join("#{repo_path}.erb"), repo.root.join(repo_path))
end
end
+ # :nodoc:
def create_template input_path, output_path, binding={}
input = File.read(input_path)
erb = Erubis::Eruby.new(input)
content = erb.result(binding)
create_file(content, output_path)
end
-
+
+ # :nodoc:
def create_gitkeeps
repo.dirs_to_create.each do |dir|
if Dir[File.join(dir, '*')].empty?
create_file(empty_file, File.join(dir, '.gitkeep'))
end
end
end
+ # :nodoc:
def create_gitignore
create_template(templates_dir.join('gitignore'), repo.root.join('.gitignore'))
end
- def templates_dir
- @templates_dir ||= Pathname.new(File.expand_path('../../../templates', __FILE__))
- end
-
- private
-
+ # :nodoc:
def empty_file
""
end
-
+
+ # :nodoc:
def create_file content, path
if File.exist?(path)
handle_conflict(content, path)
else
message_create(path)
write_file(content, path)
end
end
+ # :nodoc:
def create_directory(dir)
message_create(dir)
return if dry_run?
mkdir_p(dir)
end
+ # :nodoc:
def write_file content, path
return if dry_run?
File.open(path, 'w') { |f| f.write(content) }
end