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