• E
    Use class_eval or instance_eval when triggering lazy load hooks: · 6cf7a0b0
    Edouard CHIN 提交于
    - When lazy load hooks were triggered we were using
      `Object.instance_eval` which evaluates the block in the context of
      the class being passed. Most of the time that class was a
      `Class`. If one wants to define a instance method on the class then
      it wasn't possible.
    
      ```ruby
        class A; end;
        A.instance_eval do
          def foo
            puts 'bar'
          end
        end
        A.new.foo #> NoMethodError: undefined method `foo`
        A.foo #> bar
      ```
    - This PR checks what object is passed when triggering the hooks and
      either call `class_eval` or `instance_eval`. My rational and assumptions being
      that if an instance of a class is passed, then the blocks needs to
      evaluate in the context of that instance (i.e. defining a method
      should only define it on that instance).
      On the other hand, if a Class or Module is passed when triggering
      hooks, then defining a method should define it on the class itself
    - #32776 Pushed me to introduce this change
    6cf7a0b0
lazy_load_hooks.rb 2.5 KB