Skip to content

Instantly share code, notes, and snippets.

Created December 13, 2012 05:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save anonymous/4274181 to your computer and use it in GitHub Desktop.
Save anonymous/4274181 to your computer and use it in GitHub Desktop.
Using outer self within the instance_eval
class Controller
attr_reader :tag
def initialize
@tag = "Controller"
@window = Window.new(self)
@window.show
hello
hello_again
end
end
class Window
attr_reader :tag
def initialize(controller)
@controller = controller
end
def show
@tag = "World"
@controller.instance_eval do
def hello
puts "Hello #{tag}!" # => Hello Controller!
end
end
# Find controller's instance variable that is current self.
window = @controller.instance_variables.find { |var| @controller.instance_variable_get(var) == self }
# Now we can use the outer self within the instance_eval.
@controller.instance_eval(%Q/
def hello_again
tag = #{window}.tag
puts "Hello #{tag}!" # => Hello World!
end
/)
end
end
Controller.new
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment