Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save alvin2ye/2908045 to your computer and use it in GitHub Desktop.

Select an option

Save alvin2ye/2908045 to your computer and use it in GitHub Desktop.
A custom Rails template for Mongoid.
# coding: utf-8
# This is a Rails init template with MongoDB projects
#
# Mongoid, Devise, Bootstrap, jQuery, Redis, Cells, will_paginate, Carrierwave, simple_form, Settingslogic, Thin
#
# Usage
#
# $ rails new app_name -m https://raw.github.com/gist/2168014
#
initializer 'generators.rb', <<-RUBY
Rails.application.config.generators do |g|
end
RUBY
# Remove unnecessary files
run "rm README.rdoc"
run "touch README.md"
run "rm public/index.html"
run "rm public/favicon.ico"
run "rm app/assets/images/rails.png"
run "rm Gemfile"
# Setup Git
# git :init
run "rm .gitignore"
get 'https://raw.github.com/gist/2167387', '.gitignore'
@current_recipe = nil
@configs = {}
@after_blocks = []
def after_bundler(&block); @after_blocks << [@current_recipe, block]; end
@after_everything_blocks = []
def after_everything(&block); @after_everything_blocks << [@current_recipe, block]; end
@before_configs = {}
def before_config(&block); @before_configs[@current_recipe] = block; end
# Gemfile
get "https://raw.github.com/gist/2167336", "Gemfile"
# config/environments/development.rb
gsub_file 'config/environments/development.rb', /config.action_mailer.raise_delivery_errors = false/, "config.action_mailer.default_url_options = { :host => 'localhost:3000' }"
gsub_file 'config/environments/development.rb', /^([\s]{0,})config\.active_record\./," # config.active_record."
# config/application/rb
gsub_file 'config/application.rb', "require 'rails/all'",
<<-STR
require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
require "rails/test_unit/railtie"
require "sprockets/railtie"
STR
gsub_file 'config/application.rb', 'Bundler.require(*Rails.groups(:assets => %w(development test)))', 'Bundler.require *Rails.groups(:assets => %w(production development test))'
gsub_file 'config/application.rb', '# config.autoload_paths += %W(#{config.root}/extras)',
<<-STR
config.autoload_paths += %W(\#{config.root}/cells)
config.autoload_paths += %W(\#{config.root}/uploaders)
STR
gsub_file 'config/application.rb', "# config.time_zone = 'Central Time (US & Canada)'","config.time_zone = 'Beijing'"
gsub_file 'config/application.rb', "# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]", "config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]"
gsub_file 'config/application.rb', "# config.i18n.default_locale = :de", 'config.i18n.default_locale = "zh-CN"'
gsub_file 'config/application.rb', 'config.filter_parameters += [:password]', 'config.filter_parameters += [:password,:password_confirmation]'
gsub_file 'config/application.rb', '# config.active_record.schema_format = :sql', 'config.mongoid.include_root_in_json = false'
gsub_file 'config/application.rb', /^[\s]{0,}#.+/, ""
gsub_file 'config/application.rb', /\n+/,"\n"
# Generate configs
after_bundler do
run "rm config/database.yml"
# Mongoid
get "https://raw.github.com/gist/2167751", "config/mongoid.yml"
gsub_file "config/mongoid.yml", "app_name", "#{app_name}"
run "cp config/mongoid.yml config/mongoid.yml.default"
# Mongoid BaseModel
run "mkdir app/models/mongoid"
run "touch app/models/mongoid/base_model.rb"
append_file "app/models/mongoid/base_model.rb", <<-STR
# coding: utf-8
module Mongoid
module BaseModel
extend ActiveSupport::Concern
included do
scope :recent, desc(:_id)
scope :exclude_ids, Proc.new { |ids| where(:_id.nin => ids.map(&:to_i)) }
end
end
end
STR
# Redis
get "https://raw.github.com/gist/2167666", "config/redis.yml"
gsub_file "config/redis.yml", "app_name", "#{app_name}"
run "cp config/redis.yml config/redis.yml.default"
get "https://raw.github.com/gist/2167671", "config/initializers/redis.rb"
# Devise
generate("devise:install")
generate("devise User")
gsub_file "app/models/user.rb", "include Mongoid::Document", 'include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::BaseModel'
# Simple Form
generate("simple_form:install")
get "https://raw.github.com/gist/2167880", "config/initializers/simple_form.rb"
# SettingsLogic
run "touch config/setting.yml"
append_file 'config/setting.yml', <<-STR
defaults: &defaults
app_name: "#{app_name.humanize.titleize}"
footer_html: "&copy; #{app_name.humanize.titleize}."
domain: "127.0.0.1:3000"
upload_url: "http://127.0.0.1:3000/uplaods"
development:
<<: *defaults
test:
<<: *defaults
production:
<<: *defaults
STR
run "touch app/models/setting.rb"
append_file "app/models/setting.rb", <<-STR
# coding: utf-8
class Setting < Settingslogic
source "\#{Rails.root}/config/setting.yml"
namespace Rails.env
end
STR
# Uploaders
run "mkdir app/uploaders"
get "https://raw.github.com/gist/2167981", "app/uploaders/base_uploader.rb"
# Routes
gsub_file 'config/routes.rb', ".+?", ""
route "devise_for :users, :path => 'account', :controllers => { :registrations => :account }\n root :to => 'home#index'"
end
# I18n files
get "https://raw.github.com/gist/2167594", "config/locales/zh-CN.yml"
get "https://raw.github.com/gist/2167614", "config/locales/devise.zh-CN.yml"
get "https://raw.github.com/gist/2167630", "config/locales/carrierwave.zh-CN.yml"
# Run callback
@current_recipe = nil
run "bundle install"
@after_blocks.each{|b| config = @configs[b[0]] || {}; @current_recipe = b[0]; b[1].call}
@current_recipe = nil
@after_everything_blocks.each{|b| config = @configs[b[0]] || {}; @current_recipe = b[0]; b[1].call}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment