Skip to content

Instantly share code, notes, and snippets.

@ecavazos
Created October 20, 2010 05:38
Show Gist options
  • Save ecavazos/635835 to your computer and use it in GitHub Desktop.
Save ecavazos/635835 to your computer and use it in GitHub Desktop.
A quick and dirty script to quickly bootstrap a sinatra app.
#!/usr/bin/env ruby
name = ARGV[0]
raise ArgumentError, "You must provide a project name" if name.nil?
def run(cmd)
`#{cmd}`
end
def mkdir(dir)
puts " + #{dir}/"
run "mkdir #{dir}"
end
def touch(file)
puts " ~ #{file}"
run "touch #{file}"
end
def write(file)
File.open(file, 'w') { |f| f.write(yield) }
end
run "mkdir #{name}"
Dir.chdir name
mkdir "public"
mkdir "views"
mkdir "lib"
touch "lib/bootstrapper.rb"
touch "app.rb"
touch "config.ru"
touch "Gemfile"
touch "README"
touch ".rspec"
mkdir "spec"
mkdir "spec/lib"
touch "spec/spec_helper.rb"
touch "spec/app_spec.rb"
# =========================================================
# lib/bootstrapper.rb
# =========================================================
write('lib/bootstrapper.rb') do
<<-TXT
require 'rubygems'
require 'bundler'
Bundler.setup unless File.exists?(File.expand_path('../.bundle/environment', __FILE__))
Bundler.require(:default)
require 'sinatra/base'
TXT
end
# =========================================================
# app.rb
# =========================================================
write('app.rb') do
<<-TXT
require 'bootstrapper'
class App < Sinatra::Base
configure do
set :app_file, __FILE__
set :logging, Proc.new { !test? }
set :run, Proc.new { !test? }
set :dump_errors, true
set :haml, {:format => :html5 }
end
get '/' do
'Hello!'
end
end
TXT
end
# =========================================================
# config.ru
# =========================================================
write('config.ru') do
<<-TXT
# add lib dir to load path
$:.unshift File.expand_path('../lib', __FILE__)
require File.expand_path('../app', __FILE__)
run App
TXT
end
# =========================================================
# Gemfile
# =========================================================
write('Gemfile') do
<<-TXT
source 'http://rubygems.org'
gem 'sinatra', '1.0', :require => false
gem 'haml'
gem 'sass'
group :test do
gem 'rack-test'
gem 'rspec', '2.0.1'
end
TXT
end
# =========================================================
# README
# =========================================================
write('README') do
<<-TXT
I still wet the bed.
TXT
end
# =========================================================
# .rspec
# =========================================================
write('.rspec') do
<<-TXT
--color
--format progress
TXT
end
# =========================================================
# spec/spec_helper.rb
# =========================================================
write('spec/spec_helper.rb') do
<<-TXT
require 'rubygems'
require 'rack/test'
# absolute path to lib folder
lib_dir = File.expand_path('../../lib', __FILE__)
# insert lib folder into load_paths if it's not already
$:.unshift lib_dir unless $:.include?(lib_dir)
TXT
end
# =========================================================
# spec/app_spec.rb
# =========================================================
write('spec/app_spec.rb') do
<<-TXT
require File.expand_path('../spec_helper', __FILE__)
require File.expand_path('../../app', __FILE__)
App.set :environment, :test
describe "App" do
include Rack::Test::Methods
def app
App
end
it "should respond to /" do
get '/'
last_response.should be_ok
end
end
TXT
end
puts "\n > #{name} is ready for your hawt codez!"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment