Class: Anvil::ExtensionsManager

Inherits:
Object
  • Object
show all
Defined in:
lib/anvil/extensions_manager.rb

Overview

Manage loading and finding anvil tasks and config extensions

Constant Summary collapse

PATTERNS =
{
  tasks: '/tasks/**/*_task.rb',
  config_extensions: '/config_extensions/**/*.rb'
}

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Class Attribute Details

.tasks_loadedObject

Returns the value of attribute tasks_loaded.



17
18
19
# File 'lib/anvil/extensions_manager.rb', line 17

def tasks_loaded
  @tasks_loaded
end

Class Method Details

.load_config_extensionsObject



27
28
29
# File 'lib/anvil/extensions_manager.rb', line 27

def load_config_extensions
  new.load_config_extensions
end

.load_tasksObject



23
24
25
# File 'lib/anvil/extensions_manager.rb', line 23

def load_tasks
  new.load_tasks
end

.tasks_by_nameObject



19
20
21
# File 'lib/anvil/extensions_manager.rb', line 19

def tasks_by_name
  new.tasks_by_name
end

Instance Method Details

#all_files_for(extension_type) ⇒ Array

Returns all known anvil files for a given extension type.

Parameters:

  • extension_type (Symbol)

    either :tasks or :config.

Returns:

  • (Array)

    all known anvil files for a given extension type

See Also:

  • Anvil::ExtensionsManager.{Anvil{Anvil::ExtensionsManager{Anvil::ExtensionsManager::PATTERNS}


55
56
57
58
59
60
61
# File 'lib/anvil/extensions_manager.rb', line 55

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

#all_tasksArray

Returns all known Task desdendants.

Returns:

  • (Array)

    all known Task desdendants



37
38
39
40
# File 'lib/anvil/extensions_manager.rb', line 37

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

#files_from_anvil(extension_type) ⇒ Array

Returns all the core anvil extensions.

Parameters:

  • extension_type (Symbol)

    either :tasks or :config.

Returns:

  • (Array)

    all the core anvil extensions

See Also:

  • Anvil::ExtensionsManager.{Anvil{Anvil::ExtensionsManager{Anvil::ExtensionsManager::PATTERNS}


66
67
68
# File 'lib/anvil/extensions_manager.rb', line 66

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

#files_from_current_project(pattern) ⇒ Array

Returns all possible anvil extensions.

Parameters:

  • extension_type (Symbol)

    either :tasks or :config.

Returns:

  • (Array)

    all possible anvil extensions

See Also:

  • Anvil::ExtensionsManager.{Anvil{Anvil::ExtensionsManager{Anvil::ExtensionsManager::PATTERNS}


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

def files_from_current_project(pattern)
  path = current_project_path + '/lib/anvil/'
  files_from_path(path, pattern)
end

#files_from_env(pattern) ⇒ Array

Returns anvil tasks in the specified dir.

Parameters:

  • extension_type (Symbol)

    either :tasks or :config.

Returns:

  • (Array)

    anvil tasks in the specified dir

See Also:

  • Anvil::ExtensionsManager.{Anvil{Anvil::ExtensionsManager{Anvil::ExtensionsManager::PATTERNS}


88
89
90
91
92
93
94
95
96
# File 'lib/anvil/extensions_manager.rb', line 88

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

    Dir["{#{env_dir_list}}#{PATTERNS[pattern]}"]
  else
    []
  end
end

#files_from_gems(pattern) ⇒ Array

Returns anvil extensions installed in gems.

Parameters:

  • extension_type (Symbol)

    either :tasks or :config.

Returns:

  • (Array)

    anvil extensions installed in gems

See Also:

  • Anvil::ExtensionsManager.{Anvil{Anvil::ExtensionsManager{Anvil::ExtensionsManager::PATTERNS}


81
82
83
# File 'lib/anvil/extensions_manager.rb', line 81

def files_from_gems(pattern)
  Gem.find_latest_files "anvil#{PATTERNS[pattern]}"
end

#load_config_extensionsObject



48
49
50
# File 'lib/anvil/extensions_manager.rb', line 48

def load_config_extensions
  all_files_for(:config_extensions).each { |file| load(file) }
end

#load_tasksObject

Loads all known anvil tasks



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

def load_tasks
  all_files_for(:tasks).each { |file| load(file) }
  self.class.tasks_loaded = true
end

#tasks_by_nameObject



32
33
34
# File 'lib/anvil/extensions_manager.rb', line 32

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