123456789_123456789_123456789_123456789_123456789_

Class: Rake::Application

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Instance Chain:
self, TaskManager
Inherits: Object
Defined in: lib/rake/application.rb

Overview

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

Constant Summary

Class Method Summary

Instance Attribute Summary

TaskManager - Included

#last_description

Track the last comment made in the Rakefile.

Instance Method Summary

TaskManager - Included

#[]

Find a matching task for task_name.

#clear

Clear all tasks in this application.

#current_scope

Return the list of scope names currently active in the task manager.

#enhance_with_matching_rule

If a rule can be found that matches the task name, enhance the task with the prerequisites and actions from the rule.

#in_namespace

Evaluate the block in a nested namespace named #name.

#intern

Lookup a task.

#lookup

Lookup a task, using scope and the scope hints in the task name.

#resolve_args

Resolve the arguments for a task/rule.

#tasks

List of all defined tasks in this application.

#tasks_in_scope

List of all the tasks defined in the given scope (and its sub-scopes).

#add_location

Add a location to the locations field of the given task.

#attempt_rule

Attempt to create a rule given the list of prerequisites.

#find_location

Find the location that called into the dsl layer.

#generate_name

Generate an anonymous namespace name.

#get_description

Return the current description, clearing it in the process.

#lookup_in_scope

Lookup the task name.

#make_sources

Make a list of sources from the list of file name extensions / translation procs.

#resolve_args_without_dependencies

Resolve task arguments for a task or rule when there are no dependencies declared.

Constructor Details

.newApplication

Initialize a Application object.

[ GitHub ]

  
# File 'lib/rake/application.rb', line 48

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
end

Instance Attribute Details

#name (readonly)

The name of the application (typically 'rake')

[ GitHub ]

  
# File 'lib/rake/application.rb', line 23

attr_reader :name

#original_dir (readonly)

The original directory where rake was invoked.

[ GitHub ]

  
# File 'lib/rake/application.rb', line 26

attr_reader :original_dir

#rakefile (readonly)

Name of the actual rakefile used.

[ GitHub ]

  
# File 'lib/rake/application.rb', line 29

attr_reader :rakefile

#terminal_columns (rw)

Number of columns on the terminal

[ GitHub ]

  
# File 'lib/rake/application.rb', line 32

attr_accessor :terminal_columns

#top_level_tasks (readonly)

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

[ GitHub ]

  
# File 'lib/rake/application.rb', line 35

attr_reader :top_level_tasks

#tty_output=(value) (rw)

Override the detected TTY output state (mostly for testing)

[ GitHub ]

  
# File 'lib/rake/application.rb', line 38

attr_writer :tty_output

Instance Method Details

#add_loader(ext, loader)

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

[ GitHub ]

  
# File 'lib/rake/application.rb', line 131

def add_loader(ext, loader)
  ext = ".#{ext}" unless ext =~ /^\./
  @loaders[ext] = loader
end

#init(app_name = "rake")

Initialize the command line parameters and app name.

[ GitHub ]

  
# File 'lib/rake/application.rb', line 85

def init(app_name="rake")
  standard_exception_handling do
    @name = app_name
    args = handle_options
    collect_command_line_tasks(args)
  end
end

#load_rakefile

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

[ GitHub ]

  
# File 'lib/rake/application.rb', line 94

def load_rakefile
  standard_exception_handling do
    raw_load_rakefile
  end
end

#options

Application options from the command line

[ GitHub ]

  
# File 'lib/rake/application.rb', line 137

def options
  @options ||= OpenStruct.new
end

#run

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

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.

[ GitHub ]

  
# File 'lib/rake/application.rb', line 76

def run
  standard_exception_handling do
    init
    load_rakefile
    top_level
  end
end

#run_with_threads

Run the given block with the thread startup and shutdown.

[ GitHub ]

  
# File 'lib/rake/application.rb', line 114

def run_with_threads
  thread_pool.gather_history if options.job_stats == :history

  yield

  thread_pool.join
  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

Run the top level tasks of a ::Rake application.

[ GitHub ]

  
# File 'lib/rake/application.rb', line 101

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