1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
module Minitest::Thesis
  class DirectoryDb
    def initialize(dir)
      @dir = dir
      Dir.mkdir(@dir)
    rescue SystemCallError => e
      raise unless e.errno == Errno::EEXIST::Errno
    end

    def [](key)
      f = file(key)
      return nil unless File.exist?(f)

      File.read(f)
    end

    def []=(key, value)
      File.write(file(key), value)
    end

    private

    def file(key)
      File.join(@dir, Digest::SHA1.hexdigest(key)[0...10])
    end
  end
end