public
Description: Ruby on Rails
Homepage: http://rubyonrails.org
Clone URL: git://github.com/rails/rails.git
Search Repo:
Deprecate ivars in view.

Deprecate use of @logger and @action_name instance variables inside
views. Please use instance methods logger and action_name instead.
lifo (author)
Tue May 06 03:35:35 -0700 2008
commit  63edc022f12713b1ac170331a1b619fbcc064d5a
tree    5e00b9960ba048d4864bb795756d62e322702c55
parent  2c96f509a8e630bcd0a79916ae7aadfe919b49a5
...
157
158
159
 
 
160
161
162
...
524
525
526
527
 
528
529
530
 
 
 
 
 
 
 
 
 
531
532
533
...
157
158
159
160
161
162
163
164
...
526
527
528
 
529
530
531
 
532
533
534
535
536
537
538
539
540
541
542
543
0
@@ -157,6 +157,8 @@ module ActionView #:nodoc:
0
     attr_reader :logger, :response, :headers
0
     attr_internal :cookies, :flash, :headers, :params, :request, :response, :session
0
     
0
+ delegate :logger, :action_name, :to => :controller
0
+
0
     attr_writer :template_format
0
 
0
     # Specify trim mode for the ERB compiler. Defaults to '-'.
0
@@ -524,10 +526,18 @@ If you are rendering a subtemplate, you must now use controller-like partial syn
0
       def template_handler_is_compilable?(handler)
0
         handler.new(self).respond_to?(:compile)
0
       end
0
-
0
+
0
       # Assigns instance variables from the controller to the view.
0
       def assign_variables_from_controller
0
- @assigns.each { |key, value| instance_variable_set("@#{key}", value) }
0
+ @assigns.each do |key, value|
0
+ if ['logger'].include?(key)
0
+ instance_variable_set("@#{key}", ActiveSupport::Deprecation::DeprecatedInstanceVariableProxy.new(self, key.to_sym))
0
+ elsif ['action_name'].include?(key)
0
+ instance_variable_set("@#{key}", ActiveSupport::Deprecation::DeprecatedInstanceVariable.new(value, key))
0
+ else
0
+ instance_variable_set("@#{key}", value)
0
+ end
0
+ end
0
       end
0
 
0
 
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
0
@@ -0,0 +1,51 @@
0
+require File.dirname(__FILE__) + '/../abstract_unit'
0
+
0
+class DeprecateIvars < ActionController::Base
0
+ def use_logger
0
+ render :inline => "<%= logger.class -%>"
0
+ end
0
+
0
+ def use_old_logger
0
+ render :inline => "<%= @logger.class -%>"
0
+ end
0
+
0
+ def use_action_name
0
+ render :inline => "<%= action_name -%>"
0
+ end
0
+
0
+ def use_old_action_name
0
+ render :inline => "<%= @action_name -%>"
0
+ end
0
+end
0
+
0
+class DeprecateIvarsTest < Test::Unit::TestCase
0
+ def setup
0
+ @request = ActionController::TestRequest.new
0
+ @response = ActionController::TestResponse.new
0
+
0
+ @controller = DeprecateIvars.new
0
+ @controller.logger = Logger.new(nil)
0
+
0
+ @request.host = "rubyonrails.com"
0
+ end
0
+
0
+ def test_logger
0
+ assert_not_deprecated { get :use_logger }
0
+ assert_equal "Logger", @response.body
0
+ end
0
+
0
+ def test_deprecated_logger
0
+ assert_deprecated { get :use_old_logger }
0
+ assert_equal "Logger", @response.body
0
+ end
0
+
0
+ def test_action_name
0
+ assert_not_deprecated { get :use_action_name }
0
+ assert_equal "use_action_name", @response.body
0
+ end
0
+
0
+ def test_deprecated_action_name
0
+ assert_deprecated { get :use_old_action_name }
0
+ assert_equal "use_old_action_name", @response.body
0
+ end
0
+end
...
1
 
2
3
4
...
175
176
177
 
 
 
 
 
 
 
 
 
 
 
 
 
 
178
179
180
...
1
2
3
4
5
...
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
0
@@ -1,4 +1,5 @@
0
 require 'yaml'
0
+require 'delegate'
0
 
0
 module ActiveSupport
0
   module Deprecation #:nodoc:
0
@@ -175,6 +176,20 @@ module ActiveSupport
0
           ActiveSupport::Deprecation.warn("#{@var} is deprecated! Call #{@method}.#{called} instead of #{@var}.#{called}. Args: #{args.inspect}", callstack)
0
         end
0
     end
0
+
0
+ class DeprecatedInstanceVariable < Delegator
0
+ def initialize(value, method)
0
+ super(value)
0
+ @method = method
0
+ @value = value
0
+ end
0
+
0
+ def __getobj__
0
+ ActiveSupport::Deprecation.warn("Instance variable @#{@method} is deprecated! Call instance method #{@method} instead.")
0
+ @value
0
+ end
0
+ end
0
+
0
   end
0
 end
0
 
...
1
2
3
 
4
5
6
...
148
149
150
 
 
 
 
 
 
 
 
 
 
 
151
...
1
2
3
4
5
6
7
...
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
0
@@ -1,6 +1,7 @@
0
 require File.dirname(__FILE__) + '/abstract_unit'
0
 
0
 class Deprecatee
0
+
0
   def initialize
0
     @request = ActiveSupport::Deprecation::DeprecatedInstanceVariableProxy.new(self, :request)
0
     @_request = 'there we go'
0
@@ -148,4 +149,15 @@ class DeprecationTest < Test::Unit::TestCase
0
     assert_not_deprecated { error.message }
0
     assert_nil @last_message
0
   end
0
+
0
+end
0
+
0
+class DeprecatedIvarTest < Test::Unit::TestCase
0
+
0
+ def test_deprecated_ivar
0
+ @action = ActiveSupport::Deprecation::DeprecatedInstanceVariable.new("fubar", :foobar)
0
+
0
+ assert_deprecated(/Instance variable @foobar is deprecated! Call instance method foobar instead/) { assert_equal "fubar", @action }
0
+ end
0
+
0
 end

Comments

    No one has commented yet.