Sha256: 0f84626bad2f06fa0fa6adc2d66eada0734f87e44a4bf970042ed40683824f22

Contents?: true

Size: 1.55 KB

Versions: 2

Compression:

Stored size: 1.55 KB

Contents

# A simple wrapper for templates, so they don't have full access to
# the scope objects.
class Puppet::Parser::TemplateWrapper
    attr_accessor :scope, :file
    include Puppet::Util
    Puppet::Util.logmethods(self)

    def initialize(scope, file)
        @scope = scope
        @file = Puppet::Module::find_template(file, @scope.compile.environment)

        unless FileTest.exists?(@file)
            raise Puppet::ParseError,
                "Could not find template %s" % file
        end

        # We'll only ever not have a parser in testing, but, eh.
        if @scope.parser
            @scope.parser.watch_file(@file)
        end
    end

    # Ruby treats variables like methods, so we can cheat here and
    # trap missing vars like they were missing methods.
    def method_missing(name, *args)
        # We have to tell lookupvar to return :undefined to us when
        # appropriate; otherwise it converts to "".
        value = @scope.lookupvar(name.to_s, false)
        if value != :undefined
            return value
        else
            # Just throw an error immediately, instead of searching for
            # other missingmethod things or whatever.
            raise Puppet::ParseError,
                "Could not find value for '%s'" % name
        end
    end

    def result
        result = nil
        benchmark(:debug, "Interpolated template #{@file}") do
            template = ERB.new(File.read(@file), 0, "-")
            result = template.result(binding)
        end

        result
    end

    def to_s
        "template[%s]" % @file
    end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
puppet-0.24.0 lib/puppet/parser/templatewrapper.rb
puppet-0.24.1 lib/puppet/parser/templatewrapper.rb