Você já teve que escrever linhas longas de código tentando manter a indentação e parece que Ruby não tem uma solução para strings
em multiline, certo? Seus problemas acabaram!
expect(current_page).to have_content('exemplo de texto que poderia '\
'melhorar')
Bom, para isso servem as heredocs ou here-document, uma forma de escrever texto que pode ser tratada como algo separado do seu código. Vamos começar vendo alguns exemplos:
text = <<HEREDOC
Mas no final é só uma coisa passageira, essa sombra.
Mesmo a escuridão deve passar.
HEREDOC
# => " Mas no final é só uma coisa passageira, essa sombra. \n Mesmo a escuridão deve passar.\n"
Esse seria o uso mais simples de heredoc, onde mantemos as quebras de linha e a organização do texto. Se quisermos remover esses espaços precisaremos tratar ou remover na indentação do código.
O problema do uso somente com <<
é que a palavra final deve estar no começo da linha.
def lord_of_the_rings
<<HEREDOC
Mas no final é só uma coisa passageira, essa sombra.
Mesmo a escuridão deve passar.
HEREDOC
end
Dica: Estamos usando a notação HEREDOC, mas na verdade podemos usar qualquer texto para substituir essa notação. A parte importante é que seja um texto que não aparece na string escrita entre as notações.
Para melhorar, em Ruby temos uma forma mais adequada de fazer isso usando a notação <<-
.
def find_shire
<<-SQL
SELECT * FROM land
WHERE name = 'Shire'
SQL
end
find_shire
# => " SELECT * FROM land\n WHERE name = 'Shire'\n"
Escrito dessa forma podemos indentar o término juntamente com o nosso código, algo similar ao %q() ou %Q().
Dica: Com Heredocs também podemos usar a notação #{código ruby} para interpolar strings. Você pode desabilitar essa opção definindo a Heredoc entre aspas:
<<-'SQL'
.
Com o Ruby 2.3 foi introduzida mais uma notação que soluciona grande parte dos nossos problemas que é a Squiggly Heredoc. Com ela, podemos desconsiderar a indentação do texto o que nos ajuda muito a organizar o nosso código.
def lord_of_the_rings
<<~HEREDOC
Mas no final é só uma coisa passageira, essa sombra.
Mesmo a escuridão deve passar.
HEREDOC
end
lord_of_the_rings
# => "Mas no final é só uma coisa passageira, essa sombra. \nMesmo a escuridão deve passar.\n"
def other_quote
<<~HEREDOC.strip
Você pode encontrar as coisas que perdeu,
mas nunca as que abandonou.
HEREDOC
end
# => "Você pode encontrar as coisas que perdeu, \nmas nunca as que abandonou."
A documentação do Ruby é bem completa, com outros exemplos de como usar Here Document, então, se quiser continuar a leitura, o link está aqui nas referências.