Skip to content

Instantly share code, notes, and snippets.

@clockworkpc
Last active December 26, 2016 09:19
Show Gist options
  • Save clockworkpc/dcd21faab1221600888e13079db0e96e to your computer and use it in GitHub Desktop.
Save clockworkpc/dcd21faab1221600888e13079db0e96e to your computer and use it in GitHub Desktop.
Ruby Project Skeleton Generator
## Basic Ruby Project Skeleton Generator
class Project
def initialize()
puts "What do you want to call this project?\n"
print "> "
$user_input = $stdin.gets.chomp
end
def define_folders()
project_name = $user_input
@project_directories = [
project_folder = Dir.home() + "/Dropbox/DevOps/Ruby/Projects/#{project_name}/",
project_skeleton_folder = project_folder + "skeleton/",
project_bin_folder = project_skeleton_folder + "bin/",
project_data_folder = project_skeleton_folder + "data/",
project_doc_folder = project_skeleton_folder + "doc/",
project_ext_folder = project_skeleton_folder + "ext/",
project_lib_folder = project_skeleton_folder + "lib/",
project_tests_folder = project_skeleton_folder + "tests/",
project_name_folder = project_lib_folder + "#{project_name}"
]
@project_files = {
"project_bin_project_name" => "#{project_bin_folder}" + "#{project_name}",
"project_lib_project_name_file" => "#{project_lib_folder}" + "#{project_name}" + ".rb",
"project_skeleton_project_name_gemspec" => "#{project_skeleton_folder}" + "#{project_name}" + ".gemspec",
"project_skeleton_project_rakefile" => "#{project_skeleton_folder}" + "Rakefile",
"project_test_project_name_file" => "#{project_tests_folder}" + "test_" + "#{project_name}" + ".rb"
}
puts """
Number of folders: #{@project_directories.length()}
Number of files: #{@project_files.length()}
"""
puts "List of folders:"
@project_directories.each do |folder|
puts "#{folder}"
end
puts "\nList of files:"
@project_files.each do |key, value|
puts "#{value}"
end
end
def create_folders()
## Need fileutils to create nested directories
require 'fileutils'
@project_directories.each do |folder|
FileUtils::mkdir_p folder
end
@project_files.each do |file_name|
FileUtils.touch file_name
end
end
def create_gemfile()
project_name = $user_input
@project_gemspec_contents = <<~GEMSPEC_CONTENTS
# coding: utf-8
lib = File.expand_path(’../lib’, __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
Gem::Specification.new do |spec|
spec.name = "#{project_name}"
spec.version = '1.0'
spec.authors = ["Alexander Garber"]
spec.email = ["clockworkpc@gmail.com"]
spec.summary = %q{Short summary of your project}
spec.description = %q{Longer description of your project.}
spec.homepage = "https://github.com/clockworkpc"
spec.license = "GPL3"
spec.files = [’lib/#{project_name}.rb’]
spec.executables = [’bin/#{project_name}’]
spec.test_files = [’tests/test_#{project_name}.rb’]
spec.require_paths = [”lib”]
end
GEMSPEC_CONTENTS
puts @project_gemspec_contents
puts @project_files["project_skeleton_project_name_gemspec"]
target_gemspec = open(@project_files["project_skeleton_project_name_gemspec"], 'w')
target_gemspec.write(@project_gemspec_contents)
target_gemspec.close()
end
def create_rakefile()
project_rakefile_contents = <<~RAKEFILE_CONTENTS
require 'rake/testtask'
Rake::TestTask.new do |t|
t.libs << "tests"
t.test_files = FileList['tests/test*.rb']
t.verbose = true
end
RAKEFILE_CONTENTS
target_rakefile = open(@project_files["project_skeleton_project_rakefile"], 'w')
target_rakefile.write(project_rakefile_contents)
target_rakefile.close()
puts project_rakefile_contents
puts @project_files["project_skeleton_project_rakefile"]
end
def create_testfile()
project_name = $user_input
project_testfile_contents = <<~TESTFILE_CONTENTS
require "./lib/#{project_name}"
require "test/unit"
class TestNAME < Test::Unit::TestCase
def test_sample()
assert_equal(4, 2+2)
end
end
TESTFILE_CONTENTS
target_testfile = open(@project_files["project_test_project_name_file"], 'w')
target_testfile.write(project_testfile_contents)
target_testfile.close()
puts project_testfile_contents
puts @project_files["project_test_project_name_file"]
end
end
new_project = Project.new()
new_project.define_folders()
new_project.create_folders()
new_project.create_gemfile()
new_project.create_rakefile()
new_project.create_testfile()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment