# File lib/puppet/parser/ast/selector.rb, line 14
14:     def evaluate(scope)
15:       level = scope.ephemeral_level
16:       # Get our parameter.
17:       paramvalue = @param.safeevaluate(scope)
18: 
19:       default = nil
20: 
21:       @values = [@values] unless @values.instance_of? AST::ASTArray or @values.instance_of? Array
22: 
23:       # Then look for a match in the options.
24:       @values.each do |obj|
25:         # short circuit asap if we have a match
26:         return obj.value.safeevaluate(scope) if obj.param.evaluate_match(paramvalue, scope)
27: 
28:         # Store the default, in case it's necessary.
29:         default = obj if obj.param.is_a?(Default)
30:       end
31: 
32:       # Unless we found something, look for the default.
33:       return default.value.safeevaluate(scope) if default
34: 
35:       self.fail Puppet::ParseError, "No matching value for selector param '#{paramvalue}'"
36:     ensure
37:       scope.unset_ephemeral_var(level)
38:     end