module Passwd::Rails::ActiveRecordExt

Public Instance Methods

with_authenticate(passwd: nil, user_id: :email, password: :password) click to toggle source
# File lib/passwd/rails/active_record_ext.rb, line 3
def with_authenticate(passwd: nil, user_id: :email, password: :password)
  passwd ||= Passwd.current
  define_singleton_auth_with_passwd(user_id)
  define_instance_auth_with_passwd(passwd, password)
  define_instance_set_password(passwd, password)
end

Private Instance Methods

define_instance_auth_with_passwd(passwd, password_col) click to toggle source
# File lib/passwd/rails/active_record_ext.rb, line 21
def define_instance_auth_with_passwd(passwd, password_col)
  define_method :authenticate do |plain|
    BCrypt::Password.new(send(password_col)) == plain
  end
end
define_instance_set_password(passwd, password_col) click to toggle source
# File lib/passwd/rails/active_record_ext.rb, line 27
def define_instance_set_password(passwd, password_col)
  define_method :set_password do |plain = nil|
    plain ||= passwd.random
    send("#{password_col}=", passwd.password_hashing(plain))
    plain
  end
end
define_singleton_auth_with_passwd(user_id_col) click to toggle source
# File lib/passwd/rails/active_record_ext.rb, line 12
def define_singleton_auth_with_passwd(user_id_col)
  define_singleton_method :authenticate do |user_id, plain|
    user = find_by(user_id_col => user_id)
    return nil unless user

    user.authenticate(plain) ? user : nil
  end
end