From: Christian Neukirchen Date: 2005-12-25T07:19:16+09:00 Subject: Namespace pollution due to YAML in 1.8.3/1.8.4 I just moved to 1.8.4 and noticed it broke my main Ruby application, Nukumi2. Nukumi2 uses a DSL based on method_missing to define fields. It broke because YAML defines the method "taguri" in all classes to be dumped. > ruby-1.8.4/lib/yaml/tag.rb class Module # :nodoc: all # Adds a taguri _tag_ to a class, used when dumping or loading the class # in YAML. See YAML::tag_class for detailed information on typing and # taguris. def yaml_as( tag, sc = true ) verbose, $VERBOSE = $VERBOSE, nil class_eval <<-"end;", __FILE__, __LINE__+1 attr_writer :taguri def taguri ... end def self.yaml_tag_subclasses?; #{ sc ? 'true' : 'false' }; end end; YAML::tag_class tag, self ensure $VERBOSE = verbose end end This most nasty method should at least be called yaml_taguri, giving YAML the yaml_ prefix for all global methods and instance variables, especially because it can break software that is not directly related to YAML (In Nukumi2, it's only used for a plugin.). -- Christian Neukirchen http://chneukirchen.org