提交 dc0411fa 编写于 作者: J Jeremy Kemper

Check for uninitialized instance variables

上级 8b4461c1
...@@ -453,7 +453,7 @@ def view_paths=(value) ...@@ -453,7 +453,7 @@ def view_paths=(value)
# ArticleController.prepend_view_path(["views/default", "views/custom"]) # ArticleController.prepend_view_path(["views/default", "views/custom"])
# #
def prepend_view_path(path) def prepend_view_path(path)
@view_paths = superclass.view_paths.dup if @view_paths.nil? @view_paths = superclass.view_paths.dup if !defined?(@view_paths) || @view_paths.nil?
@view_paths.unshift(*path) @view_paths.unshift(*path)
end end
......
...@@ -278,9 +278,9 @@ def render(options = {}, local_assigns = {}, &block) #:nodoc: ...@@ -278,9 +278,9 @@ def render(options = {}, local_assigns = {}, &block) #:nodoc:
# the same name but differing formats. See +Request#template_format+ # the same name but differing formats. See +Request#template_format+
# for more details. # for more details.
def template_format def template_format
return @template_format if @template_format if defined? @template_format
@template_format
if controller && controller.respond_to?(:request) elsif controller && controller.respond_to?(:request)
@template_format = controller.request.template_format @template_format = controller.request.template_format
else else
@template_format = :html @template_format = :html
...@@ -366,7 +366,9 @@ def _render_with_layout(options, local_assigns, &block) #:nodoc: ...@@ -366,7 +366,9 @@ def _render_with_layout(options, local_assigns, &block) #:nodoc:
end end
else else
begin begin
original_content_for_layout, @content_for_layout = @content_for_layout, render(options) original_content_for_layout = @content_for_layout if defined?(@content_for_layout)
@content_for_layout = render(options)
if (options[:inline] || options[:file] || options[:text]) if (options[:inline] || options[:file] || options[:text])
@cached_content_for_layout = @content_for_layout @cached_content_for_layout = @content_for_layout
render(:file => partial_layout, :locals => local_assigns) render(:file => partial_layout, :locals => local_assigns)
......
module ActionView module ActionView
module Renderable # NOTE: The template that this mixin is being included into is frozen
# NOTE: The template that this mixin is beening include into is frozen # so you cannot set or modify any instance variables
# So you can not set or modify any instance variables module Renderable #:nodoc:
extend ActiveSupport::Memoizable extend ActiveSupport::Memoizable
def self.included(base) def self.included(base)
...@@ -33,10 +32,11 @@ def render(view, local_assigns = {}) ...@@ -33,10 +32,11 @@ def render(view, local_assigns = {})
view.send(:_set_controller_content_type, mime_type) if respond_to?(:mime_type) view.send(:_set_controller_content_type, mime_type) if respond_to?(:mime_type)
view.send(method_name(local_assigns), local_assigns) do |*names| view.send(method_name(local_assigns), local_assigns) do |*names|
if proc = view.instance_variable_get("@_proc_for_layout") ivar = :@_proc_for_layout
if view.instance_variable_defined?(ivar) and proc = view.instance_variable_get(ivar)
view.capture(*names, &proc) view.capture(*names, &proc)
else elsif view.instance_variable_defined?(ivar = :"@content_for_#{names.first || :layout}")
view.instance_variable_get("@content_for_#{names.first || 'layout'}") view.instance_variable_get(ivar)
end end
end end
end end
......
module ActionView module ActionView
module RenderablePartial # NOTE: The template that this mixin is being included into is frozen
# NOTE: The template that this mixin is beening include into is frozen # so you cannot set or modify any instance variables
# So you can not set or modify any instance variables module RenderablePartial #:nodoc:
extend ActiveSupport::Memoizable extend ActiveSupport::Memoizable
def variable_name def variable_name
...@@ -30,10 +29,13 @@ def render_partial(view, object = nil, local_assigns = {}, as = nil) ...@@ -30,10 +29,13 @@ def render_partial(view, object = nil, local_assigns = {}, as = nil)
local_assigns[variable_name] local_assigns[variable_name]
if view.respond_to?(:controller) if view.respond_to?(:controller)
object ||= ActiveSupport::Deprecation::DeprecatedObjectProxy.new( ivar = :"@#{variable_name}"
view.controller.instance_variable_get("@#{variable_name}"), object ||=
"@#{variable_name} will no longer be implicitly assigned to #{variable_name}" if view.controller.instance_variable_defined?(ivar)
) ActiveSupport::Deprecation::DeprecatedObjectProxy.new(
view.controller.instance_variable_get(ivar),
"#{ivar} will no longer be implicitly assigned to #{variable_name}")
end
end end
# Ensure correct object is reassigned to other accessors # Ensure correct object is reassigned to other accessors
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册