Bug #13776 » refinement.patch
| test/ruby/test_refinement.rb (working copy) | ||
|---|---|---|
|
end
|
||
|
end
|
||
|
class ParentDefiningPrivateMethod
|
||
|
private
|
||
|
def some_inherited_method
|
||
|
end
|
||
|
end
|
||
|
module MixinDefiningPrivateMethod
|
||
|
private
|
||
|
def some_included_method
|
||
|
end
|
||
|
end
|
||
|
class SomeChildClassToRefine < ParentDefiningPrivateMethod
|
||
|
include MixinDefiningPrivateMethod
|
||
|
private
|
||
|
def some_method
|
||
|
end
|
||
|
end
|
||
|
def test_refine_inherited_method_with_visibility_changes
|
||
|
Module.new do
|
||
|
refine(SomeChildClassToRefine) do
|
||
|
def some_inherited_method; end
|
||
|
def some_included_method; end
|
||
|
def some_method; end
|
||
|
end
|
||
|
end
|
||
|
obj = SomeChildClassToRefine.new
|
||
|
assert_raise_with_message(NoMethodError, /private/) do
|
||
|
obj.some_inherited_method
|
||
|
end
|
||
|
assert_raise_with_message(NoMethodError, /private/) do
|
||
|
obj.some_included_method
|
||
|
end
|
||
|
assert_raise_with_message(NoMethodError, /private/) do
|
||
|
obj.some_method
|
||
|
end
|
||
|
end
|
||
|
private
|
||
|
def eval_using(mod, s)
|
||
| vm_insnhelper.c (working copy) | ||
|---|---|---|
|
return vm_call_method(th, cfp, calling, ci, cc);
|
||
|
}
|
||
|
else {
|
||
|
return vm_call_zsuper(th, cfp, calling, ci, cc, cc->me->owner);
|
||
|
VALUE klass = RCLASS_SUPER(cc->me->owner);
|
||
|
cc->me = klass ? rb_callable_method_entry(klass, ci->mid) : NULL;
|
||
|
return vm_call_method(th, cfp, calling, ci, cc);
|
||
|
}
|
||
|
}
|
||
|
}
|
||