From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-2.8 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00 shortcircuit=no autolearn=unavailable version=3.3.2 X-Original-To: yahns-public@yhbt.net Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 166122030F; Sun, 14 Feb 2016 22:02:12 +0000 (UTC) Date: Sun, 14 Feb 2016 22:02:12 +0000 From: Eric Wong To: yahns-public@yhbt.net Subject: [PATCH] extras/autoindex: support hiding dotfiles Message-ID: <20160214220212.GA24974@dcvr.yhbt.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline List-Id: Switch option initialization to using a keyword hash since yet-another boolean is too much. Using kwargs won't work under Ruby 1.9.3 which we still support (for now). Note: being a part of extras/, there's no API stability guarantees but this should've maintained it. --- extras/autoindex.rb | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/extras/autoindex.rb b/extras/autoindex.rb index e84aa7b..4deb3ef 100644 --- a/extras/autoindex.rb +++ b/extras/autoindex.rb @@ -14,13 +14,29 @@ class Autoindex FN = %{%s} TFMT = "%Y-%m-%d %H:%M" - def initialize(app, index = %w(index.html), skip_gzip_static = true) + def initialize(app, *args) app.respond_to?(:root) or raise ArgumentError, - "wrapped app #{app.inspect} does not respond to :root" + "wrapped app #{app.inspect} does not respond to #root" @app = app @root = app.root - @index = index - @skip_gz = skip_gzip_static + + @index = case args[0] + when Array then args.shift + when String then Array(args.shift) + else + %w(index.html) + end + + @skip_gzip_static = @skip_dotfiles = nil + case args[0] + when Hash + @skip_gzip_static = args[0][:skip_gzip_static] + @skip_dotfiles = args[0][:skip_dotfiles] + when true, false + @skip_gzip_static = args.shift + end + @skip_gzip_static = true if @skip_gzip_static.nil? + @skip_dotfiles = false if @skip_dotfiles.nil? end def redirect_slash(env) @@ -69,13 +85,15 @@ def call(env) # generate the index, show directories first dirs = [] files = [] - ngz_idx = {} if @skip_gz # used to avoid redundant stat() + ngz_idx = {} if @skip_gzip_static # used to avoid redundant stat() dir.each do |base| case base when "." next when ".." next if path_info == "/" + when /\A\./ + next if @skip_dotfiles end begin -- EW