diff options
Diffstat (limited to 'lib/psych.rb')
-rw-r--r-- | lib/psych.rb | 48 |
1 files changed, 34 insertions, 14 deletions
diff --git a/lib/psych.rb b/lib/psych.rb index c3292d9..cedf0a4 100644 --- a/lib/psych.rb +++ b/lib/psych.rb @@ -233,9 +233,9 @@ require 'psych/class_loader' module Psych # The version of libyaml Psych is using - LIBYAML_VERSION = Psych.libyaml_version.join '.' + LIBYAML_VERSION = Psych.libyaml_version.join('.').freeze # Deprecation guard - NOT_GIVEN = Object.new + NOT_GIVEN = Object.new.freeze private_constant :NOT_GIVEN ### @@ -595,28 +595,25 @@ module Psych end # :stopdoc: - @domain_types = {} def self.add_domain_type domain, type_tag, &block key = ['tag', domain, type_tag].join ':' - @domain_types[key] = [key, block] - @domain_types["tag:#{type_tag}"] = [key, block] + domain_types[key] = [key, block] + domain_types["tag:#{type_tag}"] = [key, block] end def self.add_builtin_type type_tag, &block domain = 'yaml.org,2002' key = ['tag', domain, type_tag].join ':' - @domain_types[key] = [key, block] + domain_types[key] = [key, block] end def self.remove_type type_tag - @domain_types.delete type_tag + domain_types.delete type_tag end - @load_tags = {} - @dump_tags = {} def self.add_tag tag, klass - @load_tags[tag] = klass.name - @dump_tags[klass] = tag + load_tags[tag] = klass.name + dump_tags[klass] = tag end # Workaround for emulating `warn '...', uplevel: 1` in Ruby 2.4 or lower. @@ -635,9 +632,32 @@ module Psych private_class_method :warn_with_uplevel, :parse_caller class << self - attr_accessor :load_tags - attr_accessor :dump_tags - attr_accessor :domain_types + if defined?(Ractor) + require 'forwardable' + extend Forwardable + + class Config + attr_accessor :load_tags, :dump_tags, :domain_types + def initialize + @load_tags = {} + @dump_tags = {} + @domain_types = {} + end + end + + def config + Ractor.current[:PsychConfig] ||= Config.new + end + + def_delegators :config, :load_tags, :dump_tags, :domain_types, :load_tags=, :dump_tags=, :domain_types= + else + attr_accessor :load_tags + attr_accessor :dump_tags + attr_accessor :domain_types + end end + self.load_tags = {} + self.dump_tags = {} + self.domain_types = {} # :startdoc: end |