Case statement ranges

I have the following in my controller:

def color_coding(value = nil)
case value
when 101…1000000000
“busy_11”

  when 91..100
    "busy_10"

  when 81..90
    "busy_9"

  when 71..80
    "busy_8"

  when 61..70
    "busy_7"

  when 51..60
    "busy_6"

  when 41..50
    "busy_5"

  when 31..40
    "busy_4"

  when 21..30
    "busy_3"

  when 11..20
    "busy_2"

  when 1..10
    "busy_1"

  else
    "no_class"
end

end

Two questions:

  1.   when 101..1000000000
        "busy_11"
    

is obviously an ugly hack. What I want is: output “busy_11” if value
is 101 or higher. Not sure how I should write this in ruby.

  1.   when 91..100
     "busy_10"
    

What I want is: output “busy_10” when value is >= 91 and <= 100. Not
sure if it should be 91…100 or 91…100 or some other syntax.

Tried to google this but couldn’t find a tutorial that covers the
above fully. Thanks in advance!

Best,

Gabor

def color_coding(value = nil)
if value && value > 0
if value > 100
“busy_11”
else
“busy_” + ((value/10)+1).to_s
end
end
end

Cheers,
Tyler

gabordemeter [email protected] wrote:

    "busy_6"
  when 11..20
  1.   when 91..100
    

Gabor

How about this (untested) instead…

def color_coding(value = nil)
if value >= 101
“busy_11”
elsif value <= 0 || value.nil?
“no_class”
else
“busy_” + (value/10.0).ceil.to_s
end
end

Would be a lot shorter…

Thanks guys! Great stuff!

But one question still remains:

what does 91…100 (two dots between the two numbers) mean, and what
does 91…100 (three dots between the two numbers) mean in Ruby?

Best,

Gabor

On Jun 20, 2007, at 4:34 PM, Tyler MacDonald wrote:

Cheers,

  when 91..100

    "busy_3"

end

Two questions:

  1.   when 101..1000000000
        "busy_11"
    

is obviously an ugly hack. What I want is: output “busy_11” if value
is 101 or higher. Not sure how I should write this in ruby.

when nil, 0
“no_class”
else
“busy_11”

I’m guessing what you might want for value==0

Gabor

91…100 === x will test (91 <= x && x <= 100)

91…100 === x (three dot range excludes end) will test (91 <= x && x
< 100)

What should color_coding(100.5) give?

-Rob

Rob B. http://agileconsultingllc.com
[email protected]

Hi –

On Wed, 20 Jun 2007, gabordemeter wrote:

Thanks guys! Great stuff!

But one question still remains:

what does 91…100 (two dots between the two numbers) mean, and what
does 91…100 (three dots between the two numbers) mean in Ruby?

The … is inclusive; the … is exclusive.

David

But one question still remains:

what does 91…100 (two dots between the two numbers) mean, and what
does 91…100 (three dots between the two numbers) mean in Ruby?

The … is inclusive; the … is exclusive.

Best analogy I’ve heard is that that extra dot pushes the last number
off
the cliff where cliff is your range.

That’s the only way I can remember it :slight_smile: