Created
June 16, 2009 10:58
-
-
Save aitor/130641 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'colored' | |
def add_desert_require | |
sentinel = 'Rails::Initializer.run do |config|' | |
gsub_file 'config/environment.rb', /(#{Regexp.escape(sentinel)})/mi do |match| | |
"\nrequire 'desert'\n#{match}" | |
end | |
end | |
def gsub_file(path, regexp, *args, &block) | |
content = File.read(path).gsub(regexp, *args, &block) | |
File.open(path, 'wb') { |file| file.write(content) } | |
end | |
def install_require_gems | |
run "gem sources -a http://gems.github.com" | |
gem 'desert', :version => '0.5', :lib => 'desert' | |
gem 'mislav-will_paginate', :version => '~> 2.3.6', :lib => 'will_paginate', :source => 'http://gems.github.com' | |
gem 'tog-tog', :version => '0.5', :lib => 'tog' | |
gem 'mocha' | |
gem 'thoughtbot-factory_girl', :lib => 'factory_girl' | |
rake "gems:install", :sudo => true | |
end | |
def install_tog_core_plugins | |
plugin 'tog_core', :git => "git://github.com/tog/tog_core.git" | |
plugin 'tog_social', :git => "git://github.com/tog/tog_social.git" | |
plugin 'tog_mail', :git => "git://github.com/tog/tog_mail.git" | |
route "map.routes_from_plugin 'tog_core'" | |
route "map.routes_from_plugin 'tog_mail'" | |
route "map.routes_from_plugin 'tog_social'" | |
file "db/migrate/" + Time.now.strftime("%Y%m%d%H%M%S") + "_install_tog.rb", | |
%q{class InstallTog < ActiveRecord::Migration | |
def self.up | |
migrate_plugin "tog_core", 6 | |
migrate_plugin "tog_social", 5 | |
migrate_plugin "tog_mail", 2 | |
end | |
def self.down | |
migrate_plugin "tog_mail", 0 | |
migrate_plugin "tog_social", 0 | |
migrate_plugin "tog_core", 0 | |
end | |
end | |
} | |
end | |
def generate_acts_as_commentable_migration | |
file "db/migrate/" + Time.now.strftime("%Y%m%d%H%M%S") + "_acts_as_commentable.rb", | |
%q{class ActsAsCommentable < ActiveRecord::Migration | |
def self.up | |
create_table "comments", :force => true do |t| | |
t.column "title", :string, :limit => 50, :default => "" | |
t.column "comment", :text, :default => "" | |
t.column "created_at", :datetime, :null => false | |
t.column "commentable_id", :integer, :default => 0, :null => false | |
t.column "commentable_type", :string, :limit => 15, :default => "", :null => false | |
t.column "user_id", :integer, :default => 0, :null => false | |
end | |
add_index "comments", ["user_id"], :name => "fk_comments_user" | |
end | |
def self.down | |
drop_table :comments | |
end | |
end | |
} | |
end | |
def generate_acts_as_rateable_migration | |
file "db/migrate/" + Time.now.strftime("%Y%m%d%H%M%S") + "_add_ratings.rb", | |
%q{class AddRatings < ActiveRecord::Migration | |
def self.up | |
create_table :ratings do |t| | |
t.column :rating, :integer # You can add a default value here if you wish | |
t.column :rateable_id, :integer, :null => false | |
t.column :rateable_type, :string, :null => false | |
end | |
add_index :ratings, [:rateable_id, :rating] # Not required, but should help more than it hurts | |
end | |
def self.down | |
drop_table :ratings | |
end | |
end | |
} | |
end | |
def install_tog_user_plugin | |
if yes?("Install tog_user?") | |
plugin 'tog_user', :git => "git://github.com/tog/tog_user.git" | |
route "map.routes_from_plugin 'tog_user'" | |
file "db/migrate/" + Time.now.strftime("%Y%m%d%H%M%S") + "_install_tog_user.rb", | |
%q{class InstallTogUser < ActiveRecord::Migration | |
def self.up | |
migrate_plugin "tog_user", 1 | |
end | |
def self.down | |
migrate_plugin "tog_user", 0 | |
end | |
end | |
} | |
if yes?("Create a default admin user?") | |
name = ask("username?") | |
pwd = ask("password?") | |
puts "nothing yet, sorry :(" | |
end | |
end | |
end | |
def run_tog_tests | |
if yes?("Run tog's tests?") | |
rake "db:test:prepare" | |
rake "tog:plugins:test" | |
end | |
end | |
def introduction_banner | |
puts %q{ | |
#{"Welcome to the Tog installer, v0.5.1".yellow_on_blue.bold} " | |
} | |
puts %q{ | |
This installer will guide you through the entire installation process. It | |
shouldn't take more than 3 minutes in total. | |
Here's what you can expect from the installation process: | |
1. All the tog's dependencies will be installed for you. | |
2. The installer will generate a few migrations required by the dependencies | |
3. You will be able to install tog_user. | |
4. You will be able to create an initial admin user. | |
Don't worry if anything goes wrong. This installer will advise you on how to | |
solve any problems. | |
Press Enter to continue, or Ctrl-C to abort. | |
} | |
gets | |
end | |
introduction_banner | |
add_desert_require | |
install_require_gems | |
{ | |
'acts_as_commentable' => "http://juixe.com/svn/acts_as_commentable", | |
'acts_as_state_machine' => "http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk", | |
'seo_urls' => "http://svn.redshiftmedia.com/svn/plugins/seo_urls" | |
}.each_pair { |name, url| plugin name, :svn => url } | |
{ | |
'acts_as_taggable_on_steroids' => "git://github.com/jviney/acts_as_taggable_on_steroids.git", | |
'acts_as_rateable' => "git://github.com/andry1/acts_as_rateable.git", | |
'acts_as_abusable' => "git://github.com/linkingpaths/acts_as_abusable.git", | |
'acts_as_scribe' => "git://github.com/linkingpaths/acts_as_scribe.git", | |
'paperclip' => "git://github.com/thoughtbot/paperclip.git", | |
'viking' => "git://github.com/technoweenie/viking.git" | |
}.each_pair { |name, url| plugin name, :git => url } | |
generate_acts_as_commentable_migration | |
generate_acts_as_rateable_migration | |
generate "acts_as_abusable_migration" | |
generate "acts_as_taggable_migration" | |
generate "acts_as_scribe_migration" | |
install_tog_user_plugin | |
install_tog_core_plugins | |
run "echo \"require 'tasks/tog'\" >> Rakefile" | |
rake "tog:plugins:copy_resources" | |
rake "db:migrate" | |
run 'rm public/index.html' | |
run_tog_tests | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment