Files
nairobi/app/models/verification/letter.rb
Javi Martín d0d681a44b Add and apply EmptyLineAfterGuardClause rule
We were inconsistent on this one. I consider it particularly useful when
a method starts with a `return` statement.

In other cases, we probably shouldn't have a guard rule in the middle of
a method in any case, but that's a different refactoring.
2019-10-24 17:56:03 +02:00

56 lines
1.3 KiB
Ruby

class Verification::Letter
include ActiveModel::Model
attr_accessor :user, :verification_code, :email, :password, :verify
validate :validate_existing_user
validates :email, presence: true, if: :verify?
validates :password, presence: true, if: :verify?
validates :verification_code, presence: true, if: :verify?
validate :validate_correct_code, if: :verify?
def save
valid? &&
letter_requested!
end
def save!
validate! && save
end
def letter_requested!
user.update(letter_requested_at: Time.current, letter_verification_code: generate_verification_code)
end
def validate_existing_user
unless user
errors.add(:email, I18n.t("devise.failure.invalid", authentication_keys: "email"))
end
end
def validate_correct_code
return if errors.include?(:verification_code)
if user&.letter_verification_code.to_i != verification_code.to_i
errors.add(:verification_code, I18n.t("verification.letter.errors.incorrect_code"))
end
end
def verify?
verify.present?
end
def increase_letter_verification_tries
user.update(letter_verification_tries: user.letter_verification_tries += 1)
end
private
# six-digit numbers, zero not the first digit
def generate_verification_code
rand(100000..999999).to_s
end
end