Module: Roda::RodaPlugins::Public
- Defined in:
- lib/roda/plugins/public.rb
Overview
The public plugin adds a r.public
routing method to serve static files from a directory.
The public plugin recognizes the application’s :root option, and defaults to using the public
subfolder of the application’s :root
option. If the application’s :root option is not set, it defaults to the public
folder in the working directory. Additionally, if a relative path is provided as the :root
option to the plugin, it will be considered relative to the application’s :root
option.
Examples:
# Use public folder as location of files
plugin :public
# Use /path/to/app/static as location of files
opts[:root] = '/path/to/app'
plugin :public, root: 'static'
# Assuming public is the location of files
r.route do
# Make GET /images/foo.png look for public/images/foo.png
r.public
# Make GET /static/images/foo.png look for public/images/foo.png
r.on(:static) do
r.public
end
end
Defined Under Namespace
Modules: RequestMethods
Constant Summary collapse
- SPLIT =
Regexp.union(*[File::SEPARATOR, File::ALT_SEPARATOR].compact)
- PARSER =
URI::DEFAULT_PARSER
- RACK_FILES =
defined?(Rack::Files) ? Rack::Files : Rack::File
Class Method Summary collapse
-
.configure(app, opts = {}) ⇒ Object
Use options given to setup a Rack::File instance for serving files.
Class Method Details
.configure(app, opts = {}) ⇒ Object
Use options given to setup a Rack::File instance for serving files. Options:
- :default_mime
-
The default mime type to use if the mime type is not recognized.
- :gzip
-
Whether to serve already gzipped files with a .gz extension for clients supporting gzipped transfer encoding.
- :brotli
-
Whether to serve already brotli-compressed files with a .br extension for clients supporting brotli transfer encoding.
- :headers
-
A hash of headers to use for statically served files
- :root
-
Use this option for the root of the public directory (default: “public”)
56 57 58 59 60 61 62 63 64 65 |
# File 'lib/roda/plugins/public.rb', line 56 def self.configure(app, opts={}) if opts[:root] app.opts[:public_root] = app.(opts[:root]) elsif !app.opts[:public_root] app.opts[:public_root] = app.("public") end app.opts[:public_server] = RACK_FILES.new(app.opts[:public_root], opts[:headers]||{}, opts[:default_mime] || 'text/plain') app.opts[:public_gzip] = opts[:gzip] app.opts[:public_brotli] = opts[:brotli] end |