Module: Roda::RodaPlugins::MultiPublic
- Defined in:
- lib/roda/plugins/multi_public.rb
Overview
The multi_public plugin adds an r.multi_public
method that accepts an argument specifying a directory from which to serve static files. It is similar to the public plugin, but allows for multiple separate directories.
Here’s an example of using the multi_public plugin to serve 3 different types of files from 3 different directories:
plugin :multi_public,
img: 'static/images',
font: 'assets/fonts',
form: 'static/forms/pdfs'
route do
r.on "images" do
r.multi_public(:img)
end
r.on "fonts" do
r.multi_public(:font)
end
r.on "forms" do
r.multi_public(:form)
end
end
It is possible to simplify the routing tree for this using string keys and an array matcher:
plugin :multi_public,
'images' => 'static/images',
'fonts' => 'assets/fonts',
'forms' => 'static/forms/pdfs'
route do
r.on %w"images fonts forms" do |dir|
r.multi_public(dir)
end
end
You can provide custom headers and default mime type for each directory using an array of three elements as the value, with the first element being the path, the second being the custom headers, and the third being the default mime type:
plugin :multi_public,
'images' => ['static/images', {'Cache-Control'=>'max-age=86400'}, nil],
'fonts' => ['assets/fonts', {'Cache-Control'=>'max-age=31536000'}, 'font/ttf'],
'forms' => ['static/forms/pdfs', nil, 'application/pdf']
route do
r.on %w"images fonts forms" do |dir|
r.multi_public(dir)
end
end
Defined Under Namespace
Modules: RequestMethods
Constant Summary collapse
- RACK_FILES =
defined?(Rack::Files) ? Rack::Files : Rack::File
Class Method Summary collapse
-
.configure(app, directories, _ = OPTS) ⇒ Object
Use the given directories to setup servers.
- .load_dependencies(app, _, opts = OPTS) ⇒ Object
Class Method Details
.configure(app, directories, _ = OPTS) ⇒ Object
Use the given directories to setup servers. Any opts are passed to the public plugin.
74 75 76 77 78 79 80 81 |
# File 'lib/roda/plugins/multi_public.rb', line 74 def self.configure(app, directories, _=OPTS) roots = app.opts[:multi_public_servers] = (app.opts[:multi_public_servers] || {}).dup directories.each do |key, path| path, headers, mime = path roots[key] = RACK_FILES.new(app.(path), headers||{}, mime||'text/plain') end roots.freeze end |
.load_dependencies(app, _, opts = OPTS) ⇒ Object
69 70 71 |
# File 'lib/roda/plugins/multi_public.rb', line 69 def self.load_dependencies(app, _, opts=OPTS) app.plugin(:public, opts) end |