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

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