#!/bin/ksh
# start-rails
# does the grunt work of starting a rails installation
# By Matt Williams, http://matthewkwilliams.com
# 25 Aug 2008
#
# Released under MIT license

if [ $# -lt 1 ]; then
echo "Usage: ${0} project-name [rails arguments]"
exit 1
fi

project=$1
shift
rails $* $project
cd $project
echo Set up rspec
script/plugin install git://github.com/dchelimsky/rspec.git
script/plugin install git://github.com/dchelimsky/rspec-rails.git
script/generate rspec

echo Install acts_as_statemachine
script/plugin install http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk acts_as_state_machine

echo Install restful auth
script/plugin install git://github.com/technoweenie/restful-authentication.git
script/generate authenticated user sessions --include-activation --stateful --rspec

echo Database setup
rake db:migrate
rake db:migrate RAILS_ENV=test

echo Add Activation route
head -1 config/routes.rb > /tmp/start-rails-router.$$
cat <<EOF >>  /tmp/start-rails-router.$$
# Activation code
map.activate '/activate/:activation_code', :controller => 'users', :action => 'activate', :activation_code => nil
EOF
size=`wc -l config/routes.rb`
size=`expr ${size%% *} - 1`
tail -${size} config/routes.rb >> /tmp/start-rails-router.$$

echo Updating user Route
sed -e 's/map.resources :users.*$/map.resources :users, :member => { :suspend =>:put,:unsuspend =>:put,:purge =>:delete }/' /tmp/start-rails-router.$$ > config/routes.rb

echo Adding Observer to config/environment.rb
sed -e 's/# Activate observers.*/&\n\n  config.active_record.observers = :user_observer\n/' config/environment.rb  > /tmp/srfoo.$$
mv /tmp/srfoo.$$ config/environment.rb

echo Setting globals
cat >> config/environments/development.rb <<EOF
SITE_URL='localhost:3000'
ADMIN_EMAIL='admin@localhost.localdomain'
EOF

cat >> config/environments/production.rb <<EOF
SITE_URL='www.myapplication.com'
ADMIN_EMAIL='admin@myapplication.com'
EOF

cat >> config/environments/test.rb <<EOF
SITE_URL='www.myapplication.com'
ADMIN_EMAIL='admin@myapplication.com'
EOF

echo "You'll want to look at config/environments/production.rb as well as test"

cat app/models/user_mailer.rb | sed -e 's/YOURSITE/#{SITE_URL}/'|sed -e 's/ADMINEMAIL/#{&}/' > /tmp/srfoo.$$
mv /tmp/srfoo.$$ app/models/user_mailer.rb

echo Setting up the email initializer
echo   You will want to change the settings
cat > config/initializers/email.rb <<EOF
ActionMailer::Base.delivery_method = :smtp
          ActionMailer::Base.smtp_settings = {
          :address => "mail.example-domain.com",
          :port => 25,
          :domain => "www.example-domain.com",
          :authentication => :login,
          :user_name => "user@example-domain.com",
          :password => "secret"
          }
EOF

echo Removing public/index.html
rm public/index.html
