Sha256: b89323cf564a3d036a56e22b75e3843d0c905e9652e16ff30f5077862c746767
Contents?: true
Size: 1.85 KB
Versions: 4
Compression:
Stored size: 1.85 KB
Contents
class Roda module RodaPlugins # The not_found plugin adds a +not_found+ class method which sets # a block that is called whenever a 404 response with an empty body # would be returned. The usual use case for this is the desire for # nice error pages if the page is not found. # # You can provide the block with the plugin call: # # plugin :not_found do # "Where did it go?" # end # # Or later via a separate call to +not_found+: # # plugin :not_found # # not_found do # "Where did it go?" # end # # Before not_found is called, any existing headers on the response # will be cleared. So if you want to be sure the headers are set # even in a not_found block, you need to reset them in the # not_found block. module NotFound # If a block is given, install the block as the not_found handler. def self.configure(app, &block) if block app.not_found(&block) end end module ClassMethods # Install the given block as the not_found handler. def not_found(&block) define_method(:not_found, &block) private :not_found end end module InstanceMethods # If routing returns a 404 response with an empty body, call # the not_found handler. def call result = super if result[0] == 404 && (v = result[2]).is_a?(Array) && v.empty? @_response.headers.clear super{not_found} else result end end private # Use an empty not_found_handler by default, so that loading # the plugin without defining a not_found handler doesn't # break things. def not_found end end end register_plugin(:not_found, NotFound) end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
roda-2.3.0 | lib/roda/plugins/not_found.rb |
roda-2.2.0 | lib/roda/plugins/not_found.rb |
roda-2.1.0 | lib/roda/plugins/not_found.rb |
roda-2.0.0 | lib/roda/plugins/not_found.rb |