require 'director_nested' NoProtectedError = Kernel.const_defined?("NoMethodError") ? NoMethodError : NameError class A < Director_nested::FooBar_int protected def do_step "A::do_step;" end def get_value "A::get_value" end end a = A.new begin a.do_advance rescue NoProtectedError end raise RuntimeError if a.step != "Bar::step;Foo::advance;Bar::do_advance;A::do_step;" class B < Director_nested::FooBar_int protected def do_advance "B::do_advance;" + do_step end def do_step "B::do_step;" end def get_value "B::get_value" end end b = B.new raise RuntimeError if b.step != "Bar::step;Foo::advance;B::do_advance;B::do_step;"