2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# File 'lib/binder/binder.rb', line 2
def bind(method_name, closure)
raise ArgumentError, "You may only pass symbols to #bind" unless closure.kind_of?(Symbol)
if closure == :self
self.class_eval do
eval(
"
def #{method_name}(&block)
if block
block.bind_to(self).call
end
end
"
)
end
else
self.class_eval do
eval(
"
def #{method_name}(&block)
if block
# if we're suposed to bind an object returned by a method
if self.respond_to?(:#{closure})
block.bind_to(self.#{closure}).call
# if self has an instance variable
elsif @#{closure}
block.bind_to(@#{closure}).call
else
raise StandardError, \"Trying to bind to an unknown method or variable: #{closure}\"
end
end
end
"
)
end
end
end
|