oop/extend_object_hook.rb
tests/_examples/oop/extend_object_hook.rb in the metorex repository.
module Greeting
GREETING = :hello
def greet
"hello test"
end
end
module RecordingExtend
class << self
def extend_object obj
$recorded << :private_hook
end
private :extend_object
end
end
module PublicExtend
def self.extend_object obj
$recorded << :public_hook
end
end
$recorded = []
plain = Object.new
plain.extend Greeting
puts plain.greet
puts plain.singleton_class.const_get(:GREETING).inspect
Object.new.extend RecordingExtend
Object.new.extend PublicExtend
puts $recorded.inspect
skipped = Object.new
skipped.extend RecordingExtend
puts skipped.respond_to?(:greet).inspect
frozen = Object.new.freeze
begin
Greeting.send :extend_object, frozen
rescue RuntimeError => error
puts error.class
end
puts frozen.is_a?(Greeting).inspect
Output:
hello test
:hello
[:private_hook, :public_hook]
false
FrozenError
false