In Files

  • xmlrpc/parser.rb

XMLRPC::Convert

Public Class Methods

base64(str) click to toggle source
 
               # File xmlrpc/parser.rb, line 118
def self.base64(str)
  XMLRPC::Base64.decode(str)
end
            
boolean(str) click to toggle source
 
               # File xmlrpc/parser.rb, line 75
def self.boolean(str)
  case str
  when "0" then false
  when "1" then true
  else
    raise "RPC-value of type boolean is wrong" 
  end
end
            
dateTime(str) click to toggle source
 
               # File xmlrpc/parser.rb, line 88
def self.dateTime(str)
  case str
  when /^(-?\d\d\d\d)-?(\d\d)-?(\d\d)T(\d\d):(\d\d):(\d\d)(?:Z|([+-])(\d\d):?(\d\d))?$/
    a = [$1, $2, $3, $4, $5, $6].collect{|i| i.to_i}
    if $7
      ofs = $8.to_i*3600 + $9.to_i*60
      ofs = -ofs if $7=='+'
      utc = Time.utc(*a) + ofs
      a = [ utc.year, utc.month, utc.day, utc.hour, utc.min, utc.sec ]
    end
    XMLRPC::DateTime.new(*a)
  when /^(-?\d\d)-?(\d\d)-?(\d\d)T(\d\d):(\d\d):(\d\d)(Z|([+-]\d\d):(\d\d))?$/
    a = [$1, $2, $3, $4, $5, $6].collect{|i| i.to_i}
    if a[0] < 70
      a[0] += 2000
    else
      a[0] += 1900
    end
    if $7
      ofs = $8.to_i*3600 + $9.to_i*60
      ofs = -ofs if $7=='+'
      utc = Time.utc(*a) + ofs
      a = [ utc.year, utc.month, utc.day, utc.hour, utc.min, utc.sec ]
    end
    XMLRPC::DateTime.new(*a)
  else
    raise "wrong dateTime.iso8601 format " + str
  end
end
            
double(str) click to toggle source
 
               # File xmlrpc/parser.rb, line 84
def self.double(str)
  str.to_f
end
            
fault(hash) click to toggle source
 
               # File xmlrpc/parser.rb, line 145
def self.fault(hash)
  if hash.kind_of? Hash and hash.size == 2 and 
    hash.has_key? "faultCode" and hash.has_key? "faultString" and 
    hash["faultCode"].kind_of? Integer and hash["faultString"].kind_of? String

    XMLRPC::FaultException.new(hash["faultCode"], hash["faultString"]) 
  else
    raise "wrong fault-structure: #{hash.inspect}"
  end
end
            
int(str) click to toggle source
 
               # File xmlrpc/parser.rb, line 71
def self.int(str)
  str.to_i
end
            
struct(hash) click to toggle source
 
               # File xmlrpc/parser.rb, line 122
def self.struct(hash)
  # convert to marhalled object
  klass = hash["___class___"]
  if klass.nil? or Config::ENABLE_MARSHALLING == false 
    hash
  else
    begin
      mod = Module
      klass.split("::").each {|const| mod = mod.const_get(const.strip)}

      obj = mod.allocate
      
      hash.delete "___class___"
      hash.each {|key, value| 
        obj.instance_variable_set("@#{ key }", value) if key =~ /^([\w_][\w_0-9]*)$/
      }
      obj
    rescue
      hash
    end
  end
end