Module: YARD::Server::StaticCaching
| Relationships & Source Files | |
| Extension / Inclusion / Inheritance Descendants | |
|
Included In:
| |
| Defined in: | lib/yard/server/static_caching.rb |
Overview
Implements static caching for requests.
Instance Method Summary
-
#cache(data) ⇒ void
Caches rendered HTML response data to disk.
-
#check_static_cache ⇒ Array(Numeric,Hash,Array)?
Called by a router to return the cached object.
- #cache_path(request_path) private
Instance Method Details
#cache(data) ⇒ void
This method returns an undefined value.
Caches rendered HTML response data to disk.
# File 'lib/yard/server/static_caching.rb', line 52
def cache(data) return unless adapter.document_root path = cache_path(request.path_info) return unless path FileUtils.mkdir_p(File.dirname(path)) log.debug "Caching data to #{path}" File.open(path, 'wb') {|f| f.write(data) } end
#cache_path(request_path) (private)
# File 'lib/yard/server/static_caching.rb', line 65
def cache_path(request_path) return nil if request_path.split(/[\/\\]/).include?('..') path = request_path.sub(/\.html$/, '') + '.html' path = path.sub(%r{\A/+}, '') return nil if path =~ /\A[A-Za-z]:/ path = File.cleanpath(path) File.join(adapter.document_root, path) end
#check_static_cache ⇒ Array(Numeric,Hash,Array)?
Called by a router to return the cached object. By default, this
method performs disk-based caching. To perform other forms of caching,
implement your own #check_static_cache method and mix the module into
the Router class.
This method checks for the existence of cached data. To actually cache a response, see #cache.
# File 'lib/yard/server/static_caching.rb', line 35
def check_static_cache return nil unless adapter.document_root cache_path = cache_path(request.path) return nil unless cache_path if File.file?(cache_path) log.debug "Loading cache from disk: #{cache_path}" return [200, {'Content-Type' => 'text/html'}, [File.read_binary(cache_path)]] end nil end