Я хочу сделать это:
case cost when cost between 1 and 3 then cost * 1.1 when cost between 3 and 5 then cost * 1.2 else 0
Да, поскольку Range#=== определено так же, как include?, вы можете использовать диапазоны в операторах case:
Range#===
include?
case
case cost when 1..3 then cost * 1.1 when 3..5 then cost * 1.2
Да. Я не знаю, почему вы не подумали об этом в Google или просто не попробовали это (в этом и заключается прелесть Ruby, IMO: обычно все работает так, как вы думаете), но я отвечу точно так же: http://ilikestuffblog.com/2008/04/15/how-to-write-case-switch-statements-in-ruby/
В частности:
case expression when min..max statements else statements end