Sha256: 7fc302dc96438b43caa7904c247df5ca90190d0ac0b5160cd5845f50bbbba923

Contents?: true

Size: 1.51 KB

Versions: 31

Compression:

Stored size: 1.51 KB

Contents

# frozen-string-literal: true

#
class Roda
  module RodaPlugins
    # The run_append_slash plugin makes +r.run+ use +/+ as the +PATH_INFO+
    # when calling the rack application if +PATH_INFO+ would be empty.
    # Example:
    #
    #   route do |r|
    #     r.on "a" do
    #       r.run App
    #     end
    #   end
    #
    #   # without run_append_slash: 
    #   # GET /a => App gets "" as PATH_INFO
    #   # GET /a/ => App gets "/" as PATH_INFO
    #
    #   # with run_append_slash: 
    #   # GET /a => App gets "/" as PATH_INFO
    #   # GET /a/ => App gets "/" as PATH_INFO
    module RunAppendSlash
      # Set plugin specific options.  Options:
      # :use_redirects :: Whether to issue 302 redirects when appending the
      #                   trailing slash.
      def self.configure(app, opts=OPTS)
        app.opts[:run_append_slash_redirect] = !!opts[:use_redirects]
      end

      module RequestMethods
        # Calls the given rack app. If the path matches the root of the app but
        # does not contain a trailing slash, a trailing slash is appended to the
        # path internally, or a redirect is issued when configured with
        # <tt>use_redirects: true</tt>.
        def run(app)
          if remaining_path.empty?
            if scope.opts[:run_append_slash_redirect]
              redirect("#{path}/")
            else
              @remaining_path += '/'
            end
          end
          super
        end
      end
    end

    register_plugin(:run_append_slash, RunAppendSlash)
  end
end

Version data entries

31 entries across 31 versions & 1 rubygems

Version Path
roda-3.29.0 lib/roda/plugins/run_append_slash.rb
roda-3.28.0 lib/roda/plugins/run_append_slash.rb
roda-3.27.0 lib/roda/plugins/run_append_slash.rb
roda-3.26.0 lib/roda/plugins/run_append_slash.rb
roda-3.25.0 lib/roda/plugins/run_append_slash.rb
roda-3.24.0 lib/roda/plugins/run_append_slash.rb
roda-3.23.0 lib/roda/plugins/run_append_slash.rb
roda-3.22.0 lib/roda/plugins/run_append_slash.rb
roda-3.21.0 lib/roda/plugins/run_append_slash.rb
roda-3.20.0 lib/roda/plugins/run_append_slash.rb
roda-3.19.0 lib/roda/plugins/run_append_slash.rb
roda-3.18.0 lib/roda/plugins/run_append_slash.rb
roda-3.17.0 lib/roda/plugins/run_append_slash.rb
roda-3.16.0 lib/roda/plugins/run_append_slash.rb
roda-3.15.0 lib/roda/plugins/run_append_slash.rb
roda-3.14.1 lib/roda/plugins/run_append_slash.rb
roda-3.14.0 lib/roda/plugins/run_append_slash.rb
roda-3.13.0 lib/roda/plugins/run_append_slash.rb
roda-3.12.0 lib/roda/plugins/run_append_slash.rb
roda-3.11.0 lib/roda/plugins/run_append_slash.rb