lib/ruby-conf.rb in ruby-conf-2.6.2 vs lib/ruby-conf.rb in ruby-conf-2.6.3
- old
+ new
@@ -87,14 +87,26 @@
@__rc_attributes.each_value { |value| value.__rc_lock if value.is_a?(Config) }
self
end
def [](name, *args)
- value = @__rc_attributes[name.to_sym]
+ name = name.to_sym
+ value = @__rc_attributes[name]
if value.is_a?(Proc)
args += [nil] * (value.arity.abs - args.size) if value.arity.abs > args.size
- __rc_root.instance_exec(*args, &value)
+ @@stack ||= []
+ if @@stack.include?(name)
+ RubyConf.err("[ruby-conf] Detected recursive proc: #{name}")
+ "[RECURSIVE]"
+ else
+ @@stack << name
+ begin
+ __rc_root.instance_exec(*args, &value)
+ ensure
+ @@stack.delete(name)
+ end
+ end
else
value
end
end
@@ -215,10 +227,10 @@
self[key]
rescue => e
"[UNRESOLVED:#{e}]"
end
str += "#{key}: "
- str += value.is_a?(Config) ? (value == self ? "[SELF]" : "{ #{value.__rc_build_inspect} }") : value.inspect
+ str += value.is_a?(RubyConf::Config) ? (value == self ? "[SELF]" : "{ #{value.__rc_build_inspect} }") : value.inspect
str
}.join(", ")
istr
end