MMCT TEAM
Server IP : 111.118.215.189  /  Your IP : 18.221.240.145
Web Server : Apache
System : Linux md-in-83.webhostbox.net 4.19.286-203.ELK.el7.x86_64 #1 SMP Wed Jun 14 04:33:55 CDT 2023 x86_64
User : a1673wkz ( 2475)
PHP Version : 8.2.25
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON
Directory (0755) :  /usr/share/ruby/vendor_ruby/puppet/pops/binder/scheme_handler/

[  Home  ][  C0mmand  ][  Upload File  ]

Current File : //usr/share/ruby/vendor_ruby/puppet/pops/binder/scheme_handler/symbolic_scheme.rb
# Abstract base class for schemes based on symbolic names of bindings.
# This class helps resolve symbolic names by computing a path from a fully qualified name (fqn).
# There are also helper methods do determine if the symbolic name contains a wild-card ('*') in the first
# portion of the fqn (with the convention that '*' means 'any module').
#
# @abstract
# @api public
#
class Puppet::Pops::Binder::SchemeHandler::SymbolicScheme < Puppetx::Puppet::BindingsSchemeHandler

  # Shared implementation for module: and confdir: since the distinction is only in checks if a symbolic name
  # exists as a loadable file or not. Once this method is called it is assumed that the name is relative
  # and that it should exist relative to some loadable ruby location.
  #
  # TODO: this needs to be changed once ARM-8 Puppet DSL concrete syntax is also supported.
  # @api public
  #
  def contributed_bindings(uri, scope, composer)
    fqn = fqn_from_path(uri)[1]
    bindings = Puppet::Pops::Binder::BindingsLoader.provide(scope, fqn)
    raise ArgumentError, "Cannot load bindings '#{uri}' - no bindings found." unless bindings
    # Must clone as the rest mutates the model
    cloned_bindings = Marshal.load(Marshal.dump(bindings))
    Puppet::Pops::Binder::BindingsFactory.contributed_bindings(fqn, cloned_bindings)
  end

  # @api private
  def fqn_from_path(uri)
    split_path = uri.path.split('/')
    if split_path.size > 1 && split_path[-1].empty?
      split_path.delete_at(-1)
    end

    fqn = split_path[ 1 ]
    raise ArgumentError, "Module scheme binding reference has no name." unless fqn
    split_name = fqn.split('::')
    # drop leading '::'
    split_name.shift if split_name[0] && split_name[0].empty?
    [split_name, split_name.join('::')]
  end

  # True if super thinks it is optional or if it contains a wildcard.
  # @return [Boolean] true if the uri represents an optional set of bindings.
  # @api public
  def is_optional?(uri)
    super(uri) || has_wildcard?(uri)
  end

  # @api private
  def has_wildcard?(uri)
    (path = uri.path) && path.split('/')[1].start_with?('*::')
  end
end

MMCT - 2023