# coding: utf-8

7.5 Упражнения

  1. Скопируйте каждый из вариантов метода authenticate из Листинга 7.27 по Листинг 7.31 в Вашу модель User, и проверьте, что они корректны, запустив Ваш набор тестов.
  2. Последний пример authenticate (Листинг 7.31) это практически вызов. Поэкспериментируйте в консоли, чтобы увидеть, сможете ли Вы понять, как это работает.
  3. Как бы Вы заставили работать Gravatar хелпер gravatar_for если бы наша модель User использовала email_address вместо email для отображения email адреса?
Листинг 7.27. authenticate метод с User вместо self.
  def User.authenticate(email, submitted_password)
    user = find_by_email(email)
    return nil  if user.nil?
    return user if user.has_password?(submitted_password)
  end
Листинг 7.28. authenticate метод с явным третьим return.
  def self.authenticate(email, submitted_password)
    user = find_by_email(email)
    return nil  if user.nil?
    return user if user.has_password?(submitted_password)
    return nil
  end
Листинг 7.29. authenticate метод использующий if выражение.
  def self.authenticate(email, submitted_password)
    user = find_by_email(email)
    if user.nil?
      nil
    elsif user.has_password?(submitted_password)
      user
    else
      nil
    end
  end
Листинг 7.30. The authenticate метод использующий an if выражение и неявное возвращение.
  def self.authenticate(email, submitted_password)
    user = find_by_email(email)
    if user.nil?
      nil
    elsif user.has_password?(submitted_password)
      user
    end
  end
Листинг 7.31. The authenticate метод использующий тройной оператор.
  def self.authenticate(email, submitted_password)
    user = find_by_email(email)
    user && user.has_password?(submitted_password) ? user : nil
  end
# coding: utf-8