Синатра инлайн-темплейты

October 23, 2014

В руби можно закончить скрипт досрочно, а Синатра позволяет разместить там вьюхи. Но давайте обо всем по порядку.

Любой текст, который встретится в руби-скрипте за маркером __END__ проигнорируется во время выполнения, но будет доступен, через IO-объект DATA. В блоге Causis Theory можно найти несколько любопытных примеров использования этой фичи , самый приличный из которых, как мне кажется:

DATA.each_line.map(&:chomp).each do |url|
  `open "#{url}"`
end

__END__
http://google.com/
http://yahoo.com/

Во фрейморке Синатра пошли еще дальше и предложили использовать подвал скрипта для внедрения именованных вьюх. Этот прием называется Inline Templates и позволяет, ну вы сами видите, что он позволяет делать:

require 'rubygems'
require 'sinatra'

get '/' do
  erb :index
end

__END__

@@ layout
<html>
  <body>
    <%= yield %>
  </body>
</html>

@@ index
<div>Hello!</div>

Снимаю шляпу перед очередной экзотической штучкой мира руби.

comments powered by Disqus