Sha256: 6c5dee858d6463a7da3380faf02849424e5b3dec16524fb0abe7fe68039bf498

Contents?: true

Size: 1.77 KB

Versions: 5

Compression:

Stored size: 1.77 KB

Contents

require 'puppet/parser/ast/branch'

class Puppet::Parser::AST
    # The basic logical structure in Puppet.  Supports a list of
    # tests and statement arrays.
    class CaseStatement < AST::Branch
        attr_accessor :test, :options, :default

        # Short-curcuit evaluation.  Return the value of the statements for
        # the first option that matches.
        def evaluate(scope)
            value = @test.safeevaluate(scope)
            sensitive = Puppet[:casesensitive]
            value = value.downcase if ! sensitive and value.respond_to?(:downcase)

            retvalue = nil
            found = false
            
            # Iterate across the options looking for a match.
            default = nil
            @options.each { |option|
                option.eachvalue(scope) { |opval|
                    opval = opval.downcase if ! sensitive and opval.respond_to?(:downcase)
                    if opval == value
                        found = true
                        break
                    end
                }

                if found
                    # we found a matching option
                    retvalue = option.safeevaluate(scope)
                    break
                end

                if option.default?
                    default = option
                end
            }

            # Unless we found something, look for the default.
            unless found
                if default
                    retvalue = default.safeevaluate(scope)
                else
                    Puppet.debug "No true answers and no default"
                    retvalue = nil
                end
            end
            return retvalue
        end

        def each
            [@test,@options].each { |child| yield child }
        end
    end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
puppet-0.24.3 lib/puppet/parser/ast/casestatement.rb
puppet-0.24.2 lib/puppet/parser/ast/casestatement.rb
puppet-0.24.4 lib/puppet/parser/ast/casestatement.rb
puppet-0.24.5 lib/puppet/parser/ast/casestatement.rb
puppet-0.24.6 lib/puppet/parser/ast/casestatement.rb