Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Changeset 5091

Show
Ignore:
Timestamp:
09/12/06 07:10:43 (2 years ago)
Author:
bitsweat
Message:

alias_method_chain works with accessor= methods also. Closes #6153.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/activesupport/CHANGELOG

    r5053 r5091  
    11*SVN* 
     2 
     3* alias_method_chain works with accessor= methods also.  #6153 [Caio Chassot] 
    24 
    35* Fix loadable_constants_for_path to handle load paths that do not end with a slash. [Nicholas Seckar] 
  • trunk/activesupport/lib/active_support/core_ext/module/aliasing.rb

    r4653 r5091  
    2424    # Strip out punctuation on predicates or bang methods since 
    2525    # e.g. target?_without_feature is not a valid method name. 
    26     aliased_target, punctuation = target.to_s.sub(/([?!])$/, ''), $1 
     26    aliased_target, punctuation = target.to_s.sub(/([?!=])$/, ''), $1 
    2727    alias_method "#{aliased_target}_without_#{feature}#{punctuation}", target 
    2828    alias_method target, "#{aliased_target}_with_#{feature}#{punctuation}" 
  • trunk/activesupport/test/core_ext/module_test.rb

    r4920 r5091  
    109109 
    110110  def quux_with_baz! 
    111     quux_without_baz! << '_with_baz!
     111    quux_without_baz! << '_with_baz
    112112  end 
    113113 
    114114  def quux_with_baz? 
    115115    false 
     116  end 
     117 
     118  def quux_with_baz=(v) 
     119    send(:quux_without_baz=, v) << '_with_baz' 
    116120  end 
    117121end 
     
    155159    assert @instance.respond_to?(:quux_with_baz!) 
    156160 
    157     assert_equal 'quux_with_baz!', @instance.quux! 
     161    assert_equal 'quux_with_baz', @instance.quux! 
    158162    assert_equal 'quux', @instance.quux_without_baz! 
    159163  end 
    160164 
    161165  def test_alias_method_chain_with_same_names_between_predicates_and_bang_methods 
    162     FooClassWithBarMethod.send(:define_method, 'quux!', Proc.new { 'quux' }) 
     166    FooClassWithBarMethod.send(:define_method, 'quux!', Proc.new { 'quux!' }) 
    163167    FooClassWithBarMethod.send(:define_method, 'quux?', Proc.new { true }) 
     168    FooClassWithBarMethod.send(:define_method, 'quux=', Proc.new { 'quux=' }) 
    164169    assert !@instance.respond_to?(:quux_with_baz!) 
    165170    assert !@instance.respond_to?(:quux_with_baz?) 
    166  
    167     FooClassWithBarMethod.send(:include, BarMethodAliaser) 
    168     FooClassWithBarMethod.alias_method_chain :quux!, :baz 
    169     FooClassWithBarMethod.alias_method_chain :quux?, :baz 
    170  
     171    assert !@instance.respond_to?(:quux_with_baz=) 
     172 
     173    FooClassWithBarMethod.send(:include, BarMethodAliaser) 
    171174    assert @instance.respond_to?(:quux_with_baz!) 
    172175    assert @instance.respond_to?(:quux_with_baz?) 
    173     assert_equal 'quux_with_baz!', @instance.quux! 
    174     assert_equal 'quux', @instance.quux_without_baz! 
     176    assert @instance.respond_to?(:quux_with_baz=) 
     177 
     178 
     179    FooClassWithBarMethod.alias_method_chain :quux!, :baz 
     180    assert_equal 'quux!_with_baz', @instance.quux! 
     181    assert_equal 'quux!', @instance.quux_without_baz! 
     182 
     183    FooClassWithBarMethod.alias_method_chain :quux?, :baz 
    175184    assert_equal false, @instance.quux? 
    176185    assert_equal true,  @instance.quux_without_baz? 
     186 
     187    FooClassWithBarMethod.alias_method_chain :quux=, :baz 
     188    assert_equal 'quux=_with_baz', @instance.send(:quux=, 1234) 
     189    assert_equal 'quux=', @instance.send(:quux_without_baz=, 1234) 
    177190  end 
    178191 
     
    184197    FooClassWithBarMethod.alias_method_chain :quux, :baz! 
    185198    assert_nothing_raised do 
    186       assert_equal 'quux_with_baz!', @instance.quux_with_baz! 
     199      assert_equal 'quux_with_baz', @instance.quux_with_baz! 
    187200    end 
    188201