Module: Utopia::Project

Defined in:
lib/utopia/project.rb,
lib/utopia/project/base.rb,
lib/utopia/project/guide.rb,
lib/utopia/project/version.rb

Defined Under Namespace

Classes: Base, Guide

Constant Summary collapse

SITE_ROOT =

The root directory of the web application files.

File.expand_path("../..", __dir__)
PAGES_ROOT =

The root directory for the utopia middleware.

File.expand_path("pages", SITE_ROOT)
PUBLIC_ROOT =

The root directory for static assets.

File.expand_path("public", SITE_ROOT)
VERSION =
"0.5.1"

Class Method Summary collapse

Class Method Details

.call(builder, root = Dir.pwd, locales: nil) ⇒ Object

Appends a project application to the rack builder.

~~~ ruby # In your ‘config.ru` file:

require ‘utopia/setup’ UTOPIA ||= Utopia.setup

require ‘utopia/project’ Utopia::Project.call(self) ~~~



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/utopia/project.rb', line 55

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