Module: Devise::Models::SmsConfirmable::ClassMethods

Defined in:
lib/devise_sms_confirmable/models/sms_confirmable.rb

Instance Method Summary collapse

Instance Method Details

#find_by_unconfirmed_phone_with_errors(attributes = {}) ⇒ Object



239
240
241
242
243
244
245
# 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 = {}) ⇒ Object



215
216
217
218
219
220
221
222
# 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) ⇒ Object



224
225
226
227
228
229
230
231
232
233
234
235
236
237
# 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