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