Module: Jade::ModuleLoader::Cache
Constant Summary collapse
- MAGIC =
'jade-cache-v2'
Instance Method Summary collapse
- #clean(cache_dir) ⇒ Object
- #compiler_fingerprint ⇒ Object
- #compute_key(entry, dep_digests) ⇒ Object
- #read(cache_dir, module_name, key) ⇒ Object
- #write(cache_dir, module_name, entry, key, interface_digest) ⇒ Object
Instance Method Details
#clean(cache_dir) ⇒ Object
30 31 32 |
# File 'lib/jade/module_loader/cache.rb', line 30 def clean(cache_dir) FileUtils.rm_rf(cache_dir) end |
#compiler_fingerprint ⇒ Object
41 42 43 44 45 46 47 |
# File 'lib/jade/module_loader/cache.rb', line 41 def compiler_fingerprint @compiler_fingerprint ||= Dir[File.('../**/*.rb', __dir__)] .sort .map { Digest::SHA256.file(it).hexdigest } .then { Digest::SHA256.hexdigest(it.join) } end |
#compute_key(entry, dep_digests) ⇒ Object
34 35 36 37 38 39 |
# File 'lib/jade/module_loader/cache.rb', line 34 def compute_key(entry, dep_digests) Digest::SHA256.hexdigest( [compiler_fingerprint, entry.source.text, dep_digests.sort.inspect] .join("\n") ) end |
#read(cache_dir, module_name, key) ⇒ Object
11 12 13 14 15 16 17 18 19 |
# File 'lib/jade/module_loader/cache.rb', line 11 def read(cache_dir, module_name, key) path = path_for(cache_dir, module_name) return nil unless File.exist?(path) Marshal.load(File.binread(path)) => [MAGIC, ^key, interface_digest, entry] [entry, interface_digest] rescue StandardError, NoMatchingPatternError nil end |
#write(cache_dir, module_name, entry, key, interface_digest) ⇒ Object
21 22 23 24 25 26 27 28 |
# File 'lib/jade/module_loader/cache.rb', line 21 def write(cache_dir, module_name, entry, key, interface_digest) path = path_for(cache_dir, module_name) FileUtils.mkdir_p(File.dirname(path)) tmp = "#{path}.#{Process.pid}.tmp" File.binwrite(tmp, Marshal.dump([MAGIC, key, interface_digest, entry])) File.rename(tmp, path) end |