require 'gli' require 'fileutils' module GLI module Commands class Scaffold #:nodoc: def self.create_scaffold(root_dir, create_test_dir, create_ext_dir, project_name, commands, force=false, dry_run=false, create_rvmrc=false) dirs = [File.join(root_dir,project_name,'lib')] dirs << File.join(root_dir,project_name,'bin') dirs << File.join(root_dir,project_name,'test') if create_test_dir dirs << File.join(root_dir,project_name,'ext') if create_ext_dir if mkdirs(dirs,force,dry_run) mk_binfile(root_dir,create_ext_dir,force,dry_run,project_name,commands) mk_readme(root_dir,dry_run,project_name) mk_gemspec(root_dir,dry_run,project_name) mk_rakefile(root_dir,dry_run,project_name,create_test_dir) mk_lib_files(root_dir,dry_run,project_name) if create_rvmrc rvmrc = File.join(root_dir,project_name,".rvmrc") File.open(rvmrc,'w') do |file| file.puts "rvm use #{ENV['rvm_ruby_string']}@#{project_name} --create" end puts "Created #{rvmrc}" end init_git(root_dir, project_name) end end def self.mk_readme(root_dir,dry_run,project_name) return if dry_run File.open("#{root_dir}/#{project_name}/README.rdoc",'w') do |file| file << "= #{project_name}\n\n" file << "Describe your project here\n\n" file << ":include:#{project_name}.rdoc\n\n" end puts "Created #{root_dir}/#{project_name}/README.rdoc" File.open("#{root_dir}/#{project_name}/#{project_name}.rdoc",'w') do |file| file << "= #{project_name}\n\n" file << "Generate this with\n #{project_name} _doc\nAfter you have described your command line interface" end puts "Created #{root_dir}/#{project_name}/#{project_name}.rdoc" end def self.mk_gemspec(root_dir,dry_run,project_name) return if dry_run File.open("#{root_dir}/#{project_name}/#{project_name}.gemspec",'w') do |file| file.puts < 0.9.2') s.add_development_dependency('rdoc', '~> 4.3') s.add_development_dependency('minitest', '~> 5.14') s.add_runtime_dependency('gli','~> #{GLI::VERSION}') end EOS end puts "Created #{root_dir}/#{project_name}/#{project_name}.gemspec" end def self.project_name_as_module_name(project_name) project_name.split(/[_-]/).map { |part| part[0..0].upcase + part[1..-1] }.join('') end def self.mk_lib_files(root_dir,dry_run,project_name) return if dry_run FileUtils.mkdir("#{root_dir}/#{project_name}/lib/#{project_name}") File.open("#{root_dir}/#{project_name}/lib/#{project_name}/version.rb",'w') do |file| file.puts < :test EOS File.open("#{root_dir}/#{project_name}/test/default_test.rb",'w') do |test_file| test_file.puts < :package\n" end end puts "Created #{root_dir}/#{project_name}/Rakefile" File.open("#{root_dir}/#{project_name}/Gemfile",'w') do |bundler_file| bundler_file.puts "source 'https://rubygems.org'" bundler_file.puts "gemspec" end puts "Created #{root_dir}/#{project_name}/Gemfile" end def self.mk_binfile(root_dir,create_ext_dir,force,dry_run,project_name,commands) bin_file = File.join(root_dir,project_name,'bin',project_name) if !File.exist?(bin_file) || force if !dry_run File.open(bin_file,'w') do |file| file.chmod(0755) file.puts '#!/usr/bin/env ruby' file.puts <