class Aggregate
Definitions
def self.default(working_directory, bakefile_path = nil)
Create a loader using the specified working directory.
Signature
-
parameter
working_directory
String
Implementation
def self.default(working_directory, bakefile_path = nil)
registry = self.new
if bakefile_path
registry.append_bakefile(bakefile_path)
end
registry.append_defaults(working_directory)
return registry
end
def initialize
Initialize an empty array of registry.
Implementation
def initialize
# Used to de-duplicated directories:
@roots = {}
# The ordered list of loaders:
@ordered = Array.new
end
def empty?
Whether any registry are defined.
Signature
-
returns
Boolean
Implementation
def empty?
@ordered.empty?
end
def each(&block)
Enumerate the registry in order.
Implementation
def each(&block)
@ordered.each(&block)
end
def append_path(current = Dir.pwd, **options)
Append a specific project path to the search path for recipes.
The computed path will have bake
appended to it.
Signature
-
parameter
current
String
The path to add.
Implementation
def append_path(current = Dir.pwd, **options)
bake_path = File.join(current, "bake")
if File.directory?(bake_path)
return insert(bake_path, **options)
end
return false
end
def append_defaults(working_directory)
Add registry according to the current working directory and loaded gems.
Signature
-
parameter
working_directory
String
Implementation
def append_defaults(working_directory)
# Load recipes from working directory:
self.append_path(working_directory)
# Load recipes from loaded gems:
self.append_from_gems
end
def append_from_gems
Enumerate all loaded gems and add them.
Implementation
def append_from_gems
::Gem.loaded_specs.each do |name, spec|
Console.debug(self) {"Checking gem #{name}: #{spec.full_gem_path}..."}
if path = spec.full_gem_path and File.directory?(path)
append_path(path, name: spec.full_name)
end
end
end