ActionController::Renderer
ActionController::Renderer allows to render arbitrary templates without requirement of being in controller actions.
You get a concrete renderer class by invoking ActionController::Base#renderer. For example,
ApplicationController.renderer
It allows you to call method #render directly.
ApplicationController.renderer.render template: '...'
You can use this shortcut in a controller, instead of the previous example:
ApplicationController.render template: '...'
#render allows you to use the same options that you can use when rendering in a controller. For example,
FooController.render :action, locals: { ... }, assigns: { ... }
The template will be rendered in a Rack environment which is accessible through ActionController::Renderer#env. You can set it up in two ways:
-
by changing renderer defaults, like
ApplicationController.renderer.defaults # => hash with default Rack environment
-
by initializing an instance of renderer by passing it a custom environment.
ApplicationController.renderer.new(method: 'post', https: true)
Constants
DEFAULTS = {\nhttp_host: 'example.org',\nhttps: false,\nmethod: 'get',\nscript_name: '',\ninput: ''\n}.freeze
IDENTITY = ->(_) { _ }
RACK_KEY_TRANSLATION = {\nhttp_host: 'HTTP_HOST',\nhttps: 'HTTPS',\nmethod: 'REQUEST_METHOD',\nscript_name: 'SCRIPT_NAME',\ninput: 'rack.input'\n}
RACK_VALUE_TRANSLATION = {\nhttps: ->(v) { v ? 'on' : 'off' },\nmethod: ->(v) { v.upcase },\n}
Attributes
| [R] | controller |
| [R] | defaults |
Files
- actionpack/lib/action_controller/renderer.rb