Class: Identizer::IdentityStore::SqliteStore
- Inherits:
-
Object
- Object
- Identizer::IdentityStore::SqliteStore
- Defined in:
- lib/identizer/identity_store/sqlite_store.rb
Overview
Optional SQLite-backed directory. Same interface as ConfigStore, so it drops in via ‘config.identity_store`. Requires the `sqlite3` gem (not a default dependency) — add it to your Gemfile to use this adapter.
require "identizer/identity_store/sqlite_store"
config.identity_store = Identizer::IdentityStore::SqliteStore.new(path: "dev.sqlite3")
Instance Method Summary collapse
- #delete(email) ⇒ Object
- #emails ⇒ Object
- #entries ⇒ Object
- #identity_for(email) ⇒ Object
-
#initialize(path:, base_dn: DirectoryEntry::DEFAULT_BASE_DN, seed: []) ⇒ SqliteStore
constructor
A new instance of SqliteStore.
- #upsert(attrs) ⇒ Object
Constructor Details
#initialize(path:, base_dn: DirectoryEntry::DEFAULT_BASE_DN, seed: []) ⇒ SqliteStore
Returns a new instance of SqliteStore.
15 16 17 18 19 20 |
# File 'lib/identizer/identity_store/sqlite_store.rb', line 15 def initialize(path:, base_dn: DirectoryEntry::DEFAULT_BASE_DN, seed: []) @base_dn = base_dn @db = SQLite3::Database.new(path.to_s) @db.execute("CREATE TABLE IF NOT EXISTS entries (mail TEXT PRIMARY KEY, data TEXT NOT NULL)") seed_if_empty(Array(seed)) end |
Instance Method Details
#delete(email) ⇒ Object
49 50 51 |
# File 'lib/identizer/identity_store/sqlite_store.rb', line 49 def delete(email) @db.execute("DELETE FROM entries WHERE mail = ?", [email.to_s.strip]) end |
#emails ⇒ Object
28 29 30 |
# File 'lib/identizer/identity_store/sqlite_store.rb', line 28 def emails entries.map(&:mail) end |
#entries ⇒ Object
22 23 24 25 26 |
# File 'lib/identizer/identity_store/sqlite_store.rb', line 22 def entries @db.execute("SELECT data FROM entries ORDER BY mail").map do |row| DirectoryEntry.from(JSON.parse(row[0]), base_dn: @base_dn) end end |
#identity_for(email) ⇒ Object
32 33 34 35 36 37 38 |
# File 'lib/identizer/identity_store/sqlite_store.rb', line 32 def identity_for(email) email = email.to_s.strip return nil if email.empty? entry = entries.find { |candidate| candidate.mail == email } (entry || DirectoryEntry.from({ "mail" => email }, base_dn: @base_dn)).to_identity end |
#upsert(attrs) ⇒ Object
40 41 42 43 44 45 46 47 |
# File 'lib/identizer/identity_store/sqlite_store.rb', line 40 def upsert(attrs) entry = DirectoryEntry.from(attrs, base_dn: @base_dn) @db.execute(<<~SQL, [entry.mail, JSON.generate(entry.to_h)]) INSERT INTO entries (mail, data) VALUES (?, ?) ON CONFLICT(mail) DO UPDATE SET data = excluded.data SQL entry end |