Class: AttrVault::Keyring

Inherits:
Object
  • Object
show all
Defined in:
lib/attr_vault/keyring.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeKeyring

Returns a new instance of Keyring.



49
50
51
# File 'lib/attr_vault/keyring.rb', line 49

def initialize
  @keys = []
end

Instance Attribute Details

#keysObject (readonly)

Returns the value of attribute keys.



29
30
31
# File 'lib/attr_vault/keyring.rb', line 29

def keys
  @keys
end

Class Method Details

.load(keyring_data) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# 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

Instance Method Details

#add_key(k) ⇒ Object



53
54
55
# File 'lib/attr_vault/keyring.rb', line 53

def add_key(k)
  @keys << k
end

#current_keyObject



74
75
76
77
78
79
80
# 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) ⇒ Object



82
83
84
# File 'lib/attr_vault/keyring.rb', line 82

def digests(data)
  keys.map { |k| k.digest(data) }
end

#drop_key(id_or_key) ⇒ Object



57
58
59
60
61
62
63
64
# 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) ⇒ Object



66
67
68
# 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) ⇒ Boolean

Returns:

  • (Boolean)


70
71
72
# File 'lib/attr_vault/keyring.rb', line 70

def has_key?(id)
  !@keys.find { |k| k.id == id }.nil?
end

#to_jsonObject



86
87
88
89
90
# 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