Опубликован: 27.01.2016 | Уровень: для всех | Доступ: платный
Лекция 7:

Регистрация

Заключение

Возможность регистрировать пользователей это важная веха для нашего приложения. Хотя пример приложения до сих пор не делает ничего полезного, мы заложили необходимый фундамент для последующей разработки. В Главе 8 мы завершим наш механизм аутентификации позволив пользователям входить и выходить из приложения. В Главе 9 позволим пользователям обновлять информацию в их учетных записях и позволим администраторам сайта удалять пользователей тем самым завершив полный набор REST действий ресурса Users из Таблицы 7.1. Наконец, мы добавим методы авторизации к нашим действиям для того чтобы обеспечить безопасность сайта.

Упражнения

  1. Проверьте что код в Листинге 7.30 позволяет хелперу gravatar_for, определенному в Разделе 7.1.4 принимать опциональный параметр size, позволив код вроде gravatar_for user, size: 40 в представлении.
  2. Напишите тесты для ошибок регистрации реализованных в Листинге 7.23. Стартовые рекомендации представлены в Листинге 7.31.
  3. Написав вначале тест или намеренно ломая, а затем исправляя код приложения, проверьте что тесты в Листинге 7.32 правильно описывают поведение после сохранения пользователя в действии create. Листинг 7.32 использует метов have_selector представленный в упражнениях Главы 5 (Раздел 5.6). В данном случае мы используем have_selector для выбора определенных CSS классов вместе с конкретными HTML тегами.
  4. Как было отмечено ранее, HTML флэша в Листинге 7.27 уродлив. Проверьте, запустив набор тестов, что очищенный код в Листинге 7.33, использующий Rails хелпер content_tag, тоже работает.
module UsersHelper

  # Returns the Gravatar (http://gravatar.com/) for the given user.
  def gravatar_for(user, options = { size: 50 })
    gravatar_id = Digest::MD5::hexdigest(user.email.downcase)
    size = options[:size]
    gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}?s=#{size}"
    image_tag(gravatar_url, alt: user.name, class: "gravatar")
  end
end
Листинг 7.30. Определение необязательного параметра :size для хелпера gravatar_for. app/helpers/users_helper.rb
.
  .
  .
  describe "signup" do

    before { visit signup_path }
    .
    .
    .
    describe "with invalid information" do
      .
      .
      .
      describe "after submission" do
        before { click_button submit }

        it { should have_title('Sign up') }
        it { should have_content('error') }
      end
      .
      .
      .
Листинг 7.31. Рекомендуемые тесты для сообщений об ошибках. spec/requests/user_pages_spec.rb
 .
    .
    .
    describe "with valid information" do
      .
      .
      .
      describe "after saving the user" do
        before { click_button submit }
        let(:user) { User.find_by(email: 'user@example.com') }

        it { should have_title(user.name) }
        it { should have_selector('div.alert.alert-success', text: 'Welcome') }
      end
      .
      .
      .
Листинг 7.32. Тесты описывающие поведение после сохранения в действии create. spec/requests/user_pages_spec.rb
<!DOCTYPE html>
<html>
      .
      .
      .
      <% flash.each do |key, value| %>
        <%= content_tag(:div, value, class: "alert alert-#{key}") %>
      <% end %>
      .
      .
      .
</html>
Листинг 7.33. ERb для flash в шаблоне сайта использующий content_tag. app/views/layouts/application.html.erb
Вадим Обозин
Вадим Обозин

Здравствуйте, записался на курс. При этом ставил галочку на "обучаться с тьютором". На email пришло письмо, о том, что записался на самостоятельное изучение курса. Как выбрать тьютора?

Акбар Ахвердов
Акбар Ахвердов
Россия, г. Москва
Артём Зайцев
Артём Зайцев
Украина, ДНР