oop/module_using.rb

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

Target = Class.new do
  def describe
    "plain"
  end
end

Adjustment = Module.new do
  refine Target do
    def describe
      "refined"
    end
  end
end

returned = nil
host = Module.new do
  returned = using Adjustment
end
puts (returned == host).inspect

Module.new do
  def self.defined_before object
    object.describe
  end

  using Adjustment

  puts defined_before(Target.new).inspect

  def self.defined_after object
    object.describe
  end

  puts defined_after(Target.new).inspect
  puts Target.new.describe.inspect
end

puts Target.new.describe.inspect

Output:

true
"plain"
"refined"
"refined"
"plain"