class Rake::Application - rake: Ruby Standard Library Documentation

# 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

name[R]

The name of the application (typically ‘rake’)

original_dir[R]

The original directory where rake was invoked.

rakefile[R]

Name of the actual rakefile used.

terminal_columns[RW]

Number of columns on the terminal

top_level_tasks[R]

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

tty_output[W]

Override the detected TTY output state (mostly for testing)

### Public Class Methods

new() click to toggle source

Initialize a `Rake::Application` object.

Calls superclass method

    # File rake-13.2.1/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_loader(ext, loader) click to toggle source

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

    # File rake-13.2.1/lib/rake/application.rb, line 161
    def add_loader(ext, loader)
      ext = ".#{ext}" unless ext =~ /^\./
      @loaders[ext] = loader
    end

execute(*) click to toggle source
Calls superclass method

    # File rake-13.2.1/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

init(app_name="rake", argv = ARGV) click to toggle source

Initialize the command line parameters and app name.

    # File rake-13.2.1/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

load_rakefile() click to toggle source

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

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

options() click to toggle source

`Application` options from the command line

    # File rake-13.2.1/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(argv = ARGV) click to toggle source

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 rake-13.2.1/lib/rake/application.rb, line 79
    def run(argv = ARGV)
      standard_exception_handling do
        init "rake", argv
        load_rakefile
        top_level
      end
    end

run_with_threads() { || ... } click to toggle source

Run the given block with the thread startup and shutdown.

    # File rake-13.2.1/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

top_level() click to toggle source

Run the top level tasks of a Rake application.

    # File rake-13.2.1/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

### Private Instance Methods

load_debug_at_stop_feature() click to toggle source

    # File rake-13.2.1/lib/rake/application.rb, line 102
    def load_debug_at_stop_feature
      return unless ENV["RAKE_DEBUG"]
      require "debug/session"
      DEBUGGER__::start no_sigint_hook: true, nonstop: true
      Rake::Task.prepend Module.new {
        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
      }
    rescue LoadError
    end