MrSlippyFist MrSlippyFist - 7 days ago 6
Ruby Question

Can I use .include?() in a case statement? Ruby

I have started to learn Ruby. I have a small project to build a game and tried to create a function that receives user input and handle accordingly.

def Game.listener
print "> "

while listen = $stdin.gets.chomp.downcase

case listen
when (listen.include?("navigate"))
puts "Navigate to #{listen}"
break
when ($player_items.include?(listen))
Items.use(listen)
break
end

puts "Not a option"
print "> "
end
end


However, the case statement is unable to detect I have typed navigate. Is there a way to fix this or if I'm totally off can someone point me in the right direction?

I have found this way to solve my problem, is it a safe and reliable way?

while listen = $stdin.gets.chomp
case listen.include?(listen)
when listen.include?("navigate")
puts "Navigate to #{listen}"
when listen.include?("test")
puts "test"
when $player_items.include?(listen)
puts "Using the #{$player_items[listen]}"
break
else
puts "Not a option"
end
print "> "
end

Answer

If you want to use a case instead of an if-elsif block, then you can write something like this (note the blank space after the case):

while listen = $stdin.gets.chomp

case
when listen.include?('navigate')
  puts "Navigate to #{listen}"

when listen.include?('test')
  puts 'test'

when $player_items.include?(listen)
  puts "Using the #{$player_items[listen]}"
  break

else
  puts "Not a option"
end

print "> "

end