Module: AbstractController::Rendering

Extended by:
ActiveSupport::Concern
Includes:
ActionView::ViewPaths
Included in:
ActionMailer::Base
Defined in:
actionpack/lib/abstract_controller/rendering.rb

Constant Summary collapse

DEFAULT_PROTECTED_INSTANCE_VARIABLES =
Set.new %w(
  @_action_name @_response_body @_formats @_prefixes @_config
  @_view_context_class @_view_renderer @_lookup_context
  @_routes @_db_runtime
).map(&:to_sym)

Instance Method Summary collapse

Methods included from ActiveSupport::Concern

append_features, class_methods, extended, included

Methods included from ActionView::ViewPaths

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

Instance Method Details

#_normalize_args(action = nil, options = {}) ⇒ Object

Normalize args by converting render “foo” to render :action => “foo” and render “foo/bar” to render :file => “foo/bar”. :api: plugin


79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'actionpack/lib/abstract_controller/rendering.rb', line 79

def _normalize_args(action=nil, options={})
  if action.respond_to?(:permitted?)
    if action.permitted?
      action
    else
      raise ArgumentError, "render parameters are not permitted"
    end
  elsif action.is_a?(Hash)
    action
  else
    options
  end
end

#_normalize_options(options) ⇒ Object

Normalize options. :api: plugin


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

def _normalize_options(options)
  options
end

#_normalize_render(*args, &block) ⇒ Object

Normalize args and options. :api: private


112
113
114
115
116
117
118
119
120
# File 'actionpack/lib/abstract_controller/rendering.rb', line 112

def _normalize_render(*args, &block)
  options = _normalize_args(*args, &block)  #TODO: remove defined? when we restore AP <=> AV dependency

  if defined?(request) && request && request.variant.present?
    options[:variant] = request.variant
  end
  _normalize_options(options)
  options
end

#_process_format(format, options = {}) ⇒ Object

Process the rendered format. :api: private


107
108
# File 'actionpack/lib/abstract_controller/rendering.rb', line 107

def _process_format(format, options = {})
end

#_process_options(options) ⇒ Object

Process extra options. :api: plugin


101
102
103
# File 'actionpack/lib/abstract_controller/rendering.rb', line 101

def _process_options(options)
  options
end

#_protected_ivarsObject

:nodoc:


122
123
124
# File 'actionpack/lib/abstract_controller/rendering.rb', line 122

def _protected_ivars # :nodoc:
  DEFAULT_PROTECTED_INSTANCE_VARIABLES
end

#render(*args, &block) ⇒ Object

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


23
24
25
26
27
28
# File 'actionpack/lib/abstract_controller/rendering.rb', line 23

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

#render_to_body(options = {}) ⇒ Object

Performs the actual template rendering. :api: public


48
49
# File 'actionpack/lib/abstract_controller/rendering.rb', line 48

def render_to_body(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


41
42
43
44
# File 'actionpack/lib/abstract_controller/rendering.rb', line 41

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

#rendered_formatObject

Returns Content-Type of rendered content :api: public


53
54
55
# File 'actionpack/lib/abstract_controller/rendering.rb', line 53

def rendered_format
  Mime::TEXT
end

#view_assignsObject

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


66
67
68
69
70
71
72
73
74
# File 'actionpack/lib/abstract_controller/rendering.rb', line 66

def view_assigns
  protected_vars = _protected_ivars
  variables      = instance_variables

  variables.reject! { |s| protected_vars.include? s }
  variables.each_with_object({}) { |name, hash|
    hash[name.slice(1, name.length)] = instance_variable_get(name)
  }
end