class SSLTool::CertificateStore::SequelAdapter
Public Class Methods
new(database_url)
click to toggle source
# File lib/ssltool/adapters/sequel.rb, line 8 def initialize(database_url) @database = Sequel.connect(database_url) init_certificates_table @certificates = @database[:certificates] end
Public Instance Methods
load_pool(pool_name)
click to toggle source
# 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)
click to toggle source
# File lib/ssltool/adapters/sequel.rb, line 18 def store_pool(pool_name, certs) @database.transaction retry_on:Sequel::DatabaseDisconnectError, num_retries:3 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
Private Instance Methods
init_certificates_table()
click to toggle source
# File lib/ssltool/adapters/sequel.rb, line 32 def init_certificates_table return if @database.table_exists? :certificates @database.create_table :certificates do column :pool, :varchar, null:false column :pem, :text, null:false column :fingerprint, :char, null:false, size:40 index :fingerprint index [:pool, :fingerprint], unique:true end end