Skip to content

Instantly share code, notes, and snippets.

@graysonchen
Forked from DotHide/rails-api-template.rb
Created April 16, 2019 14:56
Show Gist options
  • Save graysonchen/f5af430367258e773d80c10542c10654 to your computer and use it in GitHub Desktop.
Save graysonchen/f5af430367258e773d80c10542c10654 to your computer and use it in GitHub Desktop.
Rails 5 API Application Template
require 'erb'
require 'ostruct'
# ====================
# 0. Helper
# ====================
def render_file(text, variables)
struct = OpenStruct.new(variables)
rendered_file = ERB.new(text).result(struct.instance_eval { binding })
end
# ====================
# 1. Gem File
# ====================
run 'rm Gemfile && touch Gemfile'
add_source 'https://rubygems.org/'
gem 'puma', '~> 3.0'
gem 'rails', '~> 5.0'
gem 'slowpoke'
gem 'lograge'
gem 'wisper'
gem 'active_model_serializers'
gem 'rack-attack' # Rack middleware for blocking & throttling abusive requests
gem_group :development do
gem 'thin'
gem 'capistrano', require: false
gem 'capistrano-bundler', require: false
gem 'capistrano-chruby', require: false
gem 'capistrano-rails', require: false
gem 'capistrano3-puma', require: false
gem 'capistrano-sidekiq', require: false
gem 'better_errors'
end
gem_group :test do
gem 'rspec'
gem 'factory_girl_rails'
gem 'database_cleaner'
end
gem_group :development, :test do
gem 'spring'
gem 'pry-rails'
gem 'pry-byebug'
gem 'awesome_print'
gem 'faker'
gem 'binding_of_caller'
end
run 'bundle install'
# ====================
# 2. application.rb
# ====================
generators_config = <<-EOS
config.generators do |g|
g.test_framework :rspec
g.fixture_replacement :factory_girl, dir: 'spec/factories'
end
EOS
environment "config.time_zone = 'Beijing'"
environment "config.i18n.available_locales = ['zh-CN', :en]"
environment "config.i18n.default_locale = 'zh-CN'"
environment 'config.i18n.fallbacks = true'
environment 'config.middleware.use Rack::Attack'
environment generators_config
# ====================
# 3. database.yml
# ====================
database_temp = <<-EOS
default: &default
adapter: mysql2
encoding: utf8
pool: 5
username: root
password:
host: localhost
development:
<<: *default
database: <%= app_name %>_development
test:
<<: *default
database: <%= app_name %>_test
EOS
run 'rm config/database.yml'
file 'config/database.yml', render_file(database_temp, app_name: app_name.downcase)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment