Здравствуйте, записался на курс. При этом ставил галочку на "обучаться с тьютором". На email пришло письмо, о том, что записался на самостоятельное изучение курса. Как выбрать тьютора? |
Опубликован: 27.01.2016 | Доступ: свободный | Студентов: 916 / 58 | Длительность: 23:07:00
Специальности: Архитектор программного обеспечения, Разработчик интернет-проектов
Лекция 7:
Регистрация
Заключение
Возможность регистрировать пользователей это важная веха для нашего приложения. Хотя пример приложения до сих пор не делает ничего полезного, мы заложили необходимый фундамент для последующей разработки. В Главе 8 мы завершим наш механизм аутентификации позволив пользователям входить и выходить из приложения. В Главе 9 позволим пользователям обновлять информацию в их учетных записях и позволим администраторам сайта удалять пользователей тем самым завершив полный набор REST действий ресурса Users из Таблицы 7.1. Наконец, мы добавим методы авторизации к нашим действиям для того чтобы обеспечить безопасность сайта.
Упражнения
- Проверьте что код в Листинге 7.30 позволяет хелперу gravatar_for, определенному в Разделе 7.1.4 принимать опциональный параметр size, позволив код вроде gravatar_for user, size: 40 в представлении.
- Напишите тесты для ошибок регистрации реализованных в Листинге 7.23. Стартовые рекомендации представлены в Листинге 7.31.
- Написав вначале тест или намеренно ломая, а затем исправляя код приложения, проверьте что тесты в Листинге 7.32 правильно описывают поведение после сохранения пользователя в действии create. Листинг 7.32 использует метов have_selector представленный в упражнениях Главы 5 (Раздел 5.6). В данном случае мы используем have_selector для выбора определенных CSS классов вместе с конкретными HTML тегами.
- Как было отмечено ранее, 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