class Cult::Skel
Constants
- SKEL_DIR
Attributes
project[R]
Public Class Methods
new(project)
click to toggle source
# File lib/cult/skel.rb, line 9 def initialize(project) @project = project end
Public Instance Methods
copy!()
click to toggle source
# File lib/cult/skel.rb, line 76 def copy! puts "Creating project from skeleton..." FileUtils.mkdir_p(project.path) skeleton_files.each do |file| process_file(file) end puts end
copy_template(name, dst)
click to toggle source
# File lib/cult/skel.rb, line 34 def copy_template(name, dst) src = template_file(name) dst = project.location_of(dst) process_file(src, dst) end
process_file(src, dst = nil)
click to toggle source
# File lib/cult/skel.rb, line 41 def process_file(src, dst = nil) dst ||= begin relative = src.sub(%r/\A#{Regexp.escape(SKEL_DIR)}/, '') project.location_of(relative) end if File.directory?(src) return end dst, data = case src when /\.erb\z/ [ dst.sub(/\.erb\z/, ''), template.process(File.read(src), filename: src)] else [ dst, File.read(src) ] end display_name = File.basename(dst) == ".keep" ? File.dirname(dst) : dst print " Creating #{display_name}" if File.exist?(dst) puts " exists, skipped." return end FileUtils.mkdir_p(File.dirname(dst)) File.write(dst, data) File.chmod(File.stat(src).mode, dst) puts end
skeleton_files()
click to toggle source
Skeleton files are files that are copied over for a new project. We allow template files to live in the skeleton directory too, but they're not copied over until needed.
# File lib/cult/skel.rb, line 22 def skeleton_files Dir.glob(File.join(SKEL_DIR, "**", "{.*,*}")).reject do |fn| fn.match(/template/i) end end
template()
click to toggle source
# File lib/cult/skel.rb, line 14 def template @erb ||= Template.new(project: project) end
template_file(name)
click to toggle source
# File lib/cult/skel.rb, line 29 def template_file(name) File.join(SKEL_DIR, name) end