class A def say puts "A" end end module B def self.role(klass, &block) ref = refine(klass) { } ref.module_eval(&block) end role A do def say puts "B" end end end class C using B def say A.new.say end end A.new.say # => A C.new.say # => B