This method was added in Rails 7.0 and makes the code slihgtly more readable. The downside is that it generates two queries instead of one, so it might generate some confusion when debugging SQL queries. Its impact on performance is probably negligible.
101 lines
2.6 KiB
Ruby
101 lines
2.6 KiB
Ruby
module Verification
|
|
extend ActiveSupport::Concern
|
|
|
|
included do
|
|
scope :residence_verified, -> { where.not(residence_verified_at: nil) }
|
|
scope :residence_unverified, -> { excluding(residence_verified) }
|
|
scope :residence_and_phone_verified, -> { residence_verified.where.not(confirmed_phone: nil) }
|
|
scope :residence_or_phone_unverified, -> { residence_unverified.or(where(confirmed_phone: nil)) }
|
|
scope :phone_not_fully_confirmed, -> { where(unconfirmed_phone: nil).or(where(confirmed_phone: nil)) }
|
|
|
|
scope :level_three_verified, -> { where.not(verified_at: nil) }
|
|
scope :level_two_verified, -> do
|
|
where.not(level_two_verified_at: nil).or(residence_and_phone_verified.where(verified_at: nil))
|
|
end
|
|
scope :level_two_or_three_verified, -> { level_two_verified.or(level_three_verified) }
|
|
scope :unverified, -> do
|
|
residence_or_phone_unverified.where(verified_at: nil, level_two_verified_at: nil)
|
|
end
|
|
scope :incomplete_verification, -> do
|
|
residence_unverified.where(failed_census_calls_count: 1..)
|
|
.or(residence_verified.phone_not_fully_confirmed)
|
|
end
|
|
end
|
|
|
|
def skip_verification?
|
|
Setting["feature.user.skip_verification"].present?
|
|
end
|
|
|
|
def verification_email_sent?
|
|
return true if skip_verification?
|
|
|
|
email_verification_token.present?
|
|
end
|
|
|
|
def verification_sms_sent?
|
|
return true if skip_verification?
|
|
|
|
unconfirmed_phone.present? && sms_confirmation_code.present?
|
|
end
|
|
|
|
def verification_letter_sent?
|
|
return true if skip_verification?
|
|
|
|
letter_requested_at.present? && letter_verification_code.present?
|
|
end
|
|
|
|
def residence_verified?
|
|
return true if skip_verification?
|
|
|
|
residence_verified_at.present?
|
|
end
|
|
|
|
def sms_verified?
|
|
return true if skip_verification?
|
|
|
|
confirmed_phone.present?
|
|
end
|
|
|
|
def level_two_verified?
|
|
return true if skip_verification?
|
|
|
|
level_two_verified_at.present? || (residence_verified? && sms_verified?)
|
|
end
|
|
|
|
def level_three_verified?
|
|
return true if skip_verification?
|
|
|
|
verified_at.present?
|
|
end
|
|
|
|
def level_two_or_three_verified?
|
|
level_two_verified? || level_three_verified?
|
|
end
|
|
|
|
def unverified?
|
|
!level_two_or_three_verified?
|
|
end
|
|
|
|
def failed_residence_verification?
|
|
!residence_verified? && !failed_census_calls.empty?
|
|
end
|
|
|
|
def no_phone_available?
|
|
!verification_sms_sent?
|
|
end
|
|
|
|
def user_type
|
|
if level_three_verified?
|
|
:level_3_user
|
|
elsif level_two_verified?
|
|
:level_2_user
|
|
else
|
|
:level_1_user
|
|
end
|
|
end
|
|
|
|
def sms_code_not_confirmed?
|
|
!sms_verified?
|
|
end
|
|
end
|