1
0
Fork 0
mirror of https://github.com/heartcombo/devise.git synced 2022-11-09 12:18:31 -05:00
heartcombo--devise/lib/devise/models/recoverable.rb

64 lines
2.1 KiB
Ruby

module Devise
module Recoverable
require 'devise/models/perishable'
def self.included(base)
base.class_eval do
extend ClassMethods
include ::Devise::Perishable
end
end
# Update password
#
def reset_password(new_password, new_password_confirmation)
self.password = new_password
self.password_confirmation = new_password_confirmation
end
# Update password saving the record
#
def reset_password!(new_password, new_password_confirmation)
reset_password(new_password, new_password_confirmation) and save
end
# Resets perishable token and send reset password instructions by email
#
def send_reset_password_instructions
reset_perishable_token!
::Notifier.deliver_reset_password_instructions(self)
end
module ClassMethods
# Attempt to find a user by it's email. If a record is found, send new
# password instructions to it. If not user is found, returns a new user
# with an email not found error.
#
def find_and_send_reset_password_instructions(email)
recoverable = find_or_initialize_by_email(email)
unless recoverable.new_record?
recoverable.send_reset_password_instructions
else
recoverable.errors.add(:email, :not_found, :default => 'not found')
end
recoverable
end
# Attempt to find a user by it's perishable_token to reset it's password.
# If a user is found, reset it's password and automatically try saving the
# record. If not user is found, returns a new user containing an error
# in perishable_token attribute
#
def find_and_reset_password(perishable_token, password=nil, password_confirmation=nil)
recoverable = find_or_initialize_by_perishable_token(perishable_token)
unless recoverable.new_record?
recoverable.reset_password!(password, password_confirmation)
else
recoverable.errors.add(:perishable_token, :invalid, :default => "invalid confirmation")
end
recoverable
end
end
end
end