1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Remove Refinement#{extend_object,append_features,prepend_features}

Also make include, prepend, and extend raise a TypeError if one
of the modules is a refinement.

Implements [Feature #18270]
This commit is contained in:
Jeremy Evans 2021-12-27 11:38:12 -08:00
parent f22296d27e
commit 791343b5bb
Notes: git 2022-01-06 03:59:29 +09:00
5 changed files with 83 additions and 5 deletions

View file

@ -0,0 +1,21 @@
require_relative '../../spec_helper'
describe "Refinement#append_features" do
ruby_version_is "3.2" do
it "is not defined" do
Refinement.should_not have_private_instance_method(:append_features)
end
it "is not called by Module#include" do
c = Class.new
Module.new do
refine c do
called = false
define_method(:append_features){called = true}
proc{c.include(self)}.should raise_error(TypeError)
called.should == false
end
end
end
end
end

View file

@ -0,0 +1,21 @@
require_relative '../../spec_helper'
describe "Refinement#extend_object" do
ruby_version_is "3.2" do
it "is not defined" do
Refinement.should_not have_private_instance_method(:extend_object)
end
it "is not called by Object#extend" do
c = Class.new
Module.new do
refine c do
called = false
define_method(:extend_object){called = true}
proc{c.extend(self)}.should raise_error(TypeError)
called.should == false
end
end
end
end
end

View file

@ -0,0 +1,21 @@
require_relative '../../spec_helper'
describe "Refinement#prepend_features" do
ruby_version_is "3.2" do
it "is not defined" do
Refinement.should_not have_private_instance_method(:prepend_features)
end
it "is not called by Module#prepend" do
c = Class.new
Module.new do
refine c do
called = false
define_method(:prepend_features){called = true}
proc{c.prepend(self)}.should raise_error(TypeError)
called.should == false
end
end
end
end
end