Class: Puppet::Pops::Types::ClassLoader Private
- Defined in:
- lib/puppet/pops/types/class_loader.rb
Overview
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.
This means it can load a class from a gem, or from puppet modules.
Class Method Summary collapse
-
.provide(name) ⇒ Class?
Returns a Class given a fully qualified class name.
- .provide_from_name_path(name, name_path) ⇒ Object private
Class Method Details
.provide(name) ⇒ Class?
Returns a Class given a fully qualified class name. Lookup of class is never relative to the calling namespace.
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/puppet/pops/types/class_loader.rb', line 21 def self.provide(name) case name when String provide_from_string(name) when Array provide_from_name_path(name.join('::'), name) when PAnyType, PTypeType provide_from_type(name) else raise ArgumentError, "Cannot provide a class from a '#{name.class.name}'" end end |
.provide_from_name_path(name, name_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.
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/puppet/pops/types/class_loader.rb', line 86 def self.provide_from_name_path(name, name_path) # If class is already loaded, try this first result = find_class(name_path) unless result.is_a?(Module) # Attempt to load it using the auto loader loaded_path = nil if paths_for_name(name_path).find { |path| loaded_path = path; @autoloader.load(path, Puppet.lookup(:current_environment)) } result = find_class(name_path) unless result.is_a?(Module) raise RuntimeError, "Loading of #{name} using relative path: '#{loaded_path}' did not create expected class" end end end return nil unless result.is_a?(Module) result end |