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 i(
  @_action_name @_response_body @_formats @_prefixes
)

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


83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'actionpack/lib/abstract_controller/rendering.rb', line 83

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


99
100
101
# File 'actionpack/lib/abstract_controller/rendering.rb', line 99

def _normalize_options(options)
  options
end

#_normalize_render(*args, &block) ⇒ Object

Normalize args and options. :api: private


122
123
124
125
126
127
128
129
130
# File 'actionpack/lib/abstract_controller/rendering.rb', line 122

def _normalize_render(*args, &block)
  options = _normalize_args(*args, &block)
  #TODO: remove defined? when we restore AP <=> AV dependency
  if defined?(request) && !request.nil? && request.variant.present?
    options[:variant] = request.variant
  end
  _normalize_options(options)
  options
end

#_process_format(format) ⇒ Object

Process the rendered format. :api: private


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

def _process_format(format)
end

#_process_options(options) ⇒ Object

Process extra options. :api: plugin


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

def _process_options(options)
  options
end

#_protected_ivarsObject

:nodoc:


132
133
134
# File 'actionpack/lib/abstract_controller/rendering.rb', line 132

def _protected_ivars # :nodoc:
  DEFAULT_PROTECTED_INSTANCE_VARIABLES
end

#_set_html_content_typeObject

:nodoc:


114
115
# File 'actionpack/lib/abstract_controller/rendering.rb', line 114

def _set_html_content_type # :nodoc:
end

#_set_rendered_content_type(format) ⇒ Object

:nodoc:


117
118
# File 'actionpack/lib/abstract_controller/rendering.rb', line 117

def _set_rendered_content_type(format) # :nodoc:
end

#render(*args, &block) ⇒ Object

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


24
25
26
27
28
29
30
31
32
33
# File 'actionpack/lib/abstract_controller/rendering.rb', line 24

def render(*args, &block)
  options = _normalize_render(*args, &block)
  rendered_body = render_to_body(options)
  if options[:html]
    _set_html_content_type
  else
    _set_rendered_content_type rendered_format
  end
  self.response_body = rendered_body
end

#render_to_body(options = {}) ⇒ Object

Performs the actual template rendering. :api: public


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

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 ActionController 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


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

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


58
59
60
# File 'actionpack/lib/abstract_controller/rendering.rb', line 58

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


69
70
71
72
73
74
75
76
77
# File 'actionpack/lib/abstract_controller/rendering.rb', line 69

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