Class: UserSecret
- Inherits:
-
ApplicationRecord
- Object
- ApplicationRecord
- UserSecret
- Defined in:
- app/models/user_secret.rb
Overview
Schema Information
Table name: user_secrets
id :bigint not null, primary key
death_time :datetime
extra :string(255)
reason :string(255)
secret :string(255)
use_count :integer default(0)
use_count_max :integer
created_at :datetime not null
updated_at :datetime not null
user_id :bigint not null
Indexes
index_user_secrets_on_secret (secret) UNIQUE
index_user_secrets_on_user_id (user_id)
Foreign Keys
fk_rails_... (user_id => users.id)
Class Method Summary collapse
Instance Method Summary collapse
- #access_count! ⇒ Object
- #invalid_reason ⇒ Object
- #is_valid? ⇒ Boolean
- #still_alive? ⇒ Boolean
- #valid_use_count? ⇒ Boolean
Class Method Details
.find_record(secret:, reason: nil, access_count: true) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'app/models/user_secret.rb', line 30 def self.find_record(secret:, reason: nil, access_count: true) params = { secret:, reason: }.compact record = where(**params).first return { found: false } if record.nil? record.access_count! if access_count { found: true, valid: record.is_valid?, record: record, user: record.user, } end |
Instance Method Details
#access_count! ⇒ Object
53 54 55 |
# File 'app/models/user_secret.rb', line 53 def access_count! update(use_count: use_count + 1) end |
#invalid_reason ⇒ Object
45 46 47 48 49 50 51 |
# File 'app/models/user_secret.rb', line 45 def invalid_reason arr = [] arr << "Expired secret." if !still_alive? arr << "Secret used too many times." if !valid_use_count? arr end |
#is_valid? ⇒ Boolean
57 58 59 |
# File 'app/models/user_secret.rb', line 57 def is_valid? valid_use_count? && still_alive? end |
#still_alive? ⇒ Boolean
67 68 69 70 71 |
# File 'app/models/user_secret.rb', line 67 def still_alive? return true if death_time.nil? death_time > Time.now end |
#valid_use_count? ⇒ Boolean
61 62 63 64 65 |
# File 'app/models/user_secret.rb', line 61 def valid_use_count? return true if use_count_max.nil? use_count <= use_count_max end |