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.8.3"

Class Method Summary collapse

Class Method Details

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

Appends a project application to the rack builder.



47
48
49
50
51
52
53
54
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
# File 'lib/utopia/project.rb', line 47

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