Class: Puppet::Pops::Loader::ModuleLoaders::FileBased Private

Inherits:
AbstractPathBasedModuleLoader show all
Defined in:
lib/puppet/pops/loader/module_loaders.rb

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Direct Known Subclasses

GemBased, LibRootedFileBased

Constant Summary

Constants inherited from Loader

Loader::LOADABLE_KINDS

Instance Attribute Summary collapse

Attributes inherited from AbstractPathBasedModuleLoader

#module_name, #path, #private_loader

Attributes inherited from BaseLoader

#parent

Attributes inherited from Loader

#environment, #loader_name

Instance Method Summary collapse

Methods inherited from AbstractPathBasedModuleLoader

#discover, #find, #get_source_ref, #global?, #instantiate, #lib_root?, #loadables

Methods inherited from BaseLoader

#add_entry, #discover, #get_entry, #load_typed, #loaded_entry, #promote_entry, #remove_entry, #set_entry

Methods inherited from Loader

#[], #discover, #find, #get_entry, #inspect, #load, #load_typed, #loadables, #loaded_entry, #parent, #private_loader, #set_entry, #synchronize

Constructor Details

#initialize(parent_loader, loaders, module_name, path, loader_name, loadables = LOADABLE_KINDS) ⇒ FileBased

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Create a kind of ModuleLoader for one module (Puppet Module, or module like)

Parameters:

  • parent_loader (Loader)

    typically the loader for the environment or root

  • module_name (String)

    the name of the module (non qualified name), may be nil for “modules” only containing globals

  • path (String)

    the path to the root of the module (semantics defined by subclass)

  • loader_name (String)

    a name that identifies the loader

 440 441 442 443
# File 'lib/puppet/pops/loader/module_loaders.rb', line 440 def initialize(parent_loader, loaders, module_name, path, loader_name, loadables = LOADABLE_KINDS) super @path_index = Set.new end

Instance Attribute Details

#path_indexObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

 431 432 433
# File 'lib/puppet/pops/loader/module_loaders.rb', line 431 def path_index @path_index end

#smart_pathsObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

 430 431 432
# File 'lib/puppet/pops/loader/module_loaders.rb', line 430 def smart_paths @smart_paths end

Instance Method Details

#add_to_index(smart_path) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

 474 475 476 477 478 479 480 481 482 483 484
# File 'lib/puppet/pops/loader/module_loaders.rb', line 474 def add_to_index(smart_path) found = Dir.glob(File.join(smart_path.generic_path, '**', "*#{smart_path.extension}")) # The reason for not always rejecting directories here is performance (avoid extra stat calls). The  # false positives (directories with a matching extension) is an error in any case and will be caught  # later.  found = found.reject { |file_name| File.directory?(file_name) } if smart_path.extension.empty? @path_index.merge(found) found end

#candidate_paths(effective_path) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464
# File 'lib/puppet/pops/loader/module_loaders.rb', line 450 def candidate_paths(effective_path) basename = File.basename(effective_path, '.*') dirname = File.dirname(effective_path) files = @path_index.select do |path| File.dirname(path) == dirname end # At least one file has to match what we're loading, or it certainly doesn't exist  if files.any? { |file| File.basename(file, '.*') == basename } files else [] end end

#existing_path(effective_path) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

 445 446 447 448
# File 'lib/puppet/pops/loader/module_loaders.rb', line 445 def existing_path(effective_path) # Optimized, checks index instead of visiting file system  @path_index.include?(effective_path) ? effective_path : nil end

#get_contents(effective_path) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

 486 487 488
# File 'lib/puppet/pops/loader/module_loaders.rb', line 486 def get_contents(effective_path) Puppet::FileSystem.read(effective_path, :encoding => 'utf-8') end

#meaningful_to_search?(smart_path) ⇒ Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)
 466 467 468
# File 'lib/puppet/pops/loader/module_loaders.rb', line 466 def meaningful_to_search?(smart_path) !add_to_index(smart_path).empty? end

#relative_paths(smart_path) ⇒ Array<String>

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return all paths that matches the given smart path. The returned paths are relative to the ‘#generic_path` of the given smart path.

This method relies on the cache and does not perform any file system access

Parameters:

  • smart_path (SmartPath)

    the path to find relative paths for

Returns:

  • (Array<String>)

    found paths

 497 498 499 500 501 502 503 504
# File 'lib/puppet/pops/loader/module_loaders.rb', line 497 def relative_paths(smart_path) root = smart_path.generic_path found = [] @path_index.each do |path| found << Pathname(path).relative_path_from(Pathname(root)).to_s if smart_path.valid_path?(path) end found end

#to_sObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

 470 471 472
# File 'lib/puppet/pops/loader/module_loaders.rb', line 470 def to_s "(ModuleLoader::FileBased '#{loader_name}' '#{module_name}')" end