#!/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_SVN_CHECKOUT = '/Users/foca/Rails/_rails' module Helpers LINE = 80 def announcing(msg) print msg yield print "." * (LINE - msg.size - 6) puts "\e[32m[DONE]\e[0m" end def silent(command) system "#{command} &> /dev/null" end def templates { :gitignore => %w[config/database.yml tmp/* log/*.log db/*.sqlite3 db/schema.rb public/stylesheets/application.css] * "\n", :routes => ["ActionController::Routing::Routes.draw do |map|", "end"] * "\n" } end def git(message) silent "git add ." silent "git commit -m '#{message}'" end def braid(repo, dir, type="svn") 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 end if __FILE__ == $0 include Helpers app_name = ARGV.first announcing "Fetching EDGE rails" do Dir.chdir(RAILS_SVN_CHECKOUT) { silent "svn update" } end announcing "Creating application layout" do silent "ruby #{RAILS_SVN_CHECKOUT}/railties/bin/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" File.open("config/routes.rb", "w") {|f| f << templates[:routes] } 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" git "Basic rails app structure" end announcing "Freezing rails" do braid "http://dev.rubyonrails.org/svn/rails/trunk", "vendor/rails" end announcing "Installing GemsOnrails" do silent "gemsonrails" git "Froze GemsOnRails plugin" end announcing "Installing haml" do silent "haml --rails ." rake "gems:freeze", :gem => "haml" git "Froze haml gem and plugin" end announcing "Installing RSpec" do braid "http://rspec.rubyforge.org/svn/trunk/rspec", "vendor/plugins/rspec" braid "http://rspec.rubyforge.org/svn/trunk/rspec_on_rails", "vendor/plugins/rspec_on_rails" end announcing "Generating RSpec base files" do silent "script/generate rspec" git "Added RSpec base files" end announcing "Installing make_resourceful" do braid "http://svn.hamptoncatlin.com/make_resourceful/trunk", "vendor/plugins/make_resourceful" end end end