Class: GraphQL::Language::Cache
- Inherits:
-
Object
- Object
- GraphQL::Language::Cache
- Defined in:
- lib/graphql/language/cache.rb
Overview
This cache is used by Parser.parse_file when it’s enabled.
With Rails, parser caching may enabled by setting config.graphql.parser_cache = true
in your Rails application.
The cache may be manually built by assigning GraphQL::Language::Parser.cache = GraphQL::Language::Cache.new("some_dir")
.
This will create a directory (tmp/cache/graphql
by default) that stores a cache of parsed files.
Much like bootsnap, the parser cache needs to be cleaned up manually. You will need to clear the cache directory for each new deployment of your application. Also note that the parser cache will grow as your schema is loaded, so the cache directory must be writable.
Constant Summary collapse
Instance Method Summary collapse
-
#fetch(filename) ⇒ Object
-
#initialize(path) ⇒ Cache
constructor
A new instance of Cache.
Constructor Details
#initialize(path) ⇒ Cache
Returns a new instance of Cache.
21 22 23 |
# File 'lib/graphql/language/cache.rb', line 21 def initialize(path) @path = path end |
Instance Method Details
#fetch(filename) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/graphql/language/cache.rb', line 27 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 |