# coding: utf-8

Gravatar хелпер

На данный момент, Gravatar отображается правильно, но последний пример из Листинга 7.18 до сих пор не проходит. Это потому, что класс "gravatar" , который мы хотим использовать в CSS для Gravatar, еще не присутствует в теге img Gravatar-а. Мы можем заставить тест пройти, включив опцию в метод gravatar_image_tag:

<%= gravatar_image_tag @user.email, :class => "gravatar" %>

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

Это может напомнить вам ситуацию с повторением в базовом заголовке сайта (“Ruby on Rails Tutorial Sample App”), которую мы решили с title помощником в Application helper (Листинг 4.2). Решение здесь аналогично; так как Gravatars естественным образом связаны с пользователями, мы определим gravatar_for метод в Users helper. (Users helpers выбран вместо Application helper только для концептуального удобства; Rails делает все помощники доступными во всех представлениях.) результатом будет сокращение кода представления

<%= gravatar_for @user %>

gravatar_for помощник должен принимать объект user а затем передавать некоторые дефолтные параметры помощнику gravatar_image_tag. Реализация представлена в Листинге 7.23.

Листинг 7.23. Определение метода gravatar_for хелпер.
app/helpers/users_helper.rb
module UsersHelper

  def gravatar_for(user, options = { :size => 50 })

    gravatar_image_tag(user.email.downcase, :alt => user.name,
                                            :class => 'gravatar',
                                            :gravatar => options)
  end
end

Первый аргумент в вызове gravatar_image_tag передает строчную версию пользовательского email адреса (используя метод downcase).22 Затем первая опция gravatar_image_tag присваивает пользовательское имя атрибуту alt тега img (который отображается в устройствах не показывающих изображения), в то время как вторая опция устанавливает CSS класс получившегося Gravatar. Третья опция передает хэш options используя ключ :gravatar, который (в соответствии с gravatar_image_tag гем документацией) is how to set the options (??) для gravatar_image_tag. отметьте что определение функции устанавливает дефолтную опцию23 для размера Gravatar24 используя

option = { :size => 50 }

Что устанавливает дефолтный размер Gravatar 50x50, а также позволяет переопределить размер по умолчанию с помощью кода

<%= gravatar_for @user, :size => 30 %>

Если мы сейчас обновим user show шаблон с кодом из Листинга 7.24, страница показывающая пользователя будет выглядеть как в Рис. 7.6. И так как gravatar_for помощник назначает img тегу класс "gravatar", тесты из Листинга 7.18 теперь должны пройти.

Листинг 7.24. Обновление user show шаблона для использования gravatar_for.

app/views/users/show.html.erb
<h1>
  <%= gravatar_for @user %>
  <%= @user.name %>
</h1>
user_show_gravatar_for

Рисунок 7.6: Страница показывающая пользователя с gravatar_for(полный размер)
# coding: utf-8