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

Class Method Summary collapse

Class Method Details

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

Appends a project application to the rack builder.

Parameters:

  • builder (Rack::Builder)
  • root (String) (defaults to: Dir.pwd)

    The file-system root path of the project/gem.

  • locales (Array(String)) (defaults to: nil)

    an array of locales to support, e.g. ‘[’en’, ‘ja’]‘.



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