Changeset 6441
- Timestamp:
- 03/18/07 03:16:53 (1 year ago)
- Files:
-
- trunk/activesupport/CHANGELOG (modified) (1 diff)
- trunk/activesupport/lib/active_support/core_ext/module/aliasing.rb (modified) (1 diff)
- trunk/activesupport/test/core_ext/module_test.rb (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/activesupport/CHANGELOG
r6427 r6441 1 1 *SVN* 2 3 * alias_method_chain preserves the original method's visibility. #7854 [Jonathan Viney] 2 4 3 5 * Update Dependencies to ignore constants inherited from ancestors. Closes #6951. [Nicholas Seckar] trunk/activesupport/lib/active_support/core_ext/module/aliasing.rb
r5113 r6441 26 26 aliased_target, punctuation = target.to_s.sub(/([?!=])$/, ''), $1 27 27 yield(aliased_target, punctuation) if block_given? 28 alias_method "#{aliased_target}_without_#{feature}#{punctuation}", target 29 alias_method target, "#{aliased_target}_with_#{feature}#{punctuation}" 28 29 with_method, without_method = "#{aliased_target}_with_#{feature}#{punctuation}", "#{aliased_target}_without_#{feature}#{punctuation}" 30 31 alias_method without_method, target 32 alias_method target, with_method 33 34 case 35 when public_method_defined?(without_method) 36 public target 37 when protected_method_defined?(without_method) 38 protected target 39 when private_method_defined?(without_method) 40 private target 41 end 30 42 end 31 43 trunk/activesupport/test/core_ext/module_test.rb
r6426 r6441 129 129 def quux_with_baz=(v) 130 130 send(:quux_without_baz=, v) << '_with_baz' 131 end 132 133 def duck_with_orange 134 duck_without_orange << '_with_orange' 131 135 end 132 136 end … … 227 231 assert block_called 228 232 end 229 end 233 234 def test_alias_method_chain_preserves_private_method_status 235 FooClassWithBarMethod.send(:define_method, 'duck', Proc.new { 'duck' }) 236 FooClassWithBarMethod.send(:include, BarMethodAliaser) 237 FooClassWithBarMethod.send(:private, :duck) 238 239 FooClassWithBarMethod.alias_method_chain :duck, :orange 240 241 assert_raises NoMethodError do 242 @instance.duck 243 end 244 245 assert_equal 'duck_with_orange', @instance.send(:duck) 246 assert FooClassWithBarMethod.private_method_defined?(:duck) 247 end 248 249 def test_alias_method_chain_preserves_protected_method_status 250 FooClassWithBarMethod.send(:define_method, 'duck', Proc.new { 'duck' }) 251 FooClassWithBarMethod.send(:include, BarMethodAliaser) 252 FooClassWithBarMethod.send(:protected, :duck) 253 254 FooClassWithBarMethod.alias_method_chain :duck, :orange 255 256 assert_raises NoMethodError do 257 @instance.duck 258 end 259 260 assert_equal 'duck_with_orange', @instance.send(:duck) 261 assert FooClassWithBarMethod.protected_method_defined?(:duck) 262 end 263 264 def test_alias_method_chain_preserves_public_method_status 265 FooClassWithBarMethod.send(:define_method, 'duck', Proc.new { 'duck' }) 266 FooClassWithBarMethod.send(:include, BarMethodAliaser) 267 FooClassWithBarMethod.send(:public, :duck) 268 269 FooClassWithBarMethod.alias_method_chain :duck, :orange 270 271 assert_equal 'duck_with_orange', @instance.duck 272 assert FooClassWithBarMethod.public_method_defined?(:duck) 273 end 274 end