Это - хитрый вопрос. Так как шепелявость уже структурно так близко к дереву синтаксического анализа, различие между большим количеством макросов и реализацией Вашего собственного мини-языка в парсере-генераторе не очень ясно. Но, за исключением открытия и закрытия paren, Вы могли очень легко закончить с чем-то, что не смотрит ничто как шепелявость.
Это сработало для меня при использовании send_data, например, send_data(data, :filename => "inventory_#{Date.today.to_s}.csv", :disposition => 'attachment')
Вероятно, не лучший способ написать шаг, но это сработало!
Then /^I should receive a file(?: "([^"]*)")?/ do |file|
result = page.response_headers['Content-Type'].should == "application/octet-stream"
if result
result = page.response_headers['Content-Disposition'].should =~ /#{file}/
end
result
end