module Devise::Models::SmsConfirmable::ClassMethods

Public Instance Methods

find_by_unconfirmed_phone_with_errors(attributes = {}) click to toggle source
# File lib/devise_sms_confirmable/models/sms_confirmable.rb, line 239
def find_by_unconfirmed_phone_with_errors(attributes = {})
  attributes = attributes.slice(*sms_confirmation_keys).permit!.to_h if attributes.respond_to? :permit
  unconfirmed_required_attributes = sms_confirmation_keys.map { |k| k == :phone ? :unconfirmed_phone : k }
  unconfirmed_attributes = attributes.symbolize_keys
  unconfirmed_attributes[:unconfirmed_phone] = unconfirmed_attributes.delete(:phone)
  find_or_initialize_with_errors(unconfirmed_required_attributes, unconfirmed_attributes, :not_found)
end
send_sms_confirmation_instructions(attributes={}) click to toggle source
# File lib/devise_sms_confirmable/models/sms_confirmable.rb, line 215
def send_sms_confirmation_instructions(attributes={})
  confirmable = find_by_unconfirmed_phone_with_errors(attributes) if sms_reconfirmable
  unless confirmable.try(:persisted?)
    confirmable = find_or_initialize_with_errors(sms_confirmation_keys, attributes, :not_found)
  end
  confirmable.resend_sms_confirmation_instructions if confirmable.persisted?
  confirmable
end
sms_confirm_by_token(phone, sms_confirmation_token, context: nil) click to toggle source
# File lib/devise_sms_confirmable/models/sms_confirmable.rb, line 224
def sms_confirm_by_token(phone, sms_confirmation_token, context: nil)
  confirmable = find_first_by_auth_conditions(phone: phone, sms_confirmation_token: sms_confirmation_token)
  unless confirmable
    confirmation_digest = Devise.token_generator.digest(self, :sms_confirmation_token, sms_confirmation_token)
    confirmable = find_or_initialize_with_errors([:phone, :sms_confirmation_token], { phone: phone, sms_confirmation_token: confirmation_digest }, :invalid)
  end

  # TODO: replace above lines with
  # confirmable = find_or_initialize_with_error_by(:sms_confirmation_token, sms_confirmation_token)
  # after enough time has passed that Devise clients do not use digested tokens

  confirmable.sms_confirm(context: context) if confirmable.persisted?
  confirmable
end