Skip to content

Instantly share code, notes, and snippets.

Created December 13, 2012 05:07
Show Gist options
  • Select an option

  • Save anonymous/4274181 to your computer and use it in GitHub Desktop.

Select an option

Save anonymous/4274181 to your computer and use it in GitHub Desktop.

Revisions

  1. @invalid-email-address Anonymous created this gist Dec 13, 2012.
    42 changes: 42 additions & 0 deletions instance_eval_example.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,42 @@
    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