mirror of
https://github.com/github/rails.git
synced 2026-01-30 08:48:06 -05:00
Document Active Support's Module::delegate. Closes #5002.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4329 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
*SVN*
|
||||
|
||||
* Document Module::delegate. #5002 [pergesu@gmail.com]
|
||||
|
||||
* Replace alias method chaining with Module#alias_method_chain. [Marcel Molina Jr.]
|
||||
|
||||
* Strip out punctuation on predicates or bang methods being aliased with alias_method_chain since target?_without_feature is not a valid method name. Add tests for Module#alias_method_chain. [Marcel Molina Jr.]
|
||||
|
||||
@@ -1,8 +1,33 @@
|
||||
class Module
|
||||
# Provides a delegate class method to easily expose contained objects' methods
|
||||
# as your own. Pass one or more methods (specified as symbols or strings)
|
||||
# and the name of the target object as the final :to option (also a symbol
|
||||
# or string). At least one method and the :to option are required.
|
||||
#
|
||||
# Delegation is particularly useful with Active Record associations:
|
||||
# class Greeter < ActiveRecord::Base
|
||||
# def hello() "hello" end
|
||||
# def goodbye() "goodbye" end
|
||||
# end
|
||||
#
|
||||
# class Foo < ActiveRecord::Base
|
||||
# belongs_to :greeter
|
||||
# delegate :hello, :to => :greeter
|
||||
# end
|
||||
#
|
||||
# Foo.new.hello # => "hello"
|
||||
# Foo.new.goodbye # => NoMethodError: undefined method `goodbye' for #<Foo:0x1af30c>
|
||||
#
|
||||
# With multiple delegates to the same target are allowed:
|
||||
# class Foo < ActiveRecord::Base
|
||||
# delegate :hello, :goodbye, :to => :greeter
|
||||
# end
|
||||
#
|
||||
# Foo.new.goodbye # => "goodbye"
|
||||
def delegate(*methods)
|
||||
options = methods.pop
|
||||
unless options.is_a?(Hash) && to = options[:to]
|
||||
raise ArgumentError, "Delegation needs a target. Supply an options hash with a :to key"
|
||||
raise ArgumentError, "Delegation needs a target. Supply an options hash with a :to key as the last argument (e.g. delegate :hello, :to => :greeter)."
|
||||
end
|
||||
|
||||
methods.each do |method|
|
||||
@@ -13,4 +38,4 @@ class Module
|
||||
EOS
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user