Skip to content

Instantly share code, notes, and snippets.

@vwall
Forked from paulmars/template.rb
Created May 17, 2011 03:30
Show Gist options
  • Save vwall/975883 to your computer and use it in GitHub Desktop.
Save vwall/975883 to your computer and use it in GitHub Desktop.
Rails 3, RSpec, Cucumber, Factory_Girl, HAML, SASS, Devise, Formtastic Template
## Rails App Template
## Updated for Rails 3.0.7
## Created on 10/23/10
## Updated on 5/7/11
## Run using $ rails new [appname] -JT -m tpl-cukeapp.rb
## Gems
# Warden and Devise for security
gem 'warden', '1.0.4'
gem 'devise', '1.3.0'
# Extra Plugins
gem 'formtastic', '1.2.3'
gem 'escape_utils'
# HAML and SASS for Templating
gem 'sass'
gem 'haml'
gem 'haml-rails'
# Cucumber and Friends
gem "rspec-rails", ">= 2.5.0", :group => [:test, :cucumber]
gem "cucumber-rails", ">= 0.4.1", :group => [:test, :cucumber]
gem "capybara", :group => [:test, :cucumber]
gem "database_cleaner", :group => [:test, :cucumber]
gem "factory_girl_rails", :group => [:test, :cucumber]
gem "launchy", ">= 0.3.7", :group => [:test, :cucumber]
gem "spork", ">= 0.8.4", :group => [:test, :cucumber]
# development
gem 'auto_tagger', '0.2.3', :group => [:development]
gem 'rails3-generators', '0.17.4', :group => [:development]
# all
gem 'mysql2', '0.2.6'
gem 'json_pure', '1.4.6'
## Generators
inject_into_file('config/application.rb', :after => "config.filter_parameters += [:password]") do
%q{
config.generators do |g|
g.stylesheets false
g.template_engine :haml
g.test_framework :rspec, :fixture => true, :views => false
g.fixture_replacement :factory_girl, :dir => "spec/support/factories"
end
# Global Sass Option
Sass::Plugin.options[:template_location] = { 'app/stylesheets' => 'public/stylesheets' }
}
end
# Latest jQuery UJS
# get "https://github.com/rails/jquery-ujs/raw/master/src/rails.js", "public/javascripts/rails.js"
# HACK: Since the get method hates https and redirects
jquery = open("https://github.com/rails/jquery-ujs/raw/master/src/rails.js").read
create_file "public/javascripts/rails.js", jquery
# Replace the blank one with jQuery served via Google CDN
gsub_file 'config/application.rb', 'config.action_view.javascript_expansions[:defaults] = %w()', 'config.action_view.javascript_expansions[:defaults] = %w(http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js rails.js)'
# Run all the generators
generate "rspec:install"
generate "cucumber:install --capybara --rspec --spork"
generate "devise:install"
generate "devise:views"
generate "devise User"
generate "formtastic:install"
## Devise routes
routes = <<-ROUTES
devise_scope :user do
get "signup", :to => "devise/registrations#new"
get "login", :to => "devise/sessions#new"
get "logout", :to => "devise/sessions#destroy"
end
ROUTES
route routes
## Login files
signin = <<-SIGNIN
<h2>Login</h2>
<%= semantic_form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
<%= f.inputs do %>
<%= f.input :email, :as => :email %>
<%= f.input :password, :as => :password %>
<% if devise_mapping.rememberable? -%>
<%= f.input :remember_me, :as => :boolean %>
<% end -%>
<% end %>
<%= f.buttons do %>
<%= f.commit_button "Login" %>
<% end %>
<% end %>
<%= render :partial => "devise/shared/links" %>
SIGNIN
remove_file "app/views/devise/sessions/new.html.erb"
create_file "app/views/devise/sessions/new.html.erb", signin
signup = <<-SIGNUP
<h2>Signup</h2>
<%= semantic_form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<%= f.inputs do %>
<%= f.input :email, :as => :email %>
<%= f.input :password, :as => :password %>
<% end %>
<%= f.buttons do %>
<%= f.commit_button "Signup" %>
<% end %>
<% end %>
<%= render :partial => "devise/shared/links" %>
SIGNUP
remove_file "app/views/devise/registrations/new.html.erb"
create_file "app/views/devise/registrations/new.html.erb", signup
# Clear the default index
remove_file "public/index.html"
remove_file "public/images/rails.png"
# Make a blank application javascript file
remove_file "public/javascripts/application.js"
create_file "public/javascripts/application.js"
# Make the SASS directory and base file
empty_directory "app/stylesheets"
default_style = <<-LAYOUT
body
text-align: left
font-size: 12px
a, a:hover, a:visited
color: blue
.horizontal-list li
display: inline
.horizontal-list li a
padding: 0.1em
#hd h1
font-size: 1.5em
.login-bar
float: right
LAYOUT
create_file "app/stylesheets/application.sass", default_style
## Layout
layout = <<-LAYOUT
!!!
%html
%head
%title #{app_name.humanize}
= stylesheet_link_tag "http://yui.yahooapis.com/2.8.0r4/build/reset-fonts-grids/reset-fonts-grids.css"
= stylesheet_link_tag :all
= javascript_include_tag :defaults
= csrf_meta_tag
%body#doc
.hd
%ol.login-bar.horizontal-list
- if !user_signed_in?
%li= link_to "Login", login_url
%li= link_to "Signup", signup_url
- else
%li= current_user.name
%li= link_to "Logout", logout_url
%h1 #{app_name.humanize}
.bd
= yield
.ft
LAYOUT
remove_file "app/views/layouts/application.html.erb"
create_file "app/views/layouts/application.html.haml", layout
## Git
gitignore = <<-END
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/**/*
public/stylesheets/*
END
# Re-Make gitignore
remove_file ".gitignore"
create_file ".gitignore", gitignore
run "bundle install"
run "rake db:migrate"
git :init
git :add => "."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment