Module: Strelka::Delegation
- Included in:
- AuthProvider, Session::Default
- Defined in:
- lib/strelka/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_class_delegators(*delegated_methods) ⇒ Object
Define the given
delegated_methodsas delegators to the like-named class method. -
.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_class_delegators(*delegated_methods) ⇒ Object
Define the given delegated_methods as delegators to the like-named class
method.
118 119 120 121 122 123 124 |
# File 'lib/strelka/mixins.rb', line 118 def def_class_delegators( *delegated_methods ) delegated_methods.each do |name| define_method( name ) do |*args| self.class.__send__( name, *args ) end end end |
.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 Strelka::Delegation
# Delegate the #each method to the @collection ivar
def_ivar_delegators :@collection, :each
end
108 109 110 111 112 113 |
# File 'lib/strelka/mixins.rb', line 108 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 Strelka::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
88 89 90 91 92 93 |
# File 'lib/strelka/mixins.rb', line 88 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 |