aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorMarc-Andre Lafortune <github@marc-andre.ca>2020-09-08 15:08:50 -0400
committerMarc-Andre Lafortune <github@marc-andre.ca>2020-09-14 12:46:27 -0400
commite026e186f4a01aa3f6cd02ae6ef33f44f129361c (patch)
tree4ed6005deb54e1b1f4dae538d177577a6c28f431 /lib
parent1cabb216c6d44ca948a65544dba73ad75bbc8ec4 (diff)
downloadruby-e026e186f4a01aa3f6cd02ae6ef33f44f129361c.tar.gz
[ruby/ostruct] Revert "ostruct.rb: deferred accessors"
This reverts commits: dc38e99813 22c082fcfd b499e0f9ff 58e5876646 Add test for overriden private methods [Fixes https://bugs.ruby-lang.org/issues/12136]
Diffstat (limited to 'lib')
-rw-r--r--lib/ostruct.rb21
1 files changed, 5 insertions, 16 deletions
diff --git a/lib/ostruct.rb b/lib/ostruct.rb
index b49df2d2d6..477b67c0d5 100644
--- a/lib/ostruct.rb
+++ b/lib/ostruct.rb
@@ -95,6 +95,7 @@ class OpenStruct
hash.each_pair do |k, v|
k = k.to_sym
@table[k] = v
+ new_ostruct_member!(k)
end
end
end
@@ -103,6 +104,7 @@ class OpenStruct
def initialize_copy(orig) # :nodoc:
super
@table = @table.dup
+ @table.each_key{|key| new_ostruct_member!(key)}
end
#
@@ -160,6 +162,7 @@ class OpenStruct
#
def marshal_load(x)
@table = x
+ @table.each_key{|key| new_ostruct_member!(key)}
end
#
@@ -183,7 +186,7 @@ class OpenStruct
#
def new_ostruct_member!(name) # :nodoc:
name = name.to_sym
- unless singleton_class.method_defined?(name)
+ unless respond_to?(name)
define_singleton_method(name) { @table[name] }
define_singleton_method("#{name}=") {|x| modifiable?[name] = x}
end
@@ -191,16 +194,6 @@ class OpenStruct
end
private :new_ostruct_member!
- def freeze
- @table.each_key {|key| new_ostruct_member!(key)}
- super
- end
-
- def respond_to_missing?(mid, include_private = false) # :nodoc:
- mname = mid.to_s.chomp("=").to_sym
- defined?(@table) && @table.key?(mname) || super
- end
-
def method_missing(mid, *args) # :nodoc:
len = args.length
if mname = mid[/.*(?==\z)/m]
@@ -208,11 +201,7 @@ class OpenStruct
raise ArgumentError, "wrong number of arguments (given #{len}, expected 1)", caller(1)
end
modifiable?[new_ostruct_member!(mname)] = args[0]
- elsif len == 0 # and /\A[a-z_]\w*\z/ =~ mid #
- if @table.key?(mid)
- new_ostruct_member!(mid) unless frozen?
- @table[mid]
- end
+ elsif len == 0
elsif @table.key?(mid)
raise ArgumentError, "wrong number of arguments (given #{len}, expected 0)"
else