Class: Identizer::IdentityStore::ConfigStore
- Inherits:
-
Object
- Object
- Identizer::IdentityStore::ConfigStore
- Defined in:
- lib/identizer/identity_store.rb
Overview
Default store: an LDAP-flavoured directory persisted to a JSON file the web admin writes, seeded from in-code DirectoryEntry seeds until the file fills.
Instance Method Summary collapse
- #delete(email) ⇒ Object
- #emails ⇒ Object
- #entries ⇒ Object
- #identity_for(email) ⇒ Object
-
#initialize(path:, seed: [], base_dn: DirectoryEntry::DEFAULT_BASE_DN) ⇒ ConfigStore
constructor
A new instance of ConfigStore.
-
#upsert(attrs) ⇒ Object
Create or replace a directory entry, keyed by mail.
Constructor Details
#initialize(path:, seed: [], base_dn: DirectoryEntry::DEFAULT_BASE_DN) ⇒ ConfigStore
Returns a new instance of ConfigStore.
18 19 20 21 22 |
# File 'lib/identizer/identity_store.rb', line 18 def initialize(path:, seed: [], base_dn: DirectoryEntry::DEFAULT_BASE_DN) @path = path @base_dn = base_dn @seed = Array(seed).map { |entry| DirectoryEntry.from(entry, base_dn: base_dn) } end |
Instance Method Details
#delete(email) ⇒ Object
51 52 53 54 |
# File 'lib/identizer/identity_store.rb', line 51 def delete(email) email = email.to_s.strip write(current_hashes.reject { |hash| hash["mail"] == email }) end |
#emails ⇒ Object
31 32 33 |
# File 'lib/identizer/identity_store.rb', line 31 def emails entries.map(&:mail) end |
#entries ⇒ Object
24 25 26 27 28 29 |
# File 'lib/identizer/identity_store.rb', line 24 def entries hashes = read return @seed if hashes.nil? # no usable file yet -> fall back to the seed hashes.map { |entry| DirectoryEntry.from(entry, base_dn: @base_dn) } end |
#identity_for(email) ⇒ Object
35 36 37 38 39 40 41 |
# File 'lib/identizer/identity_store.rb', line 35 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
Create or replace a directory entry, keyed by mail.
44 45 46 47 48 49 |
# File 'lib/identizer/identity_store.rb', line 44 def upsert(attrs) entry = DirectoryEntry.from(attrs, base_dn: @base_dn) remaining = current_hashes.reject { |hash| hash["mail"] == entry.mail } write(remaining + [entry.to_h]) entry end |