Module: BetterAuth::Passkey::Schema

Defined in:
lib/better_auth/passkey/schema.rb

Class Method Summary collapse

Class Method Details

.deep_merge_hashes(base, override) ⇒ Object



29
30
31
32
33
34
35
36
37
# File 'lib/better_auth/passkey/schema.rb', line 29

def deep_merge_hashes(base, override)
  base.merge(override) do |_key, old_value, new_value|
    if old_value.is_a?(Hash) && new_value.is_a?(Hash)
      deep_merge_hashes(old_value, new_value)
    else
      new_value
    end
  end
end

.normalize_hash(value) ⇒ Object



39
40
41
42
43
44
45
# File 'lib/better_auth/passkey/schema.rb', line 39

def normalize_hash(value)
  return {} unless value.is_a?(Hash)

  value.each_with_object({}) do |(key, object), result|
    result[normalize_key(key)] = object.is_a?(Hash) ? normalize_hash(object) : object
  end
end

.normalize_key(key) ⇒ Object



47
48
49
50
51
52
53
54
# File 'lib/better_auth/passkey/schema.rb', line 47

def normalize_key(key)
  key.to_s
    .delete_prefix("$")
    .gsub(/([a-z\d])([A-Z])/, "\\1_\\2")
    .tr("-", "_")
    .downcase
    .to_sym
end

.passkey_schema(custom_schema = nil) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/better_auth/passkey/schema.rb', line 8

def passkey_schema(custom_schema = nil)
  base = {
    passkey: {
      model_name: "passkeys",
      fields: {
        name: {type: "string", required: false},
        publicKey: {type: "string", required: true},
        userId: {type: "string", references: {model: "user", field: "id"}, required: true, index: true},
        credentialID: {type: "string", required: true, index: true},
        counter: {type: "number", required: true},
        deviceType: {type: "string", required: true},
        backedUp: {type: "boolean", required: true},
        transports: {type: "string", required: false},
        createdAt: {type: "date", required: false},
        aaguid: {type: "string", required: false}
      }
    }
  }
  deep_merge_hashes(normalize_hash(base), normalize_hash(custom_schema || {}))
end