class Gemstrap::Generator

Public Instance Methods

method_missing(method, *args, &block) click to toggle source
Calls superclass method
# File lib/gemstrap/generator.rb, line 22
def method_missing(method, *args, &block)
  return context[method] if context.include?(method)
  super
end
run(args) click to toggle source
# File lib/gemstrap/generator.rb, line 12
def run(args)
  options.merge!(args)
  puts "gemstrap: creating gem #{yellow(gem_name)}"
  say_args(args)
  generate!
rescue => e
  puts e.message
  puts e.backtrace.join("\n")
end

Private Instance Methods

context() click to toggle source
# File lib/gemstrap/generator.rb, line 41
def context
  options[:templates] = Pathname.new(File.dirname(__FILE__)).join('template')
  options[:path]      = Pathname.new('.').join(options[:gem_name])
  options[:lib_path]  = options[:path].join('lib')
  options[:spec_path] = options[:path].join('spec')
  options[:gem_module] = gem_name_to_module_name
  options
end
copy_template(from, to) click to toggle source
# File lib/gemstrap/generator.rb, line 84
def copy_template(from, to)
  cp(from, to)
  say_created(to)
end
gem_name_to_module_name() click to toggle source
# File lib/gemstrap/generator.rb, line 104
def gem_name_to_module_name
  name_parts = options[:gem_name].split('-').collect { |n| n.split('_') }
  name_parts.flatten.collect(&:capitalize).join
end
generate!() click to toggle source
# File lib/gemstrap/generator.rb, line 50
def generate!
  puts 'gemstrap: generating...'
  mkdir_p(path)
  generate_root_files
  generate_lib_files
  mkdir_p(spec_path)
  puts 'gemstrap: done!'
end
generate_file(path, contents) click to toggle source
# File lib/gemstrap/generator.rb, line 89
def generate_file(path, contents)
  IO.write(path, contents)
  say_created(path)
end
generate_lib_files() click to toggle source
# File lib/gemstrap/generator.rb, line 69
def generate_lib_files
  [lib_path, lib_path.join(gem_name)].each { |path| mkdir_p(path) }
  generate_file(lib_path.join("#{gem_name}.rb"), render_template('lib/root.rb.erb'))
  generate_file(lib_path.join("#{gem_name}/version.rb"), render_template('lib/gem_name/version.rb.erb'))
end
generate_root_files() click to toggle source
# File lib/gemstrap/generator.rb, line 59
def generate_root_files
  %w(Rakefile Gemfile).each do |file|
    copy_template(templates.join(file), path.join(file))
  end
  copy_template(templates.join('gitignore'), path.join('.gitignore'))

  generate_file(path.join('README.md'), render_template('README.md.erb'))
  generate_file(path.join("#{gem_name}.gemspec"), render_template('gemspec.erb'))
end
mkdir_p(path) click to toggle source
Calls superclass method
# File lib/gemstrap/generator.rb, line 79
def mkdir_p(path)
  say_created(path)
  super(path)
end
options() click to toggle source
# File lib/gemstrap/generator.rb, line 29
def options
  @options ||= {
    gem_name: '',
    authors: [],
    authors_emails: [],
    description: '',
    summary: '',
    github_user: '',
    homepage: ''
  }
end
render_template(template_path) click to toggle source
# File lib/gemstrap/generator.rb, line 75
def render_template(template_path)
  Gemstrap::Template.render(templates.join(template_path), context)
end
say_args(args) click to toggle source
# File lib/gemstrap/generator.rb, line 94
def say_args(args)
  args.each do |k, v|
    puts "  #{white(bold('using'))}   #{k.to_s.ljust(16)} => #{v}"
  end
end
say_created(item) click to toggle source
# File lib/gemstrap/generator.rb, line 100
def say_created(item)
  puts "  #{green(bold('create'))}  #{item}"
end