Paolo Negri
11/1/2007 4:24:00 PM
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 <gabe@dragffy.com> 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
>
>