aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoshua Peek <josh@joshpeek.com>2008-08-28 10:37:46 -0500
committerJoshua Peek <josh@joshpeek.com>2008-08-28 10:37:46 -0500
commitacbf2b74aa3001fb6064bba96cd0033495774357 (patch)
tree54bd7e783a063ddf359721eefd2a5566d12a9a0f
parent8b6870cfae8d50a2ffd4f024d33d51aadaa6a6f7 (diff)
downloadrails-acbf2b74aa3001fb6064bba96cd0033495774357.tar.gz
rails-acbf2b74aa3001fb6064bba96cd0033495774357.tar.bz2
rails-acbf2b74aa3001fb6064bba96cd0033495774357.zip
Deprecated implicit local assignments when rendering partials
-rw-r--r--actionpack/CHANGELOG2
-rw-r--r--actionpack/lib/action_view/renderable_partial.rb10
-rw-r--r--actionpack/test/controller/new_render_test.rb6
-rw-r--r--activesupport/lib/active_support/deprecation.rb16
4 files changed, 30 insertions, 4 deletions
diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG
index f6942b43f1..6717162d1e 100644
--- a/actionpack/CHANGELOG
+++ b/actionpack/CHANGELOG
@@ -1,5 +1,7 @@
*Edge*
+* Deprecated implicit local assignments when rendering partials [Josh Peek]
+
* Introduce current_cycle helper method to return the current value without bumping the cycle. #417 [Ken Collins]
* Allow polymorphic_url helper to take url options. #880 [Tarmo Tänav]
diff --git a/actionpack/lib/action_view/renderable_partial.rb b/actionpack/lib/action_view/renderable_partial.rb
index 5203e57ead..123a9aebbc 100644
--- a/actionpack/lib/action_view/renderable_partial.rb
+++ b/actionpack/lib/action_view/renderable_partial.rb
@@ -27,8 +27,14 @@ module ActionView
def render_partial(view, object = nil, local_assigns = {}, as = nil)
object ||= local_assigns[:object] ||
- local_assigns[variable_name] ||
- view.controller.instance_variable_get("@#{variable_name}") if view.respond_to?(:controller)
+ local_assigns[variable_name]
+
+ if view.respond_to?(:controller)
+ object ||= ActiveSupport::Deprecation::DeprecatedObjectProxy.new(
+ view.controller.instance_variable_get("@#{variable_name}"),
+ "@#{variable_name} will no longer be implicitly assigned to #{variable_name}"
+ )
+ end
# Ensure correct object is reassigned to other accessors
local_assigns[:object] = local_assigns[variable_name] = object
diff --git a/actionpack/test/controller/new_render_test.rb b/actionpack/test/controller/new_render_test.rb
index 82919b7777..698c46f78c 100644
--- a/actionpack/test/controller/new_render_test.rb
+++ b/actionpack/test/controller/new_render_test.rb
@@ -832,8 +832,10 @@ EOS
end
def test_partial_with_implicit_local_assignment
- get :partial_with_implicit_local_assignment
- assert_equal "Hello: Marcel", @response.body
+ assert_deprecated do
+ get :partial_with_implicit_local_assignment
+ assert_equal "Hello: Marcel", @response.body
+ end
end
def test_render_missing_partial_template
diff --git a/activesupport/lib/active_support/deprecation.rb b/activesupport/lib/active_support/deprecation.rb
index 01eb5df593..e543163bd5 100644
--- a/activesupport/lib/active_support/deprecation.rb
+++ b/activesupport/lib/active_support/deprecation.rb
@@ -162,6 +162,22 @@ module ActiveSupport
end
end
+ class DeprecatedObjectProxy < DeprecationProxy
+ def initialize(object, message)
+ @object = object
+ @message = message
+ end
+
+ private
+ def target
+ @object
+ end
+
+ def warn(callstack, called, args)
+ ActiveSupport::Deprecation.warn(@message, callstack)
+ end
+ end
+
# Stand-in for <tt>@request</tt>, <tt>@attributes</tt>, <tt>@params</tt>, etc.
# which emits deprecation warnings on any method call (except +inspect+).
class DeprecatedInstanceVariableProxy < DeprecationProxy #:nodoc: