class Rake::Application

Rake main application object. When invoking rake from the command line, a Rake::Application object is created and run.

Constants

DEFAULT_RAKEFILES

Attributes

The name of the application (typically ‘rake’)

The original directory where rake was invoked.

Name of the actual rakefile used.

Number of columns on the terminal

List of the top level task names (task names from the command line).

Override the detected TTY output state (mostly for testing)

Public Class Methods

Initialize a Rake::Application object.

Calls superclass method
# File lib/rake/application.rb, line 49
def initialize
  super
  @name = "rake"
  @rakefiles = DEFAULT_RAKEFILES.dup
  @rakefile = nil
  @pending_imports = []
  @imported = []
  @loaders = {}
  @default_loader = Rake::DefaultLoader.new
  @original_dir = Dir.pwd
  @top_level_tasks = []
  add_loader("rb", DefaultLoader.new)
  add_loader("rf", DefaultLoader.new)
  add_loader("rake", DefaultLoader.new)
  @tty_output = STDOUT.tty?
  @terminal_columns = ENV["RAKE_COLUMNS"].to_i

  set_default_options
end

Public Instance Methods

Add a loader to handle imported files ending in the extension ext.

# File lib/rake/application.rb, line 161
def add_loader(ext, loader)
  ext = ".#{ext}" unless ext =~ /^\./
  @loaders[ext] = loader
end
Calls superclass method
# File lib/rake/application.rb, line 107
def execute(*)
  exception = DEBUGGER__::SESSION.capture_exception_frames(/(exe|bin|lib)\/rake/) do
    super
  end

  if exception
    STDERR.puts exception.message
    DEBUGGER__::SESSION.enter_postmortem_session exception
    raise exception
  end
end

Initialize the command line parameters and app name.

# File lib/rake/application.rb, line 88
def init(app_name="rake", argv = ARGV)
  standard_exception_handling do
    @name = app_name
    begin
      args = handle_options argv
    rescue ArgumentError
      # Backward compatibility for capistrano
      args = handle_options
    end
    load_debug_at_stop_feature
    collect_command_line_tasks(args)
  end
end

Find the rakefile and then load it and any pending imports.

# File lib/rake/application.rb, line 124
def load_rakefile
  standard_exception_handling do
    raw_load_rakefile
  end
end

Application options from the command line

# File lib/rake/application.rb, line 167
def options
  @options ||= Struct.new(
    :always_multitask, :backtrace, :build_all, :dryrun,
    :ignore_deprecate, :ignore_system, :job_stats, :load_system,
    :nosearch, :rakelib, :show_all_tasks, :show_prereqs,
    :show_task_pattern, :show_tasks, :silent, :suppress_backtrace_pattern,
    :thread_pool_size, :trace, :trace_output, :trace_rules
  ).new
end

Run the Rake application. The run method performs the following three steps:

  • Initialize the command line options (init).

  • Define the tasks (load_rakefile).

  • Run the top level tasks (top_level).

If you wish to build a custom rake command, you should call init on your application. Then define any tasks. Finally, call top_level to run your top level tasks.

# File lib/rake/application.rb, line 79
def run(argv = ARGV)
  standard_exception_handling do
    init "rake", argv
    load_rakefile
    top_level
  end
end

Run the given block with the thread startup and shutdown.

# File lib/rake/application.rb, line 144
def run_with_threads
  thread_pool.gather_history if options.job_stats == :history

  yield

  thread_pool.join if defined?(@thread_pool)
  if options.job_stats
    stats = thread_pool.statistics
    puts "Maximum active threads: #{stats[:max_active_threads]} + main"
    puts "Total threads in play:  #{stats[:total_threads_in_play]} + main"
  end
  ThreadHistoryDisplay.new(thread_pool.history).show if
    options.job_stats == :history
end

Run the top level tasks of a Rake application.

# File lib/rake/application.rb, line 131
def top_level
  run_with_threads do
    if options.show_tasks
      display_tasks_and_comments
    elsif options.show_prereqs
      display_prerequisites
    else
      top_level_tasks.each { |task_name| invoke_task(task_name) }
    end
  end
end