Class: UserSecret

Inherits:
ApplicationRecord
  • Object
show all
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

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_reasonObject



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

Returns:

  • (Boolean)


57
58
59
# File 'app/models/user_secret.rb', line 57

def is_valid?
  valid_use_count? && still_alive?
end

#still_alive?Boolean

Returns:

  • (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

Returns:

  • (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