Class: GraphQL::Language::Cache

Inherits:
Object
  • Object
show all
Defined in:
lib/graphql/language/cache.rb

Constant Summary collapse

DIGEST =
Digest::SHA256.new << GraphQL::VERSION

Instance Method Summary collapse

Constructor Details

#initialize(path) ⇒ Cache

Returns a new instance of Cache.


9
10
11
# File 'lib/graphql/language/cache.rb', line 9

def initialize(path)
  @path = path
end

Instance Method Details

#fetch(filename) ⇒ Object


14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/graphql/language/cache.rb', line 14

def fetch(filename)
  hash = DIGEST.dup << filename
  begin
    hash << File.mtime(filename).to_i.to_s
  rescue SystemCallError
    return yield
  end
  cache_path = @path.join(hash.to_s)

  if cache_path.exist?
    Marshal.load(cache_path.read)
  else
    payload = yield
    tmp_path = "#{cache_path}.#{rand}"

    @path.mkpath
    File.binwrite(tmp_path, Marshal.dump(payload))
    File.rename(tmp_path, cache_path.to_s)
    payload
  end
end