Module: AbstractController::Rendering

Extended by:
ActiveSupport::Concern
Includes:
ViewPaths
Included in:
Layouts, ActionController::Rendering, ActionController::Streaming
Defined in:
lib/abstract_controller/rendering.rb

Defined Under Namespace

Modules: ClassMethods

Constant Summary collapse

DEFAULT_PROTECTED_INSTANCE_VARIABLES =
[
  :@_action_name, :@_response_body, :@_formats, :@_prefixes, :@_config,
  :@_view_context_class, :@_view_renderer, :@_lookup_context
]

Instance Method Summary collapse

Methods included from ViewPaths

#_prefixes, #append_view_path, #details_for_lookup, #lookup_context, #prepend_view_path

Instance Method Details

#_render_template(options) ⇒ Object

Find and renders a template based on the options given. :api: private



125
126
127
128
# File 'lib/abstract_controller/rendering.rb', line 125

def _render_template(options) #:nodoc:
  lookup_context.rendered_format = nil if options[:formats]
  view_renderer.render(view_context, options)
end

#processObject

Overwrite process to setup I18n proxy.



42
43
44
45
46
47
# File 'lib/abstract_controller/rendering.rb', line 42

def process(*) #:nodoc:
  old_config, I18n.config = I18n.config, I18nProxy.new(I18n.config, lookup_context)
  super
ensure
  I18n.config = old_config
end

#render(*args, &block) ⇒ Object

Normalize arguments, options and then delegates render_to_body and sticks the result in self.response_body.



95
96
97
98
# File 'lib/abstract_controller/rendering.rb', line 95

def render(*args, &block)
  options = _normalize_render(*args, &block)
  self.response_body = render_to_body(options)
end

#render_to_body(options = {}) ⇒ Object

Raw rendering of a template. :api: plugin



118
119
120
121
# File 'lib/abstract_controller/rendering.rb', line 118

def render_to_body(options = {})
  _process_options(options)
  _render_template(options)
end

#render_to_string(*args, &block) ⇒ Object

Raw rendering of a template to a string.

It is similar to render, except that it does not set the response_body and it should be guaranteed to always return a string.

If a component extends the semantics of response_body (as Action Controller extends it to be anything that responds to the method each), this method needs to be overridden in order to still return a string. :api: plugin



111
112
113
114
# File 'lib/abstract_controller/rendering.rb', line 111

def render_to_string(*args, &block)
  options = _normalize_render(*args, &block)
  render_to_body(options)
end

#view_assignsObject

This method should return a hash with assigns. You can overwrite this configuration per controller. :api: public



138
139
140
141
142
143
144
145
# File 'lib/abstract_controller/rendering.rb', line 138

def view_assigns
  hash = {}
  variables  = instance_variables
  variables -= protected_instance_variables
  variables -= DEFAULT_PROTECTED_INSTANCE_VARIABLES
  variables.each { |name| hash[name[1..-1]] = instance_variable_get(name) }
  hash
end

#view_contextObject

An instance of a view class. The default view class is ActionView::Base

The view class must have the following methods: View.new[lookup_context, assigns, controller]

Create a new ActionView instance for a controller

View#render

Returns String with the rendered template

Override this method in a module to change the default behavior.



84
85
86
# File 'lib/abstract_controller/rendering.rb', line 84

def view_context
  view_context_class.new(view_renderer, view_assigns, self)
end

#view_context_classObject



71
72
73
# File 'lib/abstract_controller/rendering.rb', line 71

def view_context_class
  @_view_context_class ||= self.class.view_context_class
end

#view_rendererObject

Returns an object that is able to render templates.



89
90
91
# File 'lib/abstract_controller/rendering.rb', line 89

def view_renderer
  @_view_renderer ||= ActionView::Renderer.new(lookup_context)
end