From: Gaspard Bucher Date: 2008-05-18T16:04:52+09:00 Subject: Re: disable regexp warning I still cannot find a solution to disable regex warning in the following situation: def valid_regexp?(str) begin re = /#{str}/ true rescue false end end # should return false and not print a warning valid_regexp?("foo{bar}") => true, prints warning... Many thanks for your help, advice. Gaspard should print "bad regexp", but returns On Thu, May 15, 2008 at 12:01 AM, Gaspard Bucher wrote: > There is a space after '#'. The test actually makes sure no one can > inject ruby. So the role of the function to test is to replace '#{..}' > by '# {...}', but then the {..} is invalid but does not raise an > exception which is annoying. > > On Wed, May 14, 2008 at 3:05 PM, Rick DeNatale wrote: >> On Wed, May 14, 2008 at 3:27 AM, Gaspard Bucher wrote: >>> This is crazy. When I write a simple test case with your example it >>> works just fine but I still get this message when running all the >>> tests: >>> /lib/parser/test/../lib/rules/zena.rb:231: warning: regexp has invalid interval >>> ./lib/parser/test/../lib/rules/zena.rb:231: warning: regexp has `}' >>> without escape >>> compiled-template:1: warning: regexp has invalid interval >>> compiled-template:1: warning: regexp has `}' without escape >>> >>> This message does not come from the simple test I wrote but from this test: >>> ruby test/helpers/zena_parser_test.rb --name test_basic_show_mean_gsub >>> >>> [edit] Ok, I found the problem: >>> >>> def test_bad_regexp >>> assert_equal "invalid regexp \"# {puts >>> 'I AM MEAN'}\"", validate_regexp("# {puts 'I AM MEAN'}") >>> end >>> >>> private >>> def validate_regexp(str) >>> begin >>> re = /#{str}/ >>> rescue => e >>> # invalid regexp >>> "invalid regexp #{str.inspect}" >>> end >>> end >>> >>> The regexp is seen as valid even though it is not. I >> >> Well the regexp you're testing IS valid, perhaps it's not the regexp >> you think it is: >> >> irb(main):009:0> a = "#{puts 'I am mean'}" >> I am mean >> => "" >> irb(main):010:0> a >> => "" >> irb(main):011:0> /#{a}/ >> => // >> >> Remember that puts return nil, and nil.to_s is an empty string. >> >> -- >> Rick DeNatale >> >> My blog on Ruby >> http://talklikeaduck.denhaven2.com/ >> >> > >