diff options
author | mneumann <mneumann@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-11-15 23:26:20 +0000 |
---|---|---|
committer | mneumann <mneumann@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-11-15 23:26:20 +0000 |
commit | 396b1f27ca1581aa676c235a5d021828eef6257f (patch) | |
tree | 96f95f56b0a5b3cfa508a3b669b068c0705a644c /lib/xmlrpc/parser.rb | |
parent | 67d54f209d28019cc5d8b332706dd9950b56bdc7 (diff) |
* imported and refactored original test cases
* added methods XMLRPC::XMLParser.each_installed_parser and
XMLRPC::XMLWriter.each_installed_writer to simply original test cases
* use Object#allocate instead of defining an empty #initialize
* module XMLRPC::Marshallable is now only used for tagging
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7274 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/xmlrpc/parser.rb')
-rw-r--r-- | lib/xmlrpc/parser.rb | 38 |
1 files changed, 15 insertions, 23 deletions
diff --git a/lib/xmlrpc/parser.rb b/lib/xmlrpc/parser.rb index da214ba1ce..ed0e9a66f3 100644 --- a/lib/xmlrpc/parser.rb +++ b/lib/xmlrpc/parser.rb @@ -112,31 +112,13 @@ module XMLRPC begin mod = Module klass.split("::").each {|const| mod = mod.const_get(const.strip)} - - Thread.critical = true - # let initialize take 0 parameters - mod.module_eval %{ - begin - alias __initialize initialize - rescue NameError - end - def initialize; end - } - - obj = mod.new - - # restore old initialize - mod.module_eval %{ - undef initialize - begin - alias initialize __initialize - rescue NameError - end - } - Thread.critical = false + obj = mod.allocate + hash.delete "___class___" - hash.each {|k,v| obj.__set_instance_variable(k, v) } + hash.each {|key, value| + obj.instance_variable_set("@#{ key }", value) if key =~ /^([\w_][\w_0-9]*)$/ + } obj rescue hash @@ -801,6 +783,16 @@ module XMLRPC NQXMLStreamParser, NQXMLTreeParser, REXMLStreamParser, XMLScanStreamParser] + # yields an instance of each installed parser + def self.each_installed_parser + XMLRPC::XMLParser::Classes.each do |klass| + begin + yield klass.new + rescue LoadError + end + end + end + end # module XMLParser |