module Project
Nested
Definitions
SITE_ROOT = File.expand_path("../..", __dir__)
The root directory of the web application files.
PAGES_ROOT = File.expand_path("pages", SITE_ROOT)
The root directory for the utopia middleware.
PUBLIC_ROOT = File.expand_path("public", SITE_ROOT)
The root directory for static assets.
def self.call(builder, root = Dir.pwd, locales: nil)
Appends a project application to the rack builder.
Signature
-
parameter
builder
Rack::Builder
-
parameter
root
String
The file-system root path of the project/gem.
-
parameter
locales
Array(String)
an array of locales to support, e.g.
['en', 'ja']
.
Implementation
def self.call(builder, root = Dir.pwd, locales: nil)
if UTOPIA.production?
# Handle exceptions in production with a error page and send an email notification:
builder.use Utopia::Exceptions::Handler
builder.use Utopia::Exceptions::Mailer
else
# We want to propate exceptions up when running tests:
builder.use Rack::ShowExceptions unless UTOPIA.testing?
end
# We serve static files from the project root:
builder.use Utopia::Static, root: root
builder.use Utopia::Static, root: PUBLIC_ROOT
builder.use Utopia::Redirection::Rewrite, {
'/' => '/index'
}
builder.use Utopia::Redirection::DirectoryIndex
builder.use Utopia::Redirection::Errors, {
404 => '/errors/file-not-found'
}
if locales
builder.use Utopia::Localization,
default_locale: locales.first,
locales: locales
end
builder.use Utopia::Controller, root: PAGES_ROOT
cache_root = File.expand_path("_gallery", root)
builder.use Utopia::Content, root: PAGES_ROOT, namespaces: {
# 'gallery' => Utopia::Gallery::Tags.new
}
builder.run lambda { |env| [404, {}, []] }
end