Add Refinement#target and deprecate Refinement#refined_class

[Feature #19714]
This commit is contained in:
Shugo Maeda 2023-07-14 15:13:14 +09:00 committed by Shugo Maeda
parent cfd7729ce7
commit a542512b7c
Notes: git 2023-07-31 08:23:37 +00:00
3 changed files with 25 additions and 4 deletions

View File

@ -56,6 +56,11 @@ Note: We're only listing outstanding class updates.
for long running applications. The actual optimizations performed are entirely for long running applications. The actual optimizations performed are entirely
implementation specific and may change in the future without notice. [[Feature #18885] implementation specific and may change in the future without notice. [[Feature #18885]
* Refinement
* Add Refinement#target as an alternative of Refinement#refined_class.
Refinement#refined_class is deprecated and will be removed in Ruby 3.4. [[Feature #19714]]
## Stdlib updates ## Stdlib updates
The following default gems are updated. The following default gems are updated.

20
eval.c
View File

@ -1346,9 +1346,9 @@ rb_using_module(const rb_cref_t *cref, VALUE module)
/* /*
* call-seq: * call-seq:
* refined_class -> class * target -> class
* *
* Return the class refined by the receiver. * Return the class or module refined by the receiver.
*/ */
VALUE VALUE
rb_refinement_module_get_refined_class(VALUE module) rb_refinement_module_get_refined_class(VALUE module)
@ -1359,6 +1359,19 @@ rb_refinement_module_get_refined_class(VALUE module)
return rb_attr_get(module, id_refined_class); return rb_attr_get(module, id_refined_class);
} }
/*
* call-seq:
* refined_class -> class
*
* Return the class refined by the receiver.
*/
static VALUE
rb_refinement_refined_class(VALUE module)
{
rb_warn_deprecated_to_remove("3.4", "Refinement#refined_class", "Refinement#target");
return rb_refinement_module_get_refined_class(module);
}
static void static void
add_activated_refinement(VALUE activated_refinements, add_activated_refinement(VALUE activated_refinements,
VALUE klass, VALUE refinement) VALUE klass, VALUE refinement)
@ -2067,7 +2080,8 @@ Init_eval(void)
rb_mod_s_used_refinements, 0); rb_mod_s_used_refinements, 0);
rb_undef_method(rb_cClass, "refine"); rb_undef_method(rb_cClass, "refine");
rb_define_private_method(rb_cRefinement, "import_methods", refinement_import_methods, -1); rb_define_private_method(rb_cRefinement, "import_methods", refinement_import_methods, -1);
rb_define_method(rb_cRefinement, "refined_class", rb_refinement_module_get_refined_class, 0); rb_define_method(rb_cRefinement, "target", rb_refinement_module_get_refined_class, 0);
rb_define_method(rb_cRefinement, "refined_class", rb_refinement_refined_class, 0);
rb_undef_method(rb_cRefinement, "append_features"); rb_undef_method(rb_cRefinement, "append_features");
rb_undef_method(rb_cRefinement, "prepend_features"); rb_undef_method(rb_cRefinement, "prepend_features");
rb_undef_method(rb_cRefinement, "extend_object"); rb_undef_method(rb_cRefinement, "extend_object");

View File

@ -1798,7 +1798,7 @@ class TestRefinement < Test::Unit::TestCase
assert_equal([int_refinement, str_refinement], m.refinements) assert_equal([int_refinement, str_refinement], m.refinements)
end end
def test_refined_class def test_target
refinements = Module.new { refinements = Module.new {
refine Integer do refine Integer do
end end
@ -1806,7 +1806,9 @@ class TestRefinement < Test::Unit::TestCase
refine String do refine String do
end end
}.refinements }.refinements
assert_equal(Integer, refinements[0].target)
assert_equal(Integer, refinements[0].refined_class) assert_equal(Integer, refinements[0].refined_class)
assert_equal(String, refinements[1].target)
assert_equal(String, refinements[1].refined_class) assert_equal(String, refinements[1].refined_class)
end end