Использование after_filter в Ruby on Rails
July 27, 2009 in Ruby on RailsЕсть такая штука в ActionController – after_filter. Судя по гуглу, его используют раз в пять реже, чем before_filter. Тем не менее, с after_filter тоже можно делать всякие интересные штуки – над результатом работы приложения. Например:
Заставляем браузер выдать диалог загрузки вместо отображения страницы:
def please_download_this headers['Content-type'] = 'application/octet-stream' end
Меняем кодировку выдачи «на лету» (нужно было для скармливания xml одному аггрегатору, это гораздо удобнее чем перекодировать отдельно каждое поле):
def this_xml_needs_to_be_in_cp1251 response.charset = 'cp1251' response.body = Iconv.conv('cp1251//IGNORE//TRANSLIT','UTF-8',response.body) end
Выполняем минификацию (опасная штука, если пробелы имеют значение, зато подойдет в контексте CSS и Javascript)
def minify_this response.body = response.body.gsub!(/\s+/m,' ') end
Кешируем содержимое страницы в статику (да, лучше это делать не в public, чтоб не спутать кеш с обычной статикой):
def cache_this File::open("#{RAILS_ROOT}/public#{request_uri}",'w') do |f| f.write response.body end end
А еще можно заворачивать контент в какой-то хитрый контейнер, можно его шифровать, валидировать, можно даже выполнять операции над DOM-моделью, если так хочется (hpricot в помощь). Удачи!
Понравился пост? Купи мне кофе