module Disco::AppDiscoLoader

Constants

BUNDLER_WARNING
EXECUTABLES
RUBY

Public Class Methods

exec_app_disco() click to toggle source
# File lib/disco/app_disco_loader.rb, line 29
def self.exec_app_disco
  original_cwd = Dir.pwd

  loop do
    exe = find_executable
    if exe
      contents = File.read(exe)

      if contents =~ /(APP|ENGINE)_PATH/
        exec RUBY, exe, *ARGV
        break # non reachable, hack to be able to stub exec in the test suite
      elsif exe.end_with?('bin/disco') && contents.include?('This file was generated by Bundler')
        $stderr.puts(BUNDLER_WARNING)
        Object.const_set(:APP_PATH, File.expand_path('config/application', Dir.pwd))
        require File.expand_path('../boot', APP_PATH)
        require 'disco/commands'
        break
      end
    end

    # If we exhaust the search there is no executable, this could be a
    # call to generate a new application, so restore the original cwd.
    if Pathname.new(Dir.pwd).root?
      Dir.chdir(original_cwd)
      break
    end

    # Otherwise keep moving upwards in search of a executable.
    Dir.chdir('..')
  end
end
find_executable() click to toggle source
# File lib/disco/app_disco_loader.rb, line 61
def self.find_executable
  EXECUTABLES.find { |exe| File.exist?(exe) }
end