main
1module TFA
2 class Storage
3 include Enumerable
4 attr_reader :path
5
6 def initialize(path)
7 @path = path
8 @storage =
9 if ".pstore" == File.extname(path)
10 PStore.new(path)
11 else
12 YAML::Store.new(path)
13 end
14 end
15
16 def each
17 all.each do |each|
18 yield each
19 end
20 end
21
22 def all
23 open_readonly do |storage|
24 storage.roots.map { |key| { key => storage[key] } }
25 end
26 end
27
28 def secret_for(key)
29 open_readonly do |storage|
30 storage[key]
31 end
32 end
33
34 def save(key, value)
35 @storage.transaction do
36 @storage[key] = value
37 end
38 end
39
40 def delete(key)
41 @storage.transaction do
42 @storage.delete(key)
43 end
44 end
45
46 private
47
48 def open_readonly
49 @storage.transaction(true) do
50 yield @storage
51 end
52 end
53 end
54end