Wynn Netherland changelog.com/posts

All your Base are belong to us

“The universal base class you always wanted”, from Gary Bernhardt.

From the lib:

def self.call_method(object, name, args, block)
  name_string = name.to_s

  all_modules.each do |mod|
    if mod.respond_to?(name)
      return mod.send name, *args, &block
    elsif mod.instance_methods.include?(name_string)
      return call_instance_method(mod, name, args, block)
    end
  end

  # 1. The world is all that is the case.
  # 2. We failed to find a method to call.
  #   2.1. So we need to call method_missing.
  #     2.1.1. We can't just super it because we're not in method_missing.
  #       2.1.1.1. We're not in method_missing because there are two of them
  #                (self and instance) that need to share this code.
  #       2.1.1.2. We need to call the method that would be called if we said
  #                "super" in the object's method_missing.
  #         2.1.1.2.1. Which is its class's superclass's method_missing method
  #                    object.
  Object.instance_method(:method_missing).bind(object).call(name, *args, &block)
end

Discussion

Sign in or Join to comment or subscribe

Player art
  0:00 / 0:00