Module: Treequel::Delegation
- Included in:
- Branch, BranchCollection, Directory, Model::ObjectClass
- Defined in:
- lib/treequel/mixins.rb
Overview
A collection of various delegation code-generators that can be used to define delegation through other methods, to instance variables, etc.
Class Method Summary collapse
-
.def_ivar_delegators(ivar, *delegated_methods) ⇒ Object
Define the given
delegated_methodsas delegators to the like-named method of the specifiedivar. -
.def_method_delegators(delegate_method, *delegated_methods) ⇒ Object
Define the given
delegated_methodsas delegators to the like-named method of the return value of thedelegate_method.
Class Method Details
.def_ivar_delegators(ivar, *delegated_methods) ⇒ Object
Define the given delegated_methods as delegators to the like-named method of the specified ivar. This is pretty much identical with how ‘Forwardable’ from the stdlib does delegation, but it’s reimplemented here for consistency.
class MyClass
extend Treequel::Delegation
# Delegate the #each method to the @collection ivar
def_ivar_delegators :@collection, :each
end
58 59 60 61 62 63 |
# File 'lib/treequel/mixins.rb', line 58 def def_ivar_delegators( ivar, *delegated_methods ) delegated_methods.each do |name| body = make_ivar_delegator( ivar, name ) define_method( name, &body ) end end |
.def_method_delegators(delegate_method, *delegated_methods) ⇒ Object
Define the given delegated_methods as delegators to the like-named method of the return value of the delegate_method.
class MyClass
extend Treequel::Delegation
# Delegate the #bound?, #err, and #result2error methods to the connection
# object returned by the #connection method. This allows the connection
# to still be loaded on demand/overridden/etc.
def_method_delegators :connection, :bound?, :err, :result2error
def connection
@connection ||= self.connect
end
end
38 39 40 41 42 43 |
# File 'lib/treequel/mixins.rb', line 38 def def_method_delegators( delegate_method, *delegated_methods ) delegated_methods.each do |name| body = make_method_delegator( delegate_method, name ) define_method( name, &body ) end end |