Skip to content

Instantly share code, notes, and snippets.

@AhmedNadar
Forked from paulmars/template.rb
Created February 21, 2014 16:36
Show Gist options
  • Save AhmedNadar/9137666 to your computer and use it in GitHub Desktop.
Save AhmedNadar/9137666 to your computer and use it in GitHub Desktop.
## Rails App Template
## Updated for Rails 3.2.8
## Updated on 9/24/12
## Run using $ rails new [appname] -JT -m https://raw.github.com/gist/960988/template.rb
## Gems
# General
gem 'rake', '0.9.2.2'
# Warden and Devise for security
gem 'warden', '1.1'
gem 'devise', '>= 2.0.0'
# Extra Plugins
# SASS for Templating
# gem 'sass-rails', :group => [:assets]
gem 'coffee-rails', '~> 3.2.1', :group => [:assets]
gem 'uglifier', '>= 1.0.3', :group => [:assets]
# Cucumber and Friends
gem 'ruby-debug19', :group => [:development, :test]
gem "rspec", :group => [:development, :test]
gem "rspec-rails", '~> 2.8.0.rc1', :group => [:development, :test]
gem 'remarkable_activerecord', '~> 4.0.0.alpha4', :group => [:development, :test]
gem "capybara", :group => [:development, :test]
gem "database_cleaner", :group => [:development, :test]
gem "factory_girl_rails", :group => [:development, :test]
gem 'simplecov', :require => false, :group => [:development, :test]
# development
gem 'auto_tagger', '0.2.3', :group => [:development]
# all
gem 'mysql2'
gem 'yajl-ruby'
gem 'escape_utils'
gem 'jquery-rails'
# extras
gem 'escape_utils'
gem 'will_paginate', '~> 3.0'
gem 'bootstrap-will_paginate'
gem 'formtastic', '2.0.2'
gem 'formtastic-bootstrap'
gem "less"
gem "twitter-bootstrap-rails"
## Generators
inject_into_file('config/application.rb', :after => "config.filter_parameters += [:password]") do
%q{
config.generators do |g|
g.stylesheets false
g.test_framework :rspec, :fixture => true, :views => false
g.fixture_replacement :factory_girl, :dir => "spec/support/factories"
end
# Global Sass Option
config.generators.stylesheet_engine = :sass
}
end
create_file "public/javascripts/rails.js"
# 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"
## Rspec setup
spec_helper = <<-RSPECHELPER
require 'simplecov'
SimpleCov.start
ENV["RAILS_ENV"] ||= 'test'
require 'ruby-debug'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'remarkable/active_record'
require 'rspec/autorun'
Dir[Rails.root.join("spec/support/*.rb")].each {|f| require f}
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
RSpec.configure do |config|
config.render_views
config.fixture_path = "\#{::Rails.root}/spec/fixtures"
config.use_transactional_fixtures = true
config.infer_base_class_for_anonymous_controllers = false
config.include Devise::TestHelpers, :type => :controller
end
RSPECHELPER
remove_file "spec/spec_helper.rb"
create_file "spec/spec_helper.rb", spec_helper
generate "devise:install"
generate "devise:views"
generate "devise User"
generate "bootstrap:install"
## Devise routes
routes = <<-ROUTES
devise_for :user
devise_scope :user do
get "signup", :to => "devise/registrations#new"
get "signin", :to => "devise/sessions#new"
get "signout", :to => "devise/sessions#destroy"
end
ROUTES
route routes
## Sign in files
user = <<-USER
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessible :email, :password, :password_confirmation
end
USER
remove_file "app/models/user.rb"
create_file "app/models/user.rb", user
## Sign in files
signin = <<-SIGNIN
<h2>Sign in</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 %>
<% end %>
<%= f.buttons do %>
<%= f.commit_button "Sign in" %>
<% end %>
<% end %>
<%= render :partial => "devise/links" %>
SIGNIN
remove_file "app/views/devise/sessions/new.html.erb"
create_file "app/views/devise/sessions/new.html.erb", signin
signup = <<-SIGNUP
<h2>Sign up</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 "Sign up" %>
<% end %>
<% end %>
<%= render :partial => "devise/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"
## Layout
layout = <<-LAYOUT
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>#{app_name.humanize}</title>
<%= stylesheet_link_tag "application" %>
<%= csrf_meta_tag %>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
</head>
<body>
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<%= link_to h(#{app_name.humanize}), "/", :class => "brand" %>
<div class="nav-collapse collapse">
<ul class="nav pull-right">
<% if !user_signed_in? %>
<li><%= link_to "Sign in", signin_path, :id => "signin-btn" %></li>
<li><%= link_to "Sign up", signup_path, :id => "signup-btn" %></li>
<% else %>
<li><%= link_to "Sign out", signout_path, :id => "signout-btn" %></li>
<% end %>
</ul>
</div><!--/.nav-collapse -->
</div>
</div>
</div>
<div id="body" class="container">
<% if flash.any? %>
<div class="row">
<div class="span8">
<% if flash[:notice].present? %>
<p class="notice"><%= notice %></p>
<% end %>
<% if flash[:alert].present? %>
<p class="alert"><%= alert %></p>
<% end %>
</div>
</div>
<% end %>
<%= yield %>
</div>
<%= javascript_include_tag :application %>
<script type="text/javascript">
<%= yield :javascripts %>
</script>
</body>
</html>
LAYOUT
remove_file "app/views/layouts/application.html.erb"
create_file "app/views/layouts/application.html.erb", layout
# SASS and SCSS
# create_file "app/assets/stylesheets/bootstrap.css", <<-BOOTSTRAP
# // http://twitter.github.com/bootstrap/
# BOOTSTRAP
create_file "config/initializers/formtastic.rb", <<-FORMBOOT
Formtastic::Helpers::FormHelper.builder = FormtasticBootstrap::FormBuilder
FORMBOOT
create_file "app/assets/stylesheets/_general.sass", <<-GENERAL
html
font: 13px/1.231 helvetica, clean, sans-serif
body
text-align: left
background-color: white
a, a:hover, a:visited
color: blue
.signin-bar
float: right
GENERAL
inject_into_file('app/assets/stylesheets/application.css', :after => "*= require_self") do
%q{
*= require bootstrap_and_overrides
*= require formtastic-bootstrap
}
end
## Git
gitignore = <<-END
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/**/*
public/stylesheets/*
coverage
END
# Re-Make gitignore
remove_file ".gitignore"
create_file ".gitignore", gitignore
run "bundle install"
run "rake db:migrate"
git :init
git :add => "."
# Todo
# //= require jquery
# //= require jquery_ujs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment