# >---------------------------------------------------------------------------< # # _____ _ _ __ ___ _ # | __ \ (_) | \ \ / (_) | | # | |__) |__ _ _| |___\ \ /\ / / _ ______ _ _ __ __| | # | _ // _` | | / __|\ \/ \/ / | |_ / _` | '__/ _` | # | | \ \ (_| | | \__ \ \ /\ / | |/ / (_| | | | (_| | # |_| \_\__,_|_|_|___/ \/ \/ |_/___\__,_|_| \__,_| # # This template was generated by RailsWizard, the amazing and awesome Rails # application template builder. Get started at http://railswizard.org # # >---------------------------------------------------------------------------< # >----------------------------[ Initial Setup ]------------------------------< initializer 'generators.rb', <<-RUBY Rails.application.config.generators do |g| end RUBY @recipes = ["activerecord", "devise", "pow", "rspec", "settingslogic"] def recipes; @recipes end def recipe?(name); @recipes.include?(name) end def say_custom(tag, text); say "\033[1m\033[36m" + tag.to_s.rjust(10) + "\033[0m" + " #{text}" end def say_recipe(name); say "\033[1m\033[36m" + "recipe".rjust(10) + "\033[0m" + " Running #{name} recipe..." end def say_wizard(text); say_custom(@current_recipe || 'wizard', text) end def ask_wizard(question) ask "\033[1m\033[30m\033[46m" + (@current_recipe || "prompt").rjust(10) + "\033[0m\033[36m" + " #{question}\033[0m" end def yes_wizard?(question) answer = ask_wizard(question + " \033[33m(y/n)\033[0m") case answer.downcase when "yes", "y" true when "no", "n" false else yes_wizard?(question) end end def no_wizard?(question); !yes_wizard?(question) end def multiple_choice(question, choices) say_custom('question', question) values = {} choices.each_with_index do |choice,i| values[(i + 1).to_s] = choice[1] say_custom (i + 1).to_s + ')', choice[0] end answer = ask_wizard("Enter your selection:") while !values.keys.include?(answer) values[answer] end @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 # >-----------------------------[ ActiveRecord ]------------------------------< @current_recipe = "activerecord" @before_configs["activerecord"].call if @before_configs["activerecord"] say_recipe 'ActiveRecord' config = {} config['database'] = multiple_choice("Which database are you using?", [["MySQL", "mysql"], ["Oracle", "oracle"], ["PostgreSQL", "postgresql"], ["SQLite", "sqlite3"], ["Frontbase", "frontbase"], ["IBM DB", "ibm_db"]]) if true && true unless config.key?('database') config['auto_create'] = yes_wizard?("Automatically create database with default configuration?") if true && true unless config.key?('auto_create') @configs[@current_recipe] = config if config['database'] say_wizard "Configuring '#{config['database']}' database settings..." old_gem = gem_for_database @options = @options.dup.merge(:database => config['database']) gsub_file 'Gemfile', "gem '#{old_gem}'", "gem '#{gem_for_database}'" template "config/databases/#{@options[:database]}.yml", "config/database.yml.new" run 'mv config/database.yml.new config/database.yml' end after_bundler do rake "db:create:all" if config['auto_create'] end # >--------------------------------[ Devise ]---------------------------------< @current_recipe = "devise" @before_configs["devise"].call if @before_configs["devise"] say_recipe 'Devise' @configs[@current_recipe] = config gem 'devise' after_bundler do generate 'devise:install' if recipes.include? 'mongo_mapper' gem 'mm-devise' gsub_file 'config/initializers/devise.rb', 'devise/orm/', 'devise/orm/mongo_mapper_active_model' generate 'mongo_mapper:devise User' elsif recipes.include? 'mongoid' gsub_file 'config/initializers/devise.rb', 'devise/orm/active_record', 'devise/orm/mongoid' end generate 'devise user' end # >----------------------------------[ Pow ]----------------------------------< @current_recipe = "pow" @before_configs["pow"].call if @before_configs["pow"] say_recipe 'Pow' @configs[@current_recipe] = config run "ln -s #{destination_root} ~/.pow/#{app_name}" say_wizard "App is available at http://#{app_name}.dev/" # >---------------------------------[ RSpec ]---------------------------------< @current_recipe = "rspec" @before_configs["rspec"].call if @before_configs["rspec"] say_recipe 'RSpec' @configs[@current_recipe] = config gem 'rspec-rails', '>= 2.0.1', :group => [:development, :test] inject_into_file "config/initializers/generators.rb", :after => "Rails.application.config.generators do |g|\n" do " g.test_framework = :rspec\n" end after_bundler do generate 'rspec:install' end # >-----------------------------[ Settingslogic ]-----------------------------< @current_recipe = "settingslogic" @before_configs["settingslogic"].call if @before_configs["settingslogic"] say_recipe 'Settingslogic' @configs[@current_recipe] = config gem 'settingslogic' say_wizard "Generating config/application.yml..." append_file "config/application.rb", <<-RUBY require 'settings' RUBY create_file "lib/settings.rb", <<-RUBY class Settings < Settingslogic source "#\{Rails.root\}/config/application.yml" namespace Rails.env end RUBY create_file "config/application.yml", <<-YAML defaults: &defaults cool: saweet: nested settings neat_setting: 24 awesome_setting: <%= "Did you know 5 + 5 = #{5 + 5}?" %> development: <<: *defaults neat_setting: 800 test: <<: *defaults production: <<: *defaults YAML @current_recipe = nil # >-----------------------------[ Run Bundler ]-------------------------------< say_wizard "Running Bundler install. This will take a while." run 'bundle install' say_wizard "Running after Bundler callbacks." @after_blocks.each{|b| config = @configs[b[0]] || {}; @current_recipe = b[0]; b[1].call} @current_recipe = nil say_wizard "Running after everything callbacks." @after_everything_blocks.each{|b| config = @configs[b[0]] || {}; @current_recipe = b[0]; b[1].call}