Class: Ask::Auth::Providers::Database

Inherits:
Object
  • Object
show all
Defined in:
lib/ask/auth/providers/database.rb

Overview

ActiveRecord-backed token storage per user.

Expects a model with user_id, name, token, expires_at, refresh_token. Handles expiry: if the token has expired and a refresh token is available, calls refresh! using the stored refresh token.

Only used when a model is configured or available. Safely returns nil otherwise.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(model: default_model) ⇒ Database

Returns a new instance of Database.



17
18
19
# File 'lib/ask/auth/providers/database.rb', line 17

def initialize(model: default_model)
  @model = model
end

Instance Attribute Details

#modelObject (readonly)

The model class used for credential storage.



15
16
17
# File 'lib/ask/auth/providers/database.rb', line 15

def model
  @model
end

Instance Method Details

#call(name, user: nil) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/ask/auth/providers/database.rb', line 21

def call(name, user: nil)
  return nil unless @model
  return nil unless user.respond_to?(:id)

  record = @model.respond_to?(:find_by) ? @model.find_by(user_id: user.id, name: name.to_s) : nil
  return nil unless record

  if record.respond_to?(:expired?) && record.expired?
    return nil unless record.respond_to?(:refresh!)

    record.refresh!
    record.reload if record.respond_to?(:reload)
  end

  record.respond_to?(:token) ? record.token : record
end