oop/prepend_features_hook_parens.rb

tests/_examples/oop/prepend_features_hook_parens.rb in the metorex repository.

$events = []

Watcher = Module.new do
  def self.prepend_features(mod)
    $events << [:prepend_features, mod.name]
    super
  end

  def self.prepended(mod)
    $events << [:prepended, mod.name]
  end

  def self.append_features(mod)
    $events << [:append_features, mod.name]
    super
  end

  def self.included(mod)
    $events << [:included, mod.name]
  end

  def greet
    :greeted
  end
end

class Prepender
  prepend(Watcher)
end

class Includer
  include(Watcher)
end

puts($events.inspect)
puts(Prepender.new.greet.inspect)
puts(Includer.new.greet.inspect)
puts(Module.private_instance_methods.include?(:prepend_features).inspect)

Output:

[[:prepend_features, "Prepender"], [:prepended, "Prepender"], [:append_features, "Includer"], [:included, "Includer"]]
:greeted
:greeted
true