summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS3
-rw-r--r--object.c8
-rw-r--r--test/ruby/test_module.rb12
3 files changed, 19 insertions, 4 deletions
diff --git a/NEWS b/NEWS
index d72f05e674..f60bea6594 100644
--- a/NEWS
+++ b/NEWS
@@ -77,6 +77,9 @@ with all sufficient information, see the ChangeLog file or Redmine
* Kernel#yield_self [Feature #6721]
+* Module
+ * Module#attr, attr_accessor, attr_reader, attr_writer are now public [#14132]
+
* Net::HTTP
* Net::HTTP.new supports no_proxy parameter [Feature #11195]
diff --git a/object.c b/object.c
index faafa489e5..c417141a67 100644
--- a/object.c
+++ b/object.c
@@ -4028,10 +4028,10 @@ InitVM_Object(void)
rb_define_method(rb_cModule, "name", rb_mod_name, 0); /* in variable.c */
rb_define_method(rb_cModule, "ancestors", rb_mod_ancestors, 0); /* in class.c */
- rb_define_private_method(rb_cModule, "attr", rb_mod_attr, -1);
- rb_define_private_method(rb_cModule, "attr_reader", rb_mod_attr_reader, -1);
- rb_define_private_method(rb_cModule, "attr_writer", rb_mod_attr_writer, -1);
- rb_define_private_method(rb_cModule, "attr_accessor", rb_mod_attr_accessor, -1);
+ rb_define_method(rb_cModule, "attr", rb_mod_attr, -1);
+ rb_define_method(rb_cModule, "attr_reader", rb_mod_attr_reader, -1);
+ rb_define_method(rb_cModule, "attr_writer", rb_mod_attr_writer, -1);
+ rb_define_method(rb_cModule, "attr_accessor", rb_mod_attr_accessor, -1);
rb_define_alloc_func(rb_cModule, rb_module_s_alloc);
rb_define_method(rb_cModule, "initialize", rb_mod_initialize, 0);
diff --git a/test/ruby/test_module.rb b/test/ruby/test_module.rb
index d1c5d53822..29236644bf 100644
--- a/test/ruby/test_module.rb
+++ b/test/ruby/test_module.rb
@@ -2030,6 +2030,18 @@ class TestModule < Test::Unit::TestCase
assert_raise(NameError){ m.instance_eval { remove_const(:__FOO__) } }
end
+ def test_public_methods
+ public_methods = %i[
+ include
+ prepend
+ attr
+ attr_accessor
+ attr_reader
+ attr_writer
+ ]
+ assert_equal public_methods.sort, (Module.public_methods & public_methods).sort
+ end
+
def test_private_top_methods
assert_top_method_is_private(:include)
assert_top_method_is_private(:public)