class Slnky::Generator::Base

Attributes

dir[R]
name[R]

Public Class Methods

new(name, options={}) click to toggle source
# File lib/slnky/generator.rb, line 12
def initialize(name, options={})
  options = {
      force: false,
  }.merge(options)
  @name = name
  @service = "slnky-#{name}"
  @dir = File.expand_path("./#{@service}")
  short = self.class.name.split('::').last.downcase
  @template = File.expand_path("../template/#{short}", __FILE__)
  @force = options[:force]
end

Public Instance Methods

generate() click to toggle source
# File lib/slnky/generator.rb, line 24
def generate
  say "<%= color('generating service #{@name}', BOLD) %>"
  # puts "  from: #{@template}"
  # puts "  to:   #{@dir}"
  process_files
  # git init
  if File.directory?("#{@dir}/.git")
    puts "git already initialized"
  else
    puts "initializing git..."
    `cd #{@dir} && git init . || true`
    `cd #{@dir} && git add .`
  end
end

Protected Instance Methods

askyn(message, options={}) click to toggle source
# File lib/slnky/generator.rb, line 41
def askyn(message, options={})
  options = {
      choices: 'yn',
  }.merge(options)
  answer = ask("<%= color('#{message}', BOLD) %> [#{options[:choices]}]") do |q|
    q.echo = false
    q.character = true
    q.validate = /\A[#{options[:choices]}]\Z/
  end
  answer == 'y'
end
file(path, dest) click to toggle source
# File lib/slnky/generator.rb, line 76
def file(path, dest)
  # puts "file:  #{file}"
  FileUtils.cp(path, dest)
end
mkdir(dir) click to toggle source
# File lib/slnky/generator.rb, line 70
def mkdir(dir)
  return if File.directory?(dir)
  # puts "mkdir: #{dir}"
  FileUtils.mkdir_p(dir)
end
process_files() click to toggle source
# File lib/slnky/generator.rb, line 53
def process_files
  Find.find(@template).each do |path|
    next unless File.file?(path)
    file = path.gsub(/^#{@template}\//, '').gsub('NAME', @name)
    ext = File.extname(path)
    mkdir(File.dirname("#{@dir}/#{file}"))
    dest = "#{@dir}/#{file}".gsub(/\.erb$/, '')
    say "  <%= color('#{dest.gsub(/^#{File.expand_path('.')}\//, '')}', GREEN) %>"
    if ext == '.erb'
      dest = dest
      tmpl(path, dest) if !File.exists?(dest) || @force || askyn('    overwrite file?')
    else
      file(path, dest) if !File.exists?(dest) || @force || askyn('    overwrite file?')
    end
  end
end
tmpl(path, dest) click to toggle source
# File lib/slnky/generator.rb, line 81
def tmpl(path, dest)
  # puts "tmpl:  #{file}"
  var = {
      name: @name,
      dir: @dir,
      cap: @name.capitalize,
      service: @service
  }
  # out = file.gsub(/\.erb$/, '')
  # dest = "#{@dir}/#{out}"
  # puts "       #{dest}"
  template = Tilt.new(path)
  output = template.render(self, var)
  File.write(dest, output)
end