password.present?аналоговый Datamapper - PullRequest
2 голосов
/ 23 марта 2012

Что такое аналог в datamapper для .present?метод?

У меня есть код из приложения rails, и я хочу его повторно использовать - это Sinatra

ex:

  def encrypt_password
    if password.present?
      self.password_salt = BCrypt::Engine.generate_salt
      self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)
    end
  end

в модели Ive перед сохранением обратного вызова

before :save, :encrypt_password

1 Ответ

1 голос
/ 23 марта 2012

Метод present? в ActiveSupport определяется следующим образом:

class Object
    def present?
      !blank?
    end

    def blank?
      respond_to?(:empty?) ? empty? : !self
    end
end

(Источник: http://api.rubyonrails.org/classes/Object.html#method-i-present-3F)

Вы также можете расширить Object. Он проверяет, не является ли Объект пустым. Сам метод blank? проверяет, отвечает ли Объект на empty?. Это в основном для струнных. Если Объект не отвечает на empty?, метод просто возвращает !self. Так что present? просто вернет self. Поэтому вы также можете написать свой код как

  def encrypt_password
    if password
      self.password_salt = BCrypt::Engine.generate_salt
      self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)
    end
  end

Единственное преимущество метода present? состоит в том, что он не обрабатывает пустую строку как существующую, тогда как второй метод делает.

...