Sha256: 3da45bf0c5904f7ff43e72347bedd2f618568bd78fc5871b56150476a645524d

Contents?: true

Size: 1.71 KB

Versions: 41

Compression:

Stored size: 1.71 KB

Contents

# This module is an integral part of the evaluator. It deals with the concern of validating
# external syntax in text produced by heredoc and templates.
#
require 'puppet/plugins/syntax_checkers'
module Puppet::Pops::Evaluator::ExternalSyntaxSupport
  def assert_external_syntax(scope, result, syntax, reference_expr)
    # ignore 'unspecified syntax'
    return if syntax.nil? || syntax == ''

    checker = checker_for_syntax(scope, syntax)
    # ignore syntax with no matching checker
    return unless checker

    # Call checker and give it the location information from the expression
    # (as opposed to where the heredoc tag is (somewhere on the line above)).
    acceptor = Puppet::Pops::Validation::Acceptor.new()
    checker.check(result, syntax, acceptor, reference_expr)

    if acceptor.error_count > 0
      checker_message = "Invalid produced text having syntax: '#{syntax}'."
      Puppet::Pops::IssueReporter.assert_and_report(acceptor, :message => checker_message)
      raise ArgumentError, "Internal Error: Configuration of runtime error handling wrong: should have raised exception"
    end
  end

  # Finds the most significant checker for the given syntax (most significant is to the right).
  # Returns nil if there is no registered checker.
  #
  def checker_for_syntax(scope, syntax)
    checkers_hash = Puppet.lookup(:plugins)[Puppet::Plugins::SyntaxCheckers::SYNTAX_CHECKERS_KEY]
    checkers_hash[lookup_keys_for_syntax(syntax).find {|x| checkers_hash[x] }]
  end

  # Returns an array of possible syntax names
  def lookup_keys_for_syntax(syntax)
    segments = syntax.split(/\+/)
    result = []
    begin
      result << segments.join("+")
      segments.shift
    end until segments.empty?
    result
  end

end

Version data entries

41 entries across 41 versions & 2 rubygems

Version Path
bolt-0.15.0 vendored/puppet/lib/puppet/pops/evaluator/external_syntax_support.rb
bolt-0.14.0 vendored/puppet/lib/puppet/pops/evaluator/external_syntax_support.rb
bolt-0.13.0 vendored/puppet/lib/puppet/pops/evaluator/external_syntax_support.rb
bolt-0.12.0 vendored/puppet/lib/puppet/pops/evaluator/external_syntax_support.rb
bolt-0.11.0 vendored/puppet/lib/puppet/pops/evaluator/external_syntax_support.rb
bolt-0.10.0 vendored/puppet/lib/puppet/pops/evaluator/external_syntax_support.rb
bolt-0.9.0 vendored/puppet/lib/puppet/pops/evaluator/external_syntax_support.rb
bolt-0.8.0 vendored/puppet/lib/puppet/pops/evaluator/external_syntax_support.rb
puppet-5.3.3 lib/puppet/pops/evaluator/external_syntax_support.rb
puppet-5.3.3-x86-mingw32 lib/puppet/pops/evaluator/external_syntax_support.rb
puppet-5.3.3-x64-mingw32 lib/puppet/pops/evaluator/external_syntax_support.rb
puppet-5.3.3-universal-darwin lib/puppet/pops/evaluator/external_syntax_support.rb
bolt-0.7.0 vendored/puppet/lib/puppet/pops/evaluator/external_syntax_support.rb
bolt-0.6.1 vendored/puppet/lib/puppet/pops/evaluator/external_syntax_support.rb
bolt-0.6.0 vendored/puppet/lib/puppet/pops/evaluator/external_syntax_support.rb
bolt-0.5.1 vendored/puppet/lib/puppet/pops/evaluator/external_syntax_support.rb
bolt-0.5.0 vendored/puppet/lib/puppet/pops/evaluator/external_syntax_support.rb
puppet-5.3.2 lib/puppet/pops/evaluator/external_syntax_support.rb
puppet-5.3.2-x86-mingw32 lib/puppet/pops/evaluator/external_syntax_support.rb
puppet-5.3.2-x64-mingw32 lib/puppet/pops/evaluator/external_syntax_support.rb