Class: SSLTool::CertificateStore::SequelAdapter

Inherits:
Adapter
  • Object
show all
Defined in:
lib/ssltool/adapters/sequel.rb

Instance Method Summary collapse

Constructor Details

#initialize(database_url) ⇒ SequelAdapter

Returns a new instance of SequelAdapter.



8
9
10
11
12
# File 'lib/ssltool/adapters/sequel.rb', line 8

def initialize(database_url)
  @database = Sequel.connect(database_url)
  init_certificates_table
  @certificates = @database[:certificates]
end

Instance Method Details

#load_pool(pool_name) ⇒ Object



14
15
16
# File 'lib/ssltool/adapters/sequel.rb', line 14

def load_pool(pool_name)
  @certificates.filter(pool:pool_name.to_s).map(:pem).map { |pem| Certificate.new pem }.to_set
end

#store_pool(pool_name, certs) ⇒ Object



18
19
20
21
22
23
24
25
26
27
# File 'lib/ssltool/adapters/sequel.rb', line 18

def store_pool(pool_name, certs)
  @database.transaction do
    current_set     = load_pool(pool_name)
    replacement_set = certs.to_set
    delete_set      = (current_set - replacement_set).map { |cert| { fingerprint:cert.fingerprint, pool:pool_name.to_s } }
    insert_set      = (replacement_set - current_set).map { |cert| { fingerprint:cert.fingerprint, pool:pool_name.to_s, pem:cert.to_pem } }
    delete_set.each { |params| @certificates.where(params).delete }
    @certificates.multi_insert(insert_set)
  end
end