This rule was added in rubocop 1.44.0. It's useful to avoid accidental `unless !condition` clauses. Note we aren't replacing `unless zero?` with `if nonzero?` because we never use `nonzero?`; using it sounds like `if !zero?`. Replacing `unless any?` with `if none?` is only consistent if we also replace `unless present?` with `if blank?`, so we're also adding this case. For consistency, we're also replacing `unless blank?` with `if present?`. We're also simplifying code dealing with `> 0` conditions in order to make the code (hopefully) easier to understand. Also for consistency, we're enabling the `Style/InverseMethods` rule, which follows a similar idea.
30 lines
491 B
Ruby
30 lines
491 B
Ruby
class Lock < ApplicationRecord
|
|
belongs_to :user
|
|
|
|
before_save :set_locked_until
|
|
|
|
def locked?
|
|
locked_until > Time.current
|
|
end
|
|
|
|
def set_locked_until
|
|
self.locked_until = lock_time if too_many_tries?
|
|
end
|
|
|
|
def lock_time
|
|
Time.current + (2**tries).minutes
|
|
end
|
|
|
|
def too_many_tries?
|
|
tries > 0 && tries % Lock.max_tries == 0
|
|
end
|
|
|
|
def self.increase_tries(user)
|
|
find_or_create_by!(user: user).increment!(:tries).save!
|
|
end
|
|
|
|
def self.max_tries
|
|
5
|
|
end
|
|
end
|