Skip to content

Instantly share code, notes, and snippets.

@paulmars
Forked from martinisoft/tpl-cukeapp.rb
Last active September 25, 2015 17:57
Show Gist options
  • Select an option

  • Save paulmars/960988 to your computer and use it in GitHub Desktop.

Select an option

Save paulmars/960988 to your computer and use it in GitHub Desktop.
Rails, RSpec, Factory_Girl, SASS, Devise, Rails Admin
## Rails App Template
## Updated for Rails 3.2.2
## Updated on 3/10/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]
# development
gem 'auto_tagger', '0.2.3', :group => [:development]
gem 'rails3-generators', '0.17.4', :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"
generate "devise:install"
generate "devise:views"
generate "devise User"
generate "bootstrap:install"
## Devise routes
routes = <<-ROUTES
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
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 id="hd" class="container">
<div class="row">
<div id="titlebar" class="span8">
<h1><%= link_to h(#{app_name.humanize}), "/" %></h1>
</div>
<div class="span4">
<ul class="signin-bar unstyled">
<% if !user_signed_in? %>
<li><%= link_to "Sign in", new_user_session_url, :id => "signin-btn", :class => "btn" %></li>
<li><%= link_to "Sign up", new_user_registration_url, :id => "signup-btn", :class => "btn" %></li>
<% else %>
<li><%= link_to "Sign out", destroy_user_session_url, {:method => :delete, :id => "signout-btn", :class => "btn"} %></li>
<% end %>
</ul>
</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
background-color: #eee
#hd::after, #bd::after, #ft::after
content: "."
display: block
height: 0
clear: both
visibility: hidden
body
text-align: left
background-color: white
a, a:hover, a:visited
color: blue
#hd
margin-bottom: 0.5em
#hd h1
font-size: 1.5em
.signin-bar
float: right
GENERAL
inject_into_file('app/assets/stylesheets/application.css', :after => "*= require_self") do
%q{
*= require bootstrap
*= require formtastic-bootstrap
}
end
## 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 => "."
# Todo
# //= require jquery
# //= require jquery_ujs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment