Class: RubyCode::Models::ApiKey

Inherits:
Base
  • Object
show all
Defined in:
lib/rubycode/models/api_key.rb

Overview

Manages encrypted API keys for LLM providers

Class Method Summary collapse

Methods inherited from Base

all, count, dataset, delete, first, last, latest, oldest, order, where

Class Method Details

.delete_key(adapter:) ⇒ Object

Delete an API key for a specific adapter

Parameters:

  • adapter (Symbol) —

    The adapter name



60
61
62
# File 'lib/rubycode/models/api_key.rb', line 60

def delete_key(adapter:)
  dataset.where(adapter: adapter.to_s).delete
end

.get_key(adapter:) ⇒ String?

Retrieve and decrypt an API key for a specific adapter

Parameters:

  • adapter (Symbol) —

    The adapter name

Returns:

  • (String, nil) —

    The decrypted API key or nil if not found



48
49
50
51
52
53
54
55
56
# File 'lib/rubycode/models/api_key.rb', line 48

def get_key(adapter:)
  row = dataset.where(adapter: adapter.to_s).first
  return nil unless row

  decrypt(
    encrypted: row[:encrypted_key],
    init_vector: row[:iv]
  )
end

.insert_new_key(adapter, encrypted_data) ⇒ Object



37
38
39
40
41
42
43
# File 'lib/rubycode/models/api_key.rb', line 37

def insert_new_key(adapter, encrypted_data)
  dataset.insert(
    adapter: adapter.to_s,
    encrypted_key: encrypted_data[:encrypted],
    iv: encrypted_data[:iv]
  )
end

.key_exists?(adapter:) ⇒ Boolean

Check if an API key exists for a specific adapter

Parameters:

  • adapter (Symbol) —

    The adapter name

Returns:

  • (Boolean)


67
68
69
# File 'lib/rubycode/models/api_key.rb', line 67

def key_exists?(adapter:)
  dataset.where(adapter: adapter.to_s).any?
end

.save_key(adapter:, api_key:) ⇒ Object

Save an API key for a specific adapter

Parameters:

  • adapter (Symbol) —

    The adapter name (:ollama, :groq, etc.)

  • api_key (String) —

    The plaintext API key



18
19
20
21
22
23
24
25
26
27
# File 'lib/rubycode/models/api_key.rb', line 18

def save_key(adapter:, api_key:)
  encrypted_data = encrypt(api_key)
  existing = dataset.where(adapter: adapter.to_s).first

  if existing
    update_existing_key(adapter, encrypted_data)
  else
    insert_new_key(adapter, encrypted_data)
  end
end

.table_name ⇒ Object



11
12
13
# File 'lib/rubycode/models/api_key.rb', line 11

def table_name
  :api_keys
end

.update_existing_key(adapter, encrypted_data) ⇒ Object



29
30
31
32
33
34
35
# File 'lib/rubycode/models/api_key.rb', line 29

def update_existing_key(adapter, encrypted_data)
  dataset.where(adapter: adapter.to_s).update(
    encrypted_key: encrypted_data[:encrypted],
    iv: encrypted_data[:iv],
    updated_at: Time.now
  )
end