Эти символы необходимы, потому что <<
имеет более высокий приоритет, чем ?
( таблица приоритетов ). Решение:
line << (even_more.empty? ? " done." : " and even more text")
Обратите внимание, что при построении массивов вы можете использовать функциональный подход:
line = [
"some default text",
("some more text" unless more.empty?),
even_more.empty? ? "done." : "and even more text",
].compact.join(" ")