Skip to content

Instantly share code, notes, and snippets.

@hauleth
Last active January 27, 2016 10:22
Show Gist options
  • Save hauleth/d7dd5c7dd1000501d3ee to your computer and use it in GitHub Desktop.
Save hauleth/d7dd5c7dd1000501d3ee to your computer and use it in GitHub Desktop.
Hauleth's template
AllCops:
Exclude:
- bin/*
- config/**/*
- coverage/**/*
- db/**/*
- doc/**/*
- log/**/*
- public/**/*
- script/**/*
- tmp/**/*
- vendor/**/*
RunRailsCops: true
MethodCalledOnDoEndBlock:
Enabled: true
ClassAndModuleChildren:
Enabled: false
Documentation:
Exclude:
- app/api/**/*
- app/controllers/**/*
- app/helpers/**/*
- app/presenters/**/*
# vi: ft=ruby
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
SimpleCov::Formatter::HTMLFormatter
]
SimpleCov.use_merging true
SimpleCov.start 'rails' do
add_filter '/test/'
add_filter '/features/'
add_filter '/config/'
add_filter '/lib/'
add_filter '/vendor/'
# Groups
add_group 'Controllers', 'app/controllers'
add_group 'API', 'app/api'
add_group 'Models', 'app/models'
add_group 'Decorators', 'app/decorators'
add_group 'Helpers', 'app/helpers'
add_group 'Mailers', 'app/mailers'
add_group 'Uploaders', 'app/uploaders'
add_group 'Jobs', 'app/jobs'
add_group 'Services', 'app/services'
end
app:
build: .
volumes:
- ".:/app"
environment:
DATABASE_URL: postgresql://postgres@db/
web:
extends:
file: docker-compose.yml
service: app
command: puma -c config/puma.rb -p 5000
ports:
- 5000:5000
links:
- db
db:
image: postgres:9.4
FROM ruby:2.2.2
RUN apt-get update -qq && apt-get install -y npm && \
ln -s /usr/bin/nodejs /usr/bin/node
RUN mkdir /app
WORKDIR /app
ADD Gemfile /app/Gemfile
ADD Gemfile.lock /app/Gemfile.lock
RUN bundle install
ADD . /app
ENTRYPOINT ["bundle", "exec"]
# Hauleth's Rails app template
require 'net/http'
# Sass helpers and nicer views
gem 'autoprefixer-rails'
# Faster HTML escaping
gem 'escape_utils'
# Better views
gem 'curly-templates', '~> 2.3'
# Translations
gem 'r18n-rails'
# Inline email CSS
gem 'roadie'
gem 'roadie-rails'
# Better logging
gem 'lograge'
# Dokku/Heroku deployment
gem 'rails_12factor'
# Better server
gem 'unicorn'
gem_group :doc do
gem 'yard', require: false
gem 'yard-tomdoc', require: false
end
gem_group :development do
# Check for N+1 queries
gem 'bullet'
# Find missing indices
gem 'lol_dba'
# Benchmarks
gem 'derailed'
gem 'stackprof'
# Check popular vulnerabilities
gem 'brakeman', require: false
gem 'rubocop', require: false
# Profile your app
gem 'rack-mini-profiler'
gem 'flamegraph'
# Check Rails internals in Chrome
gem 'meta_request'
gem 'quiet_assets'
# Create model annotations
gem 'annotate'
# STFU
gem 'quiet_assets'
end
gem_group :development, :test do
# Use Spinach for acceptance tests
gem 'spinach-rails'
# Fabricate models instead of fixtures
gem 'fabrication'
gem 'ffaker'
if RUBY_VERSION =~ /^2\./
# Enable debugging in Ruby 2
gem 'byebug'
gem 'pry-byebug'
end
gem 'pry-rails'
end
gem_group :test do
# Use Double Ruby (RR) as mock mocking library
gem 'rr', require: false
# Use MiniTest::Spec instead of MiniTest::Unit
gem 'minitest-rails'
gem 'minitest-reporters', require: false
gem 'minitest-extra-matchers', require: false
gem 'minitest-capybara'
# Coverage reports
gem 'simplecov', require: false
# JavaScript test runner
gem 'konacha'
gem 'database_cleaner'
end
# Configure generators
application <<-CONF
config.generators do |g|
# Use Fabrication gem
g.test_framework :minitest, fixture_replacement: :fabrication, spec: true
g.fixture_replacement :fabrication, dir: 'test/fabricators'
# Do not generate redundant
g.helper false
g.stylesheets false
g.javascripts false
end
CONF
if yes?('Would you like to add Sorcery?')
gem 'sorcery'
# Automatically add Pundit gem
gem 'pundit'
after_bundle do
model_name = ask('What would you like the user model to be called? [user]')
model_name = 'user' if model_name.blank?
modules = ask('Any additional modules (space separated, available http_basic_auth, external, remember_me, reset_password, user_activation)?').split(/[\n\t, ]/)
# Generate Sorcery model
generate 'sorcery:install', '--model', model_name, *modules
generate 'pundit:install'
end
end
run 'rm README.rdoc'
run 'touch README.md'
file '.yardopts', <<-YARD
--hide-void-return
--no-private
--plugin tomdoc
--markup markdown
--markup-provider redcarpet
YARD
file '.simplecov', Net::HTTP.get(URI.parse('https://gist.githubusercontent.com/hauleth/d7dd5c7dd1000501d3ee/raw/.simplecov'))
file '.rubocop.yml', Net::HTTP.get(URI.parse('https://gist.githubusercontent.com/hauleth/d7dd5c7dd1000501d3ee/raw/.rubocop.yml'))
file 'Dockerfile', Net::HTTP.get(URI.parse('https://gist.githubusercontent.com/hauleth/d7dd5c7dd1000501d3ee/raw/Dockerfile'))
file 'docker-compose.yml', Net::HTTP.get(URI.parse('https://gist.githubusercontent.com/hauleth/d7dd5c7dd1000501d3ee/raw/docker-compose.yml'))
file 'config/puma.rb', Net::HTTP.get(URI.parse('https://gist.githubusercontent.com/hauleth/d7dd5c7dd1000501d3ee/raw/puma.rb'))
file 'test/test_helper.rb', Net::HTTP.get(URI.parse('https://gist.githubusercontent.com/hauleth/d7dd5c7dd1000501d3ee/raw/test_helper.rb'))
initializer 'escape_utils.rb', <<-DOC
begin
require 'escape_utils/html/rack' # to patch Rack::Utils
require 'escape_utils/html/erb' # to patch ERB::Util
require 'escape_utils/html/cgi' # to patch CGI
rescue LoadError
Rails.logger.info 'Escape_utils is not in the gemfile'
end
DOC
after_bundle do
system 'rubocop -RaD .'
# Initialize Git repository
git :init
git add: '.'
git commit: '-nm "Initial commit"'
end
# Coverage reports
require 'simplecov'
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
require 'minitest/spec'
# Nicer output
unless ENV['CI']
require 'minitest/reporters'
Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new,
ENV,
Minitest.backtrace_filter)
end
# RR mocking library
require 'rr'
# Extra matchers
require 'minitest/extra/matchers'
DatabaseCleaner.strategy = :transaction
Dir['test/support/*'].each { |file| load file }
class MiniTest::Spec
include Minitest::Extra::Matchers::Subject
include Minitest::Extra::Matchers::Received
include Minitest::Extra::Matchers::Pending
include Minitest::Extra::Matchers::DOM
before :each do
DatabaseCleaner.start
end
after :each do
DatabaseCleaner.clean
end
end
workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['MAX_THREADS'] || 5)
threads threads_count, threads_count
preload_app!
rackup DefaultRackup
port ENV['PORT'] || 3000
environment ENV['RACK_ENV'] || 'development'
on_worker_boot do
# Worker specific setup for Rails 4.1+
# See: https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#on-worker-boot
ActiveRecord::Base.establish_connection
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment