Module: Anvil::TaskManager

Defined in:
lib/anvil/task_manager.rb

Overview

Manage loading and finding anvil tasks

Class Method Summary collapse

Class Method Details

.all_filesArray

Returns all known anvil task files.

Returns:

  • (Array)

    all known anvil task files



60
61
62
63
64
65
# File 'lib/anvil/task_manager.rb', line 60

def self.all_files
  [files_from_env,
   files_from_anvil,
   files_from_current_project,
   files_from_gems].compact.reduce(&:+).uniq
end

.all_tasksArray

Returns all known Anvil::Task desdendants.

Returns:



68
69
70
71
# File 'lib/anvil/task_manager.rb', line 68

def self.all_tasks
  load_tasks unless @tasks_loaded
  ::Anvil::Task.descendants
end

.current_project_pathString

Returns top level dir if this is a git managed project.

Returns:

  • (String)

    top level dir if this is a git managed project



31
32
33
34
35
# File 'lib/anvil/task_manager.rb', line 31

def self.current_project_path
  Rugged::Repository.discover(ENV['PWD']).gsub('.git/', '')
rescue Rugged::RepositoryError
  ''
end

.files_from_anvilArray

Returns all the core anvil tasks.

Returns:

  • (Array)

    all the core anvil tasks



20
21
22
# File 'lib/anvil/task_manager.rb', line 20

def self.files_from_anvil
  files_from_path(File.expand_path('../..', __FILE__))
end

.files_from_current_projectArray

Returns all possible anvil tasks in this project.

Returns:

  • (Array)

    all possible anvil tasks in this project



25
26
27
28
# File 'lib/anvil/task_manager.rb', line 25

def self.files_from_current_project
  path = current_project_path + '/lib/anvil/'
  files_from_path(path)
end

.files_from_envArray

Returns anvil tasks in the specified dir.

Returns:

  • (Array)

    anvil tasks in the specified dir



49
50
51
52
53
54
55
56
57
# File 'lib/anvil/task_manager.rb', line 49

def self.files_from_env
  if ENV['ANVIL_TASKS_DIR']
    env_dir_list = ENV['ANVIL_TASKS_DIR'].split(':').join(',')

    Dir["{#{env_dir_list}}/*_task.rb"]
  else
    []
  end
end

.files_from_gemsArray

Returns anvil tasks installed in gems.

Returns:

  • (Array)

    anvil tasks installed in gems



44
45
46
# File 'lib/anvil/task_manager.rb', line 44

def self.files_from_gems
  Gem.find_latest_files 'anvil/tasks/**/*_task.rb'
end

.files_from_path(path) ⇒ Array

Returns all anvil tasks in the given path.

Parameters:

  • path (String)

    a path to glob their anvil tasks

Returns:

  • (Array)

    all anvil tasks in the given path



39
40
41
# File 'lib/anvil/task_manager.rb', line 39

def self.files_from_path(path)
  Dir[path + '/tasks/**/*_task.rb']
end

.load_tasksObject

Loads all known anvil tasks



14
15
16
17
# File 'lib/anvil/task_manager.rb', line 14

def self.load_tasks
  all_files.each { |file| load(file) }
  @tasks_loaded = true
end

.tasks_by_nameObject



73
74
75
# File 'lib/anvil/task_manager.rb', line 73

def self.tasks_by_name
  all_tasks.sort_by { |t| t.name }
end