Class: Anvil::ExtensionsManager
- Inherits:
-
Object
- Object
- Anvil::ExtensionsManager
- 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
-
.tasks_loaded ⇒ Object
Returns the value of attribute tasks_loaded.
Class Method Summary collapse
Instance Method Summary collapse
-
#all_files_for(extension_type) ⇒ Array
All known anvil files for a given extension type.
-
#all_tasks ⇒ Array
All known Task desdendants.
-
#files_from_anvil(extension_type) ⇒ Array
All the core anvil extensions.
-
#files_from_current_project(pattern) ⇒ Array
All possible anvil extensions.
-
#files_from_env(pattern) ⇒ Array
Anvil tasks in the specified dir.
-
#files_from_gems(pattern) ⇒ Array
Anvil extensions installed in gems.
- #load_config_extensions ⇒ Object
-
#load_tasks ⇒ Object
Loads all known anvil tasks.
- #tasks_by_name ⇒ Object
Class Attribute Details
.tasks_loaded ⇒ Object
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_extensions ⇒ Object
27 28 29 |
# File 'lib/anvil/extensions_manager.rb', line 27 def load_config_extensions new.load_config_extensions end |
.load_tasks ⇒ Object
23 24 25 |
# File 'lib/anvil/extensions_manager.rb', line 23 def load_tasks new.load_tasks end |
.tasks_by_name ⇒ Object
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.
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_tasks ⇒ Array
Returns 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.
66 67 68 |
# File 'lib/anvil/extensions_manager.rb', line 66 def files_from_anvil(extension_type) files_from_path(File.('../..', __FILE__), extension_type) end |
#files_from_current_project(pattern) ⇒ Array
Returns all possible anvil extensions.
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.
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.
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_extensions ⇒ Object
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_tasks ⇒ Object
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_name ⇒ Object
32 33 34 |
# File 'lib/anvil/extensions_manager.rb', line 32 def tasks_by_name all_tasks.sort_by { |t| t.name } end |