Module: Opal::Cache
- Defined in:
- opal/lib/opal/cache.rb,
opal/lib/opal/cache/file_cache.rb
Defined Under Namespace
Classes: FileCache, NullCache
Class Method Summary
collapse
Class Method Details
.digest(string) ⇒ Object
67
68
69
|
# File 'opal/lib/opal/cache.rb', line 67
def digest(string)
::Digest::SHA256.hexdigest(string)[-32..-1].to_i(16).to_s(36)
end
|
.fetch(cache, key, &block) ⇒ Object
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
# File 'opal/lib/opal/cache.rb', line 33
def fetch(cache, key, &block)
return cache.fetch(key, &block) if cache.respond_to? :fetch
key = digest(key.join('/')) + '-' + runtime_key
data = cache.get(key)
data || begin
compiler = yield
cache.set(key, compiler) unless compiler.dynamic_cache_result
compiler
end
end
|
.runtime_key ⇒ Object
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
# File 'opal/lib/opal/cache.rb', line 49
def runtime_key
@runtime_key ||= begin
opal_path = File.expand_path('..', Opal.gem_dir)
files = Dir["#{opal_path}/{Gemfile*,*.gemspec,lib/**/*}"]
files += $LOADED_FEATURES.grep(%r{lib/(parser|ast)})
digest [
files.sort.map { |f| "#{f}:#{File.size(f)}:#{File.mtime(f).to_f}" },
RUBY_VERSION,
RUBY_PATCHLEVEL
].join('/')
end
end
|