#!/usr/bin/env ruby
# Generate a rails app (using EDGE rails), set up a git repo for it, install GemsOnRails,
# haml, rspec, and make_resourceful
#
# USAGE: $0 some_app_name
#
# See http://github.com/foca/utility_scripts/ for the latest version
# Released under a WTFP license (http://sam.zoy.org/wtfpl/)
RAILS_GIT_CHECKOUT = '/Users/pat/Projects/Rails/git_clones/rails'
module Helpers
LINE = 80
def announcing(msg)
print msg
begin
yield
rescue
print "." * (LINE - msg.size - 8)
puts "\e[31m[FAILED]\e[0m"
Process.exit
return
end
print "." * (LINE - msg.size - 6)
puts "\e[32m[DONE]\e[0m"
end
def silent(command)
unless(system("#{command} &> /dev/null"))
raise "Command Failed"
end
end
def templates
{ :gitignore => %w[config/database.yml tmp/* log/*.log db/*.sqlite3 public/stylesheets/application.css] * "\n",
:routes => ["ActionController::Routing::Routes.draw do |map|", "end"] * "\n" }
end
def gitci(message)
silent 'git add .'
silent "git commit -m '#{message}'"
end
def braid(repo, dir, type="git")
silent "braid add #{repo} --type #{type} #{dir}"
silent "git merge braid/track"
end
def rake(task, args={})
args = args.map {|name,value| "#{name.to_s.upcase}=#{value}"}.join(" ")
silent "rake #{task} #{args}"
end
def gitsub(repo, dir)
silent "git submodule add #{repo} #{dir}"
end
end
if __FILE__ == $0
include Helpers
app_name = ARGV.first
announcing "Updating EDGE rails (git pull)" do
Dir.chdir(RAILS_GIT_CHECKOUT) { silent "git pull" }
end
announcing "Creating application layout" do
silent "rails '#{app_name}'"
end
Dir.chdir(app_name) do
announcing "Setting up rails app" do
silent "rm README"
silent "rm public/index.html"
silent "rm log/*.log"
silent "rm public/images/rails.png"
silent "cp config/database.{,sample.}yml"
silent "rm -r test"
end
announcing "Creating databases" do
rake "db:create"
rake "db:create", :rails_env => "test"
end
announcing "Configuring git repo" do
silent "git init"
File.open(".gitignore", "w") {|f| f << templates[:gitignore] }
silent "touch {tmp,log}/.gitignore"
gitci "Basic rails app structure"
end
announcing "Freezing rails" do
rake "rails:freeze:gems"
#silent "git submodule add git://github.com/rails/rails.git vendor/rails"
#silent "git submodule init"
end
announcing "Installing GemsOnrails" do
silent "gemsonrails"
gitci "Froze GemsOnRails plugin"
end
announcing "Installing haml" do
silent "haml --rails ."
rake "gems:freeze", :gem => "haml"
gitci "Froze haml gem and plugin"
end
# announcing "Installing Shoulda" do
# silent "git submodule add git://github.com/thoughtbot/shoulda.git vendors/plugins/shoulda"
# silent "git submodule init"
# end
announcing "Installing RSpec" do
silent "git submodule add git://github.com/dchelimsky/rspec.git vendor/plugins/rspec"
silent "git submodule add git://github.com/dchelimsky/rspec-rails.git vendor/plugins/rspec-rails"
silent "git submodule init"
end
announcing "Generating RSpec base files" do
silent "script/generate rspec"
gitci "Added RSpec base files"
end
# announcing "Installing make_resourceful" do
# silent "git submodule add git://github.com/jcfischer/make_resourceful.git vendor/plugins/make_resourceful"
# silent "git submodule init"
# gitci "Installed make_resourceful plugin"
# end
# announcing "Installing sexy_scaffold" do
# silent "git submodule add git://github.com/dfischer/sexy_scaffold.git vendor/plugins/sexy_scaffold"
# silent "git submodule init"
# gitci "Installed sexy_scaffold plugin"
# end
# announcing "Installing rspec_on_crack" do
# silent "git submodule add git://github.com/technoweenie/rspec_on_rails_on_crack.git vendor/plugins/rspec_on_rails_on_crack"
# silent "git submodule init"
# gitci "Installed rspec_on_crack plugin"
# end
# announcing "Installing acts_as_list" do
# silent "git submodule add git://github.com/veilleperso/acts_as_list.git vendor/plugins/acts_as_list"
# silent "git submodule init"
# gitci "Installed acts_as_list plugin"
# end
# announcing "Installing acts_as_state_machine" do
# silent "git submodule add git://github.com/omghax/acts_as_state_machine.git vendor/plugins/acts_as_state_machine"
# silent "git submodule init"
# gitci "Installed acts_as_state_machine plugin"
# end
# announcing "Installing restful-authentication" do
# silent "git submodule add git://github.com/technoweenie/restful-authentication.git vendor/plugins/restful-authentication"
# silent "git submodule init"
# gitci "Installed restful-authentication plugin"
# end
# announcing "Installing auto_migrations" do
# silent "git submodule add git://github.com/pjhyett/auto_migrations.git vendor/plugins/auto_migrations"
# silent "git submodule init"
# gitci "Installed auto_migrations plugin"
# end
end
end