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