require'rbconfig'# Small addition to enable the enqueing of "bundle install"classRails::Generator::Commands::Createdefrun_bundler(destination_root)# thanks to http://spectator.in/2011/01/28/bundler-in-subshells/bundler_vars=%w(BUNDLE_GEMFILE RUBYOPT )command=%{"#{Gem.ruby}" -rubygems "#{Gem.bin_path('bundler','bundle')}" install --gemfile="#{File.join(File.expand_path(destination_root),'Gemfile')}"}beginbundled_env=ENV.to_hashbundler_vars.each{|var|ENV.delete(var)}print`#{command}`ensureENV.replace(bundled_env)endendendclassInstanceGenerator<Rails::Generator::BaseDEFAULT_SHEBANG=File.join(Config::CONFIG['bindir'],Config::CONFIG['ruby_install_name'])DATABASES=%w( mysql postgresql sqlite3 sqlserver db2 )MYSQL_SOCKET_LOCATIONS=["/tmp/mysql.sock",# default"/var/run/mysqld/mysqld.sock",# debian/gentoo"/var/tmp/mysql.sock",# freebsd"/var/lib/mysql/mysql.sock",# fedora"/opt/local/lib/mysql/mysql.sock",# fedora"/opt/local/var/run/mysqld/mysqld.sock",# mac + darwinports + mysql"/opt/local/var/run/mysql4/mysqld.sock",# mac + darwinports + mysql4"/opt/local/var/run/mysql5/mysqld.sock"# mac + darwinports + mysql5]default_options:db=>"sqlite3",:shebang=>DEFAULT_SHEBANG,:freeze=>falsedefinitialize(runtime_args,runtime_options={})superusageifargs.empty?usage("Databases supported for preconfiguration are: #{DATABASES.join(", ")}")if(options[:db]&&!DATABASES.include?(options[:db]))@destination_root=args.shiftenddefmanifest# The absolute location of the TrustyCms filesroot=File.expand_path(TRUSTY_CMS_ROOT)# Use /usr/bin/env if no special shebang was specifiedscript_options={:chmod=>0755,:shebang=>options[:shebang]==DEFAULT_SHEBANG?nil:options[:shebang]}dispatcher_options={:chmod=>0755,:shebang=>options[:shebang]}recorddo|m|# Root directorym.directory""# Standard files and directoriesbase_dirs=%w(config config/environments config/initializers db log script public vendor/plugins vendor/extensions)text_files=%w(CHANGELOG.md CONTRIBUTORS.md LICENSE.md INSTALL.md README.md)environments=Dir["#{root}/config/environments/*.rb"]bundler_compatibility_files=%w{config/preinitializer.rb}schema_file=%w{db/schema.rb}scripts=Dir["#{root}/script/**/*"].reject{|f|f=~/(destroy|generate|plugin)$/}public_files=["public/.htaccess"]+Dir["#{root}/public/**/*"]test_files=["config/cucumber.yml"]files=base_dirs+text_files+environments+bundler_compatibility_files+schema_file+scripts+public_files+test_filesfiles.map!{|f|f=$1iff=~%r{^#{root}/(.+)$};f}files.sort!files.eachdo|file|casewhenFile.directory?("#{root}/#{file}")m.directoryfilewhenfile=~%r{^script/}m.fileradiant_root(file),file,script_optionswhenfile=~%r{^public/dispatch}m.fileradiant_root(file),file,dispatcher_optionselsem.fileradiant_root(file),fileendend# script/generatem.file"instance_generate","script/generate",script_options# database.yml and .htaccessm.template"databases/#{options[:db]}.yml","config/database.yml",:assigns=>{:app_name=>File.basename(File.expand_path(@destination_root)),:socket=>options[:db]=="mysql"?mysql_socket_location:nil}# Instance Gemfilem.template"instance_gemfile","Gemfile",:assigns=>{:radiant_version=>TrustyCms::VERSION.to_s,:db=>options[:db]}# Instance Rakefilem.file"instance_rakefile","Rakefile"# Config.ru is useful in rack-based situations like Powm.file"instance_config.ru","config.ru"# Instance Configurationsm.file"instance_routes.rb","config/routes.rb"m.template"instance_environment.rb","config/environment.rb",:assigns=>{:radiant_environment=>File.join(File.dirname(__FILE__),'templates',radiant_root("config/environment.rb")),:app_name=>File.basename(File.expand_path(@destination_root))}m.template"instance_boot.rb","config/boot.rb"m.file"instance_radiant_config.rb","config/initializers/radiant_config.rb"# Run bundlerm.run_bundler@destination_rootm.readmeradiant_root("INSTALL.md")endendprotecteddefbanner"Usage: #{$0} /path/to/trusty_cms/app [options]"enddefadd_options!(opt)opt.separator''opt.separator'Options:'opt.on("-r","--ruby=path",String,"Path to the Ruby binary of your choice (otherwise scripts use env, dispatchers current path).","Default: #{DEFAULT_SHEBANG}"){|v|options[:shebang]=v}opt.on("-d","--database=name",String,"Preconfigure for selected database (options: #{DATABASES.join(", ")}).","Default: sqlite3"){|v|options[:db]=v}enddefmysql_socket_locationRUBY_PLATFORM=~/mswin32/?MYSQL_SOCKET_LOCATIONS.find{|f|File.exists?(f)}:nilendprivatedefradiant_root(filename='')File.join("..","..","..","..",filename)endend