class Boing::Runner

Constants

INPROC_RAILS_CMDS

Public Class Methods

new(args) click to toggle source
# File lib/boing.rb, line 8
def initialize(args)
  @args = args.dup
end

Public Instance Methods

run() click to toggle source
# File lib/boing.rb, line 12
def run
  # warn if we're not in drip; and if not, load dripmain.rb as well
  if ENV['DRIP_INIT_CLASS'] == nil
    $stderr.puts "Note: Not running in drip; may be booting or configured wrong"
    dripmain = File.join(Dir.pwd, 'dripmain.rb')
    if File.exist?(dripmain)
      load dripmain
    end
  end

  # check for known "special" commands
  if @args[0] == 'rails' && INPROC_RAILS_CMDS.include?(@args[1])
    # running a `rails` command

    # best value comes from prebooting rails, so warn if not prebooted
    if !defined?(Rails)
      $stderr.puts "Note: Running Rails commands but Rails is not prebooted."
      require File.join(Dir.pwd, 'config/application.rb')
    end

    # commands that just reboot rails can run in-process
    @args.shift
    Object.const_set(:APP_PATH, ::Rails.root.join("config/application"))
    require "rails/commands"
    exit

  elsif @args[0] == 'killall'
    # kill all drip instances
    $stderr.puts "Killing all drip instances"
    system "drip kill"
    exit

  elsif @args[0] == 'dripmain'
    # Install a basic dripmain.rb for Rails use
    if !File.exist? File.expand_path('./config/application.rb')
      $stderr.puts "#{Dir.pwd} does not appear to be a rails application."
      exit
    end
    if File.exist? 'dripmain.rb'
      FileUtils.cp 'dripmain.rb', 'dripmain.rb.bak'
    end
    File.open('dripmain.rb', 'w') do |f|
      f.puts("require File.expand_path('../config/application', __FILE__)")
    end
    exit
  end

  # All other commands run as is
  cmd = @args.shift
  load File.join(File.dirname(Gem.ruby), cmd)
end