Sha256: 3b4477edb1806d069c108c27baea0592e3c2318e75aa937af175e6e273809b66

Contents?: true

Size: 1.71 KB

Versions: 47

Compression:

Stored size: 1.71 KB

Contents

# Controller

A simple recursive controller layer which works in isolation from the view rendering middleware.

```ruby
use Utopia::Controller,
	# The root directory where `controller.rb` files can be found.
	root: 'path/to/root',
	# The base class to use for all controllers:
	base: Utopia::Controller::Base,
	# Whether or not to cache controller classes:
	cache_controllers: (RACK_ENV == :production)
```

A controller is a file within the root directory (or subdirectory) with the name `controller.rb`. This code is dynamically loaded into an anonymous class and executed. The default controller has only a single function:

```ruby
def passthrough(request, path)
	# Call one of:
	
	# This will cause the middleware to generate a response.
	# def respond!(response)

	# This will cause the controller to skip the request.
	# def ignore!

	# Request relative redirect. Respond with a redirect to the given target.
	# def redirect! (target, status = 302)
	
	# Controller relative redirect.
	# def goto!(target, status = 302)
	
	# Respond with an error which indiciates some kind of failure.
	# def fail!(error = 400, message = nil)
	
	# Succeed the request and immediately respond.
	# def succeed!(status: 200, headers: {}, **options)
	# options may include content: string or body: Enumerable (as per Rack specifications
end
```

The controller layer can do more complex operations by prepending modules into it.

```ruby
prepend Rewrite, Actions

# Extracts an Integer
rewrite.extract_prefix id: Integer do
	@user = User.find_by_id(@id)
end

on 'edit' do |request, path|
	if request.post?
		@user.update_attributes(request[:user])
	end
end

otherwise do |request, path|
	# Executed if no specific named actions were executed.
	succeed!
end
```

Version data entries

47 entries across 47 versions & 1 rubygems

Version Path
utopia-2.15.1 wiki/pages/middleware/controller/index.md
utopia-2.15.0 wiki/pages/middleware/controller/index.md
utopia-2.14.0 wiki/pages/middleware/controller/index.md
utopia-2.13.4 documentation/pages/wiki/middleware/controller/content.md
utopia-2.13.3 documentation/pages/wiki/middleware/controller/content.md
utopia-2.13.2 documentation/pages/wiki/middleware/controller/content.md
utopia-2.13.1 documentation/pages/wiki/middleware/controller/content.md
utopia-2.13.0 documentation/pages/wiki/middleware/controller/content.md
utopia-2.12.4 documentation/pages/wiki/middleware/controller/content.md
utopia-2.12.3 documentation/pages/wiki/middleware/controller/content.md
utopia-2.12.2 documentation/pages/wiki/middleware/controller/content.md
utopia-2.12.1 documentation/pages/wiki/middleware/controller/content.md
utopia-2.12.0 documentation/pages/wiki/middleware/controller/content.md
utopia-2.11.1 documentation/pages/wiki/middleware/controller/content.md
utopia-2.11.0 documentation/pages/wiki/middleware/controller/content.md
utopia-2.10.0 documentation/pages/wiki/middleware/controller/content.md
utopia-2.9.5 documentation/pages/wiki/middleware/controller/content.md
utopia-2.9.3 documentation/pages/wiki/middleware/controller/content.md
utopia-2.9.2 documentation/pages/wiki/middleware/controller/content.md
utopia-2.9.1 documentation/pages/wiki/middleware/controller/content.md