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 <gaspard / teti.ch> 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 <rick.denatale / gmail.com> wrote:
>> On Wed, May 14, 2008 at 3:27 AM, Gaspard Bucher <gaspard / teti.ch> 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 "<span class='parser_error'>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
>>>       "<span class='parser_error'>invalid regexp #{str.inspect}</span>"
>>>      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/
>>
>>
>
>