lib/servel/index.rb in servel-0.20.0 vs lib/servel/index.rb in servel-0.21.0
- old
+ new
@@ -1,21 +1,44 @@
class Servel::Index
extend Servel::Instrumentation
+ RENDER_CACHE = LruRedux::ThreadSafeCache.new(100)
- def initialize(url_root:, url_path:)
+ def initialize(url_root:, url_path:, fs_path:)
@url_root = url_root
@url_path = url_path
+ @fs_path = fs_path
end
def render
- Servel::HamlContext.render('index.haml', locals)
+ RENDER_CACHE.getset(render_cache_key) { Servel::HamlContext.render('index.haml', locals) }
end
+ def render_cache_key
+ @render_cache_key ||= [@fs_path.to_s, @fs_path.mtime.to_i].join("-")
+ end
+
def locals
+ children = @fs_path.children.map { |path| Servel::EntryFactory.for(path) }.compact
+
{
url_root: @url_root,
- url_path: @url_path
+ url_path: @url_path,
+ special_entries: special_entries.to_json,
+ directory_entries: children.select(&:directory?).to_json,
+ file_entries: children.select(&:file?).to_json
}
+ end
+
+ def special_entries
+ list = []
+ list << Servel::EntryFactory.home("/") if @url_root != ""
+
+ unless @url_path == "/"
+ list << Servel::EntryFactory.top(@url_root == "" ? "/" : @url_root)
+ list << Servel::EntryFactory.parent("../")
+ end
+
+ list
end
instrument :render, :locals
end
\ No newline at end of file