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