public
Last active

Rails 3 Template: Git Setup

  • Download Gist
hoptoad.rb
Ruby
1 2 3 4 5 6 7 8 9
hoptoad_key = ask("\r\n\r\nWant to use your Hoptoad Account?\n\r\n\rEnter your API Key, or press Enter to skip")
plugin 'hoptoad_notifier', :git => "git://github.com/thoughtbot/hoptoad_notifier.git"
unless hoptoad_key==""
initializer 'hoptoad.rb', <<-FILE
HoptoadNotifier.configure do |config|
config.api_key = '#{hoptoad_key}'
end
FILE
end
template_bundler.rb
Ruby
1 2 3 4 5 6 7 8 9
#----------------------------------------------------------------------------
# Bundle the Bundler
#----------------------------------------------------------------------------
run "mkdir gems && mkdir gems/bundler"
inside 'gems/bundler' do
run 'git init'
run 'git pull --depth 1 git://github.com/wycats/bundler.git'
run 'rm -rf .git .gitignore'
end
template_cap.rb
Ruby
1 2 3 4 5 6 7 8 9 10 11 12
#----------------------------------------------------------------------------
# Capistrano
#----------------------------------------------------------------------------
if yes?('Install Capistrano on your local system? (yes/no)')
run "sudo gem install capistrano"
capify!
file 'Capfile', <<-FILE
load 'deploy' if respond_to?(:namespace) # cap2 differentiator
Dir['vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) }
load 'config/deploy'
FILE
end
template_cleanup.rb
Ruby
1 2 3 4 5 6 7 8 9 10
#----------------------------------------------------------------------------
# Remove unnecessary Rails files
#----------------------------------------------------------------------------
run 'rm README'
run 'rm config/database.yml.example'
run 'rm config/database.yml'
run 'rm public/index.html'
run 'rm public/favicon.ico'
run 'rm public/images/rails.png'
run 'touch README'
template_compass.rb
Ruby
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
#----------------------------------------------------------------------------
# Compass
#----------------------------------------------------------------------------
 
file 'config/compass.rb', <<-CODE
# Require any additional compass plugins here.
project_type = :rails
project_path = RAILS_ROOT if defined?(RAILS_ROOT)
# Set this to the root of your project when deployed:
http_path = "/"
css_dir = "public/stylesheets/"
sass_dir = "app/stylesheets"
images_dir = "public/images"
javascripts_dir = "public/javascripts"
# To enable relative paths to assets via compass helper functions. Uncomment:
# relative_assets = true
http_images_path = "/images"
http_stylesheets_path = "/stylesheets"
http_javascripts_path = "/javascripts"
output_style = :compact
CODE
 
file 'config/initializers/compass.rb', <<-CODE
require 'compass'
# If you have any compass plugins, require them here.
Compass.configuration.parse(File.join(RAILS_ROOT, "config", "compass.config"))
Compass.configuration.environment = RAILS_ENV.to_sym
Compass.configure_sass_plugin!
CODE
template_git.rb
Ruby
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#----------------------------------------------------------------------------
# Git Setup
#----------------------------------------------------------------------------
file '.gitignore', <<-FILE
.DS_Store
log/*.log
tmp/**/*
config/database.yml
db/*.sqlite3
public/uploads/*
gems/*
!gems/cache
!gems/bundler
FILE
 
git :init
git :submodule => "init"
git :add => '.'
git :commit => "-a -m 'Initial commit'"
template_javascript.rb
Ruby
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
#----------------------------------------------------------------------------
# Choose Javascript Framework
#----------------------------------------------------------------------------
run 'mkdir public/uploads && chmod 777 public/uploads'
run 'mkdir public/ui'
 
ask_js = ask("\r\n\r\nWhat javascript framework do you want to use?\r\n\r\n(1) Prototype\r\n(2) jQuery\r\n(3) MooTools\r\n(4) RightJS")
if ["1", "2", "3", "4"].include?(ask_db_type)
@prototype = (ask_db_type=="1")
@jquery = (ask_db_type=="2")
@mootools = (ask_db_type=="3")
@rightjs = (ask_db_type=="4")
else
puts "Woops! You must enter a number between 1 and 4"
ask_js
end
 
js_framework = [:all,"jquery","mootools","rightjs"][ask_db_type.to_i - 1]
 
if !@prototype
run 'rm public/javascripts/controls.js'
run 'rm public/javascripts/dragdrop.js'
run 'rm public/javascripts/effects.js'
run 'rm public/javascripts/prototype.js'
end
 
if @jquery
run "curl -L http://jqueryjs.googlecode.com/files/jquery-1.2.6.min.js > public/javascripts/jquery.js"
end
 
if @mootools
run "curl -L http://mootools.net/download/get/mootools-1.2.4-core-yc.js > public/javascripts/mootools.js"
end
 
if @rightjs
run "curl -L http://rightjs.org/builds/current/right-min.js > public/javascripts/right.js"
run "curl -L http://rightjs.org/builds/current/right-olds-min.js > public/javascripts/right-olds.js"
end
 
#----------------------------------------------------------------------------
# Generate Application Layout
# (Assumes you have Haml and Lovely Layouts installed)
#----------------------------------------------------------------------------
file 'app/views/layouts/application.html.haml', <<-CODE
!!!
%html
%head
= title_tag "optional default title here", :prefix => "optional prefix text", :suffix => "optional suffix text"
= description_tag "optional default meta description here"
= keywords_tag "optional default meta keywords here"
= copyright_tag "optional default meta copyright notice here"
= stylesheet_link_tag 'screen.css', :media => 'screen, projection'
= stylesheet_link_tag 'print.css', :media => 'print'
= stylesheet_link_tag 'ie.css', :media => 'screen, projection'
= javascript_include_tag #{js_framework}
- body do
#wrap
#header
#logo Logo
%ul#nav
%li= link_to "Home", root_url
#page
= yield
CODE
 
#----------------------------------------------------------------------------
# Create Default Static Pages
#----------------------------------------------------------------------------
route "map.root :controller => 'pages', :action => 'index'"
generate :controller, "pages index"
file 'app/views/pages/index.html.haml', <<-END
%h1 Home Page
%p
:textile
Edit me in *app/views/pages/index.html.haml*
END
template_log_rotator.rb
Ruby
1 2 3 4 5 6
#----------------------------------------------------------------------------
# Rotate log files (50 files max at 1MB each)
#----------------------------------------------------------------------------
log_path = '#{Rails.root}/log/#{Rails.env}.log'
gsub_file 'config/application.rb', /(< Rails::Application.*)/ , "\\1\n config.logger =
Logger.new(\"#{log_path}\", 50, 1048576)"
template_orm.rb
Ruby
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
#----------------------------------------------------------------------------
# Database
#----------------------------------------------------------------------------
ask_db_type = ask("\r\n\r\nWhich database type would you like to use?\r\n\r\n(1) SQLite\r\n(2) MySQL\r\n(3) PostgreSQL\r\n(4) MongoDB")
if ["1", "2", "3", "4"].include?(ask_db_type)
sqlite = (ask_db_type=="1")
mysql = (ask_db_type=="2")
postgres = (ask_db_type=="3")
mongodb = (ask_db_type=="4")
else
puts "Woops! You must enter a number between 1 and 4"
ask_db_type
end
db_type = ["sqlite3","mysql","postgresql","mongodb"][ask_db_type.to_i - 1]
 
#----------------------------------------------------------------------------
# ORM
#----------------------------------------------------------------------------
ask_orm_type = ask("\r\n\r\nWhich ORM would you like to use?\n\r\n\r(1) ActiveRecord\n\r(2) MongoMapper")
if %w(1 2).include?(ask_orm_type)
activerecord = (ask_orm_type==1)
mongomapper = (ask_orm_type==2)
else
puts "Woops! You must enter a number between 1 and 2"
ask_orm_type
end
 
db_name = ask("\r\n\r\nWhat should I call the database?\r\n\r\n(Leave blank to use application name)")
if sqlite
file 'config/database.yml', <<-CODE
development:
adapter: sqlite3
host: localhost
database: db/development.sqlite3
pool: 5
timeout: 5000
test: &TEST
adapter: #{db_type}
host: localhost
database: db/test.sqlite3
pool: 5
timeout: 5000
 
production:
adapter: #{db_type}
host: localhost
database: db/production.sqlite3
pool: 5
timeout: 5000
 
cucumber:
<<: *TEST
CODE
else
file 'config/database.yml', <<-CODE
development:
adapter: #{db_type}
host: localhost
database: #{db_name}_development
 
test: &TEST
adapter: #{db_type}
host: localhost
database: #{db_name}_test
 
production:
adapter: #{db_type}
host: localhost
database: #{db_name}_production
 
cucumber:
<<: *TEST
CODE
if mongomapper
#----------------------------------------------------------------------------
# MongoMapper Configuration
#----------------------------------------------------------------------------
plugin "git://github.com/compressed/mongo_session_store.git"
file "config/initializers/mongo.rb", <<-CODE
db_config = YAML::load(File.read(RAILS_ROOT + "/config/database.yml")) if db_config[Rails.env] && db_config[Rails.env]['adapter'] == 'mongodb'
mongo = db_config[Rails.env]
MongoMapper.connection = Mongo::Connection.new(mongo['localhost'])
MongoMapper.database = mongo['#{db_name}']
end
CODE
 
#----------------------------------------------------------------------------
# Setup root.rb
#----------------------------------------------------------------------------
run "rm config/root.rb"
environment = '#{environment}'
vendor_rails = '#{vendor_rails}'
file "Gemfile", <<-END
gem "mongo_mapper", :git => "git://github.com/jnunemaker/mongomapper.git"
END
file "config/root.rb", <<-FILE
# Use Bundler (preferred)
environment = File.expand_path('../../vendor/gems/environment', __FILE__)
if File.exist?("#{environment}.rb")
require environment
 
# Use 2.x style vendor/rails and RubyGems
else
vendor_rails = File.expand_path('../../vendor/rails', __FILE__)
if File.exist?(vendor_rails)
Dir["#{vendor_rails}/*/lib"].each { |path| $:.unshift(path) }
end
require 'rubygems'
end
 
#require 'rails/all'
 
# To pick the frameworks you want, remove 'require "rails/all"'
# and list the framework railties that you want:
#
require "active_model/railtie"
#require "active_record/railtie"
require "action_controller/railtie"
require "action_view/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
FILE
end
end
 
#----------------------------------------------------------------------------
# Sessions
#----------------------------------------------------------------------------
if activerecord
file 'session_store.rb', <<-END
ActionController::Base.session_store = :active_record_store
END
end
if mongomapper
file 'session_store.rb', <<-END
require 'mongo_session_store'
ActionController::Base.session_store = MongoMapper::SessionStore
END
end

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.