From: Paolo Negri Date: 2007-11-02T01:24:04+09:00 Subject: Re: use of case statement doesn't work as I expect :( help appreciated! I think you problem is in your code the case is testing if result.is_a? Net::HTTPOK and not result == Net::HTTPOK This happens since Net::HTTPOK is a class and not an object If you rewrite your code this way you should see the behaviour you're expecting. result = TestWebsite::test( site ) case result.to_s when 'Net::HTTPOK' severity = :INFO when 'SocketError' severity = :ERROR else severity = :WARN end A better idea would be to have TestWebsite::test( site ) returning the object and not the class, this way you don't need to rewrite your original case code Paolo On 01/11/2007, Gabriel Dragffy wrote: > Hi all, > > I have an object ( a website tester) that can return various values. > One of which is Net:HTTPOK, I want to use a case statement to evaluate > this and set a variable called 'severity', as follows: > > result = TestWebsite::test( site ) > case result > when Net::HTTPOK > severity = :INFO > when SocketError > severity = :ERROR > else > severity = :WARN > end > > However, when Net::HTTPOK is returned, the severity variable ALWAYS > ends up as :WARN instead of :INFO. > > Using IRB I have manually entered the code in as follows: > >> site = 'beautyandthebrand.co.uk' > => "beautyandthebrand.co.uk" > >> result = TestWebsite::test( site ) > => Net::HTTPOK > > Then ran the following tests: > >> result == Net::HTTPOK > => true > >> result != Net::HTTPOK > => false > > This to me just proves the result I am getting is Net::HTTPOK, but why > can't I get it to match in the case statement? > > Many thanks for any help > > Gabriel > >