Продолжаю рассказывать о замечательной тулзе Middleman. Расскажу о двух еще очень важных вещах, а остальное можете вычитать из официальной документации.

Хелперы

Вью-хелперы можно использовать в любом шаблоне нашего приложения. Стандартные хелперы типа link_to известны всем rails-девелоперам. Хороший пример этого хелпера:

<%= link_to 'My Form', '/form.html', query: {foo: 'bar'}, fragment: 'deep' %>

Сгенерирует ссылку следующего вида:

<a href='/form.html?foo=bar#deep'>My Form</a>

Хелперы для генерации тегов ассетов

Просто оставлю пример:

<html>
<head>
  <%= stylesheet_link_tag 'layout' %>
  <%= javascript_include_tag 'application' %>
  <%= favicon_tag 'images/favicon.png' %>
</head>
<body>
  <p><%= link_to 'Blog', '/blog', class: 'example' %></p>
  <p>Mail me at <%= mail_to 'fake@faker.com', 'Fake Email Link', 
                      cc:  'test@demo.com' %></p>
  <p><%= image_tag 'padrino.png', width: '35', 
           class: 'logo' %></p>
</body>
</html>

Список остальных полезных хелперов можно посмотреть на страничке документации. А здесь я еще немного опишу...

Кастомные хелперы

Определить кастомный хелпер можно в файле конфига config.rb:

helpers do
  def some_method
    # ...do something here...
  end
end

А можно в отдельном файле в папке helpers с соответствующим названием (например, helpers/custom_helpers.rb):

module CustomHelpers
  def some_method
    # ...do something here...
  end
end

Динамические страницы

Middleman позволяет использовать один и тот же шаблон для отображения различных данных. Это задается с помощью метода proxy в файле конфигурации config.rb, например:

# Assumes the file source/about/template.html.erb exists
['tom', 'dick', 'harry'].each do |name|
  proxy "/about/#{name}.html", '/about/template.html', locals: {person_name: name}
end

Думаю, не нужно объяснять, что из этого получится. Для каждой прокси во время генерации мидлмен создаст отдельную статическую страничку. Таким образом, мы можем генерировать сколько угодно страниц с каким угодно контентом. При этом, контент отдельно, а шаблоны отдельно.

На этом хочу закончить введение в работу с Middleman. Совсем скоро с его помощью я сделаю небольшое приложение для демонстрации работы моей библиотеки vtree.js, и постараюсь подробно описать этот процесс.