Class: Users::PhoneNumberValidation

Inherits:
ApplicationRecord show all
Defined in:
app/models/users/phone_number_validation.rb

Constant Summary collapse

SMS_SEND_WAIT_TIMES =

SMS send attempts subsequent to the first one will have wait times of 1 min, 3 min, 5 min after each one respectively. Wait time between the fifth attempt and so on will be 10 minutes.

[1.minute, 3.minutes, 5.minutes, 10.minutes].freeze

Constants inherited from ApplicationRecord

ApplicationRecord::MAX_PLUCK

Constants included from HasCheckConstraints

HasCheckConstraints::NOT_NULL_CHECK_PATTERN

Constants included from ResetOnColumnErrors

ResetOnColumnErrors::MAX_RESET_PERIOD

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from ApplicationRecord

===, cached_column_list, #create_or_load_association, current_transaction, declarative_enum, default_select_columns, delete_all_returning, #deleted_from_database?, id_in, id_not_in, iid_in, nullable_column?, primary_key_in, #readable_by?, safe_ensure_unique, safe_find_or_create_by, safe_find_or_create_by!, #to_ability_name, underscore, where_exists, where_not_exists, with_fast_read_statement_timeout, without_order

Methods included from Organizations::Sharding

#sharding_organization

Methods included from ResetOnColumnErrors

#reset_on_union_error, #reset_on_unknown_attribute_error

Methods included from Gitlab::SensitiveSerializableHash

#serializable_hash

Class Method Details

.by_reference_id(ref_id) ⇒ Object



65
66
67
# File 'app/models/users/phone_number_validation.rb', line 65

def self.by_reference_id(ref_id)
  find_by(telesign_reference_xid: ref_id)
end

Returns:

  • (Boolean)


55
56
57
58
59
60
61
62
63
# File 'app/models/users/phone_number_validation.rb', line 55

def self.related_to_banned_user?(international_dial_code, phone_number)
  joins(:banned_user)
  .where(
    international_dial_code: international_dial_code,
    phone_number: phone_number
  )
  .where.not(validated_at: nil)
  .exists?
end

Instance Method Details

#duplicate_recordsObject



51
52
53
# File 'app/models/users/phone_number_validation.rb', line 51

def duplicate_records
  self.class.similar_to(self).where.not(user: user)
end

#similar_recordsObject



47
48
49
# File 'app/models/users/phone_number_validation.rb', line 47

def similar_records
  self.class.similar_to(self).includes(:user)
end

#sms_send_allowed_afterObject



73
74
75
76
77
78
79
80
81
82
# File 'app/models/users/phone_number_validation.rb', line 73

def sms_send_allowed_after
  # first send is allowed anytime
  return if sms_send_count < 1
  return unless sms_sent_at

  max_wait_time = SMS_SEND_WAIT_TIMES.last
  wait_time = SMS_SEND_WAIT_TIMES.fetch(sms_send_count - 1, max_wait_time)

  sms_sent_at + wait_time
end

#validated?Boolean

Returns:

  • (Boolean)


69
70
71
# File 'app/models/users/phone_number_validation.rb', line 69

def validated?
  validated_at.present?
end