Module: Casting

Defined in:
lib/casting.rb,
lib/casting/version.rb

Defined Under Namespace

Modules: Client, MissingMethodClient Classes: Delegation, InvalidAttendant, MissingAttendant, PreparedDelegation

Constant Summary collapse

VERSION =
'0.4.0'

Class Method Summary collapse

Class Method Details

.delegating(assignments) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
# File 'lib/casting.rb', line 5

def self.delegating(assignments)
  assignments.each do |object, mod|
    object.send(:instance_variable_set, :@__previous_delegate__, object.instance_variable_get(:@__current_delegate__))
    object.send(:instance_variable_set, :@__current_delegate__, mod)
  end
  yield
ensure
  assignments.each do |object, mod|
    object.send(:instance_variable_set, :@__current_delegate__, object.instance_variable_get(:@__previous_delegate__))
    object.send(:remove_instance_variable, :@__previous_delegate__)
  end
end