class AttrVault::Keyring

Attributes

keys[R]

Public Class Methods

load(keyring_data) click to toggle source
# File lib/attr_vault/keyring.rb, line 31
def self.load(keyring_data)
  keyring = Keyring.new
  begin
    candidate_keys = JSON.parse(keyring_data, symbolize_names: true)

    if candidate_keys.is_a?(Hash)
      candidate_keys.each do |key_id, key|
        keyring.add_key(Key.new(key_id.to_s, key))
      end
    else
      raise InvalidKeyring, "Invalid JSON structure"
    end
  rescue StandardError => e
    raise InvalidKeyring, e.message
  end
  keyring
end
new() click to toggle source
# File lib/attr_vault/keyring.rb, line 49
def initialize
  @keys = []
end

Public Instance Methods

add_key(k) click to toggle source
# File lib/attr_vault/keyring.rb, line 53
def add_key(k)
  @keys << k
end
current_key() click to toggle source
# File lib/attr_vault/keyring.rb, line 74
def current_key
  k = @keys.sort_by(&:id).last
  if k.nil?
    raise KeyringEmpty, "No keys in keyring"
  end
  k
end
digests(data) click to toggle source
# File lib/attr_vault/keyring.rb, line 82
def digests(data)
  keys.map { |k| k.digest(data) }
end
drop_key(id_or_key) click to toggle source
# File lib/attr_vault/keyring.rb, line 57
def drop_key(id_or_key)
  id = if id_or_key.is_a? Key
         id_or_key.id
       else
         id_or_key
       end
  @keys.reject! { |k| k.id == id }
end
fetch(id) click to toggle source
# File lib/attr_vault/keyring.rb, line 66
def fetch(id)
  @keys.find { |k| k.id == id } or raise UnknownKey, id
end
has_key?(id) click to toggle source
# File lib/attr_vault/keyring.rb, line 70
def has_key?(id)
  !@keys.find { |k| k.id == id }.nil?
end
to_json() click to toggle source
# File lib/attr_vault/keyring.rb, line 86
def to_json
  @keys.each_with_object({}) do |k,obj|
    obj[k.id] = k.value
  end.to_json
end