+1, though I wonder if we should either allow /blah/i or have the setting affect regular expressions as well (probably not if it's to be deprecated).
On Wed, Mar 3, 2010 at 11:37 AM, Brice Figureau <[email protected]> wrote: > The issue is that case/selectors are downcasing the value before it > is compared to the options. > Unfortunately regex are matching in a case sensitive way, which would > make the following manifest fail: > > $var = "CaseSensitive" > case $var { > /CaseSensitive/: { > notice("worked") > } > default: { > fail "miserably" > } > } > > This patch fixes the issue by making sure the regexp match is done > one the original (not downcased) value, but still doing a case > sensitive match. > > Signed-off-by: Brice Figureau <[email protected]> > --- > lib/puppet/parser/ast/casestatement.rb | 4 +--- > lib/puppet/parser/ast/leaf.rb | 1 + > lib/puppet/parser/ast/selector.rb | 2 -- > spec/unit/parser/ast/casestatement.rb | 10 ---------- > spec/unit/parser/ast/leaf.rb | 13 +++++++++++++ > spec/unit/parser/ast/selector.rb | 10 ---------- > 6 files changed, 15 insertions(+), 25 deletions(-) > > diff --git a/lib/puppet/parser/ast/casestatement.rb > b/lib/puppet/parser/ast/casestatement.rb > index 25b0fc6..64298ca 100644 > --- a/lib/puppet/parser/ast/casestatement.rb > +++ b/lib/puppet/parser/ast/casestatement.rb > @@ -12,8 +12,6 @@ class Puppet::Parser::AST > # 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 > @@ -22,7 +20,7 @@ class Puppet::Parser::AST > default = nil > @options.each do |option| > option.eachopt do |opt| > - return option.safeevaluate(scope) if > opt.evaluate_match(value, scope, :file => file, :line => line, :sensitive => > sensitive) > + return option.safeevaluate(scope) if > opt.evaluate_match(value, scope, :file => file, :line => line, :sensitive => > Puppet[:casesensitive]) > end > > default = option if option.default? > diff --git a/lib/puppet/parser/ast/leaf.rb b/lib/puppet/parser/ast/leaf.rb > index c8ac6f7..ee7ee02 100644 > --- a/lib/puppet/parser/ast/leaf.rb > +++ b/lib/puppet/parser/ast/leaf.rb > @@ -16,6 +16,7 @@ class Puppet::Parser::AST > if ! options[:sensitive] && obj.respond_to?(:downcase) > obj = obj.downcase > end > + value = value.downcase if not options[:sensitive] and > value.respond_to?(:downcase) > obj == value > end > > diff --git a/lib/puppet/parser/ast/selector.rb > b/lib/puppet/parser/ast/selector.rb > index 84bc2a7..ce834b6 100644 > --- a/lib/puppet/parser/ast/selector.rb > +++ b/lib/puppet/parser/ast/selector.rb > @@ -17,8 +17,6 @@ class Puppet::Parser::AST > > sensitive = Puppet[:casesensitive] > > - paramvalue = paramvalue.downcase if not sensitive and > paramvalue.respond_to?(:downcase) > - > default = nil > > unless @values.instance_of? AST::ASTArray or @values.instance_of? > Array > diff --git a/spec/unit/parser/ast/casestatement.rb > b/spec/unit/parser/ast/casestatement.rb > index 554e295..657648e 100755 > --- a/spec/unit/parser/ast/casestatement.rb > +++ b/spec/unit/parser/ast/casestatement.rb > @@ -28,16 +28,6 @@ describe Puppet::Parser::AST::CaseStatement do > @casestmt.evaluate(@scope) > end > > - it "should downcase the evaluated test value if allowed" do > - Puppet.stubs(:[]).with(:casesensitive).returns(false) > - value = stub 'test' > - �[email protected](:safeevaluate).with(@scope).returns(value) > - > - value.expects(:downcase) > - > - �[email protected](@scope) > - end > - > it "should scan each option" do > @options.expects(:each).multiple_yields(@option1, @option2) > > diff --git a/spec/unit/parser/ast/leaf.rb b/spec/unit/parser/ast/leaf.rb > index fecfba3..62ebc2a 100755 > --- a/spec/unit/parser/ast/leaf.rb > +++ b/spec/unit/parser/ast/leaf.rb > @@ -33,6 +33,13 @@ describe Puppet::Parser::AST::Leaf do > > @leaf.evaluate_match("value", @scope, :insensitive => true) > end > + > + it "should downcase the parameter value if wanted" do > + parameter = stub 'parameter' > + parameter.expects(:downcase).returns("value") > + > + �[email protected]_match(parameter, @scope, :insensitive => true) > + end > end > > describe "when converting to string" do > @@ -123,6 +130,12 @@ describe Puppet::Parser::AST::Regex do > @regex.evaluate_match("value", @scope) > end > > + it "should not downcase the paramater value" do > + �[email protected](:match).with("VaLuE") > + > + �[email protected]_match("VaLuE", @scope) > + end > + > it "should set ephemeral scope vars if there is a match" do > @scope.expects(:ephemeral_from).with(true, nil, nil) > > diff --git a/spec/unit/parser/ast/selector.rb > b/spec/unit/parser/ast/selector.rb > index 2ba83ad..f9a1efe 100755 > --- a/spec/unit/parser/ast/selector.rb > +++ b/spec/unit/parser/ast/selector.rb > @@ -40,16 +40,6 @@ describe Puppet::Parser::AST::Selector do > @selector.evaluate(@scope) > end > > - it "should downcase the evaluated param value if allowed" do > - Puppet.stubs(:[]).with(:casesensitive).returns(false) > - value = stub 'param' > - �[email protected](:safeevaluate).with(@scope).returns(value) > - > - value.expects(:downcase) > - > - �[email protected](@scope) > - end > - > it "should scan each option" do > @values.expects(:each).multiple_yields(@value1, @value2) > > -- > 1.6.6.1 > > -- > You received this message because you are subscribed to the Google Groups > "Puppet Developers" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/puppet-dev?hl=en. > > -- ----------------------------------------------------------- The power of accurate observation is commonly called cynicism by those who have not got it. ~George Bernard Shaw ------------------------------------------------------------ -- You received this message because you are subscribed to the Google Groups "Puppet Developers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/puppet-dev?hl=en.
