[Resolvido] - Correção do enunciado da questão 2) do Execício 5.15 da apostila rr71 da Caelum

Pessoal, na apostila rr71 (versão 14.9.25) da Caelum notei que há um problema no código do enunciado do Exercício 2 da seção 5.15:

Está assim

  # Adicione na classe Franquia
  def method_missing(name, *args)
    @restaurantes.each do |r|
      return "O restaurante #{r.nome} já foi cadastrado!" 
         if r.nome.eql? *args
      end
      return "O restaurante #{args[0]} não foi cadastrado ainda."
  end

# Faça as chamadas e analise os resultados
puts franquia.já_cadastrado?("Fazano")
puts franquia.já_cadastrado?("Boteco")

Porém comigo só funcionou quando fiz assim:

  def method_missing(name, *args)
    @restaurantes.each do |r|   
       if r.nome.eql? *args 
         return "O restaurante #{r.nome} já foi cadastrado!"
       end
     end   
        return "O restaurante #{args[0]} não foi cadastrado ainda."
  end

#(...)
puts franquia.ja_cadastrado?("Fazano")
puts franquia.ja_cadastrado?("Boteco")

Estou postando aqui, caso alguém tenha passado pelo mesmo problema.
Abraços!

Boa solução @jamesfrj!
O problema do exercício é que o código realmente não coube em uma única linha no pdf. A ideia seria usar o if na mesma linha da expressão como a seguir:

def method_missing(name, *args) @restaurantes.each do |r| return "O restaurante #{r.nome} já foi cadastrado!" if r.nome.eql? *args end return "O restaurante #{args[0]} não foi cadastrado ainda." end

Ou seja, a expressão com return só será executada se a condição passada para o if for avaliada como verdadeira.
Ajudou?

Entendi o que você falou ricardo.valeriano. É que não sabia que dava para fazer isso dessa maneira com Ruby. Tava muito acostumado a sempre o if vir antes do resultado. No Ruby eu então posso colocar antes ou depois que dá na mesma?

Obrigado pela resposta!

Legal @jamesfrj!

Então, o Ruby permite o posicionamento do if (e do “if negado” que em Ruby pode ser escrito com a palavra chave unless) ao final de uma expressão. A princípio, você pode condicionar qualquer execução de expressão com o if ao final dela, apesar de nem sempre isso ser a forma mais legível de escrever um código. Então vale a pena avaliar caso a caso.

Boa sorte aí nos estudos e, qualquer dúvida, só dizer.