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