#!/usr/bin/env ruby require 'fileutils' require 'optparse' require 'methadone' require 'methadone/cli' include FileUtils include Methadone::Main include Methadone::CLILogging include Methadone::CLI include Methadone::SH main do |app_name| check_and_prepare_basedir!(app_name,options[:force]) using_readme = options[:readme] gemname = File.basename(app_name) module_name = gemname.split(/-/).map(&:capitalize).collect{ |segment| segment.split(/_/).map(&:capitalize).join('') }.join('::') debug "Creating project for gem #{gemname}" chdir File.dirname(app_name) require_file = nil sh! "bundle gem #{gemname} --no-color" do |stdout| require_file = stdout.split(/\n/).select { |file| file =~ /\.rb$/ && file !~ /version.rb$/ }.first end require_file = gemname if require_file.nil? require_file.gsub!(/^.*lib\//,'') chdir gemname template_dirs_in(:full).each { |dir| mkdir_p dir } rspec = options[:rspec] ["Rakefile", ".gitignore", "features/support/env.rb"].each do |file| copy_file file, :binding => binding end if rspec template_dirs_in(:rspec).each { |dir| mkdir_p dir } copy_file "spec/something_spec.rb", :from => :rspec, :binding => binding else template_dirs_in(:test_unit).each { |dir| mkdir_p dir } copy_file "test/tc_something.rb", :from => :test_unit, :binding => binding end license = options[:license] warn "warning: your app has no license" unless license license = nil if license == 'NONE' copy_file "#{options[:license]}_LICENSE.txt", :as => "LICENSE.txt" if license copy_file "README.rdoc", :binding => binding if using_readme copy_file "features/executable.feature", :as => "#{gemname}.feature", :binding => binding copy_file "features/step_definitions/executable_steps.rb", :as => "#{gemname}_steps.rb" copy_file "bin/executable", :as => gemname, :executable => true, :binding => binding gemspec = "#{gemname}.gemspec" gem_variable = File.open(gemspec) { |x| x.read }.match(/(\w+)\.executables/)[1] add_to_file gemspec, [ " #{gem_variable}.add_development_dependency('rdoc')", " #{gem_variable}.add_development_dependency('aruba')", " #{gem_variable}.add_development_dependency('rake', '~> 0.9.2')", " #{gem_variable}.add_dependency('methadone', '~> #{Methadone::VERSION}')", ], :before => /^end\s*$/ if rspec add_to_file gemspec, [ " #{gem_variable}.add_development_dependency('rspec')", ], :before => /^end\s*$/ end end options[:readme] = true description "Kick the bash habit by bootstrapping your Ruby command-line apps" on("--force","Overwrite files if they exist") on("--[no-]readme","[Do not ]produce a README file") on("--rspec", "Generate RSpec unit tests instead of Test::Unit") licenses = %w(mit apache custom NONE) on("-l LICENSE","--license",licenses,"Specify the license for your project",'(' + licenses.join('|') + ')') use_log_level_option arg :app_name, :required, "Name of your app, which is used for the gem name and executable name" version Methadone::VERSION go!